NestJS 라이프사이클 훅: 모듈 및 앱 종료 시점 관리 및 활용법

🤖 AI 추천

NestJS 기반의 백엔드 개발자라면 누구나 애플리케이션의 생명주기를 이해하고 리소스 관리를 효율적으로 수행하기 위해 알아야 할 내용입니다. 특히 모듈별 초기화 및 정리 작업이 필요한 경우 유용합니다.

🔖 주요 키워드

NestJS 라이프사이클 훅: 모듈 및 앱 종료 시점 관리 및 활용법

NestJS 라이프사이클 훅: 모듈 및 앱 종료 시점 관리 및 활용법

핵심 기술

NestJS는 의존성 주입(DI) 기반 프레임워크로, 애플리케이션의 컴포넌트(모듈, 프로바이더 등) 생성 및 소멸 시점에 특정 로직을 실행할 수 있도록 라이프사이클 훅(Lifecycle Hook)을 제공합니다. 이를 통해 개발자는 애플리케이션의 초기화 및 종료 과정을 효과적으로 제어할 수 있습니다.

기술적 세부사항

  • 기본 실행 흐름: main.ts 실행 → AppModule 로딩 → 모듈/프로바이더 의존성 주입 → 컨트롤러/서비스 작동 → 요청 처리 완료 순으로 진행됩니다.
  • 라이프사이클 훅: NestJS는 특정 이벤트 발생 시 개발자가 작성한 메서드를 자동으로 호출하는 인터페이스를 제공합니다.
    • OnModuleInit: 모듈의 모든 프로바이더가 초기화된 직후 호출됩니다. 초기 설정 로직에 사용됩니다.
    • OnApplicationBootstrap: NestJS 애플리케이션이 완전히 부트스트랩된 후 호출됩니다. 전역 설정 등에 활용됩니다.
    • OnModuleDestroy: 모듈이 종료되기 직전에 호출됩니다. 모듈별 리소스 정리 작업에 적합합니다.
    • OnApplicationShutdown: 애플리케이션 종료 시그널을 감지했을 때 호출됩니다. 전역적인 리소스(예: 데이터베이스 커넥션) 정리 작업에 사용됩니다.
  • 훅 사용 예시: @Injectable() 데코레이터와 implements 키워드를 사용하여 OnModuleInit 또는 OnApplicationShutdown 등의 인터페이스를 구현하고 해당 메서드를 작성하여 로직을 정의합니다. async 메서드도 지원합니다.
  • OnModuleDestroy vs OnApplicationShutdown: OnModuleDestroy는 개별 모듈의 종료 시점에, OnApplicationShutdown은 애플리케이션 전체의 종료 시점에 호출되어 호출 범위가 다릅니다.

📚 관련 자료