새로운 어플리케이션이 출시되는 등의 이유로 서버를 종료하는 상황을 가정해보자. 사용자의 요청을 처리하는 도중에 서버를 종료하면 어떻게 될까? 사용자는 서버로부터 유의미한 응답을 받을 수 없기 때문에 불편함을 느낄 것이다.
그레이스풀 종료는 서버가 모든 요청에 대해 응답하고, 더 이상 처리해야 하는 작업이 없을 때 종료하는 것을 의미한다.
시그널은 프로세스에게 특정 이벤트가 발생했다는 것을 알려준다. 종료 시그널을 이용하여 어플리케이션이 종료 준비하도록 만들 것이다.
그레이스풀 종료를 구현하기 위해서는 적절한 종료 시그널을 전달해야 한다.
SIGTERM
SIGKILL
SIGKILL은 프로세스가 갑자기 종료되므로 어떠한 정리 작업도 수행하지 못한다. 따라서 데이터가 손실될 수 있고, 사용자의 요청도 마무리하지 못한다. 하지만 SIGTERM
을 이용하면 프로세스가 해당 시그널을 핸들링 할 수 있기 때문에 자원을 해제하는 등 그레이스풀 종료를 수행할 수 있다.
도커 컨테이너에서 돌아가는 어플리케이션에 SIGTERM을 전달할 것이다. 우선 컨테이너를 종료시키는 도커 CLI를 정리해봤다.