graceful shutdown

새로운 어플리케이션이 출시되는 등의 이유로 서버를 종료하는 상황을 가정해보자. 사용자의 요청을 처리하는 도중에 서버를 종료하면 어떻게 될까? 사용자는 서버로부터 유의미한 응답을 받을 수 없기 때문에 불편함을 느낄 것이다.

graceful shutdown이란?

그레이스풀 종료는 서버가 모든 요청에 대해 응답하고, 더 이상 처리해야 하는 작업이 없을 때 종료하는 것을 의미한다.


어플리케이션에 종료 시그널 전달하기

시그널은 프로세스에게 특정 이벤트가 발생했다는 것을 알려준다. 종료 시그널을 이용하여 어플리케이션이 종료 준비하도록 만들 것이다.

SIGTERM vs. SIGKILL

그레이스풀 종료를 구현하기 위해서는 적절한 종료 시그널을 전달해야 한다.

SIGKILL은 프로세스가 갑자기 종료되므로 어떠한 정리 작업도 수행하지 못한다. 따라서 데이터가 손실될 수 있고, 사용자의 요청도 마무리하지 못한다. 하지만 SIGTERM을 이용하면 프로세스가 해당 시그널을 핸들링 할 수 있기 때문에 자원을 해제하는 등 그레이스풀 종료를 수행할 수 있다.


도커 컨테이너에 SIGTERM 전달하는 법

도커 컨테이너에서 돌아가는 어플리케이션에 SIGTERM을 전달할 것이다. 우선 컨테이너를 종료시키는 도커 CLI를 정리해봤다.