[Node.js] SIGTERM

cabbage·2023년 7월 28일
0

Node.js

목록 보기
7/7
post-thumbnail

익스프레스에 타입스크립트를 적용하는 과정에서 ts-node-dev 패키지를 설치했다. 이 패키지를 사용하기 위해 설정한 스크립트에서 --exit-child라는 옵션을 사용했는데, 이 옵션은 SIGTERM exit 핸들러를 자식 프로세스에 추가하는 옵션이라고 한다.

SIGTERM이 무엇인지 궁금해서 구글링해 봤는데 여러 정보를 알 수 있었다.

SIGTERM이 무엇일까

SIGTERM은 프로그램을 종료하기 위해 사용하는 종료 시그널 중 하나이다. 다양한 종료 시그널들이 존재하고 종료 시그널들은 자신만의 이름을 갖는데, 그 중 하나의 이름이 SIGTERM인 것이다.

SIGTERM

  • 프로그램을 종료하기 위해 사용하는 일반적인 시그널이다.
  • SIGKILL과 다르게 차단, 핸들링, 무시될 수 있다.
  • 프로그램이 종료하기를 정중하게 요청하는 방식이다.
  • 기본적으로 쉘 명령어 kill은 이 시그널을 발생시킨다.

종료 시그널 핸들링하기

종료 시그널을 핸들링해야 하는 이유는 프로그램을 실제로 종료하기 전에 프로그램을 종료하기 위한 정리 작업들을 해야하기 때문이다.

만약 종료 시그널을 핸들링하지 않는 익스프레스 서버가 클라이언트의 요청을 처리하던 도중에 종료된다면 클라이언트의 요청 사항을 모두 처리하지 않고 종료될 것이다. 따라서 이런 점들을 방지하기 위해 종료 시그널을 핸들링하는 작업을 처리해야 한다.

Node.js에서도 SIGTERM 종료 시그널을 처리할 수 있다. 서버 프로그램을 종료한다는 SIGTERM 종료 시그널을 Node.js가 받게 되면 이에 해당하는 시그널 이벤트가 발생한다. 이 종료 시그널 이벤트를 시그널 핸들러 함수를 통해 처리할 수 있다. Node.js에서 시그널 핸들러는 첫 번째 인자로 시그널의 이름을 전달 받는다.

function handle(signal) {
  console.log(`Received ${signal}`);
}

process.on('SIGTERM', handle);

이 예제는 간단한 Node.js 공식문서의 예제이지만 익스프레스 서버에서는 SIGTERM 시그널 핸들러 함수에 여러 정리 작업들을 추가해 익스프레스 서버를 Graceful shutdown 할 수 있다고 한다.

정리

  • Node.js에서 시그널 핸들러 함수를 통해 시그널을 처리할 수 있다는 것을 알 수 있었다.
  • --exit-child 옵션이 SIGTERM exit 핸들러를 자식 프로세스에 추가한다는 것은 프로그램을 종료하면서 자식 프로세스에 SIGTERM 시그널을 처리하는 핸들러를 추가해 안전하게 자식 프로세스와 프로그램을 종료한다는 의미로 이해하였다.

참고

profile
캐비지 개발 블로그입니다. :)

0개의 댓글

관련 채용 정보