-
Nestjs Lifecycle 과 Event hooksNode 2024. 11. 19. 22:52
1. 라이프사이클
NestJS는 애플리케이션 시작과 종료 시 다양한 이벤트를 발생시킨다. 이를 통해 초기화 작업, 리소스 설정, 클린업(종료 작업) 등을 수행할 수 있다.
전체 수명 주기를 초기화, 실행 및 종료의 세 단계로 나눌 수 있다.
2. 라이프사이클 이벤트
NestJS 의 Lifecycle Events 는 애플리케이션 또는 특정 구성 요소(module, provider, controller)의 수명 주기 동안 특정 시점에 실행되는 메서드이다.
명시적으로 각 훅의 인터페이스를
implements
해야 훅이 정상적으로 트리거된다.2.1. 애플리케이션 초기화 관련 이벤트
이벤트 대상 설명 OnModuleInit 모듈, 프로바이더 모듈이나 프로바이더가 생성되고 의존성이 주입된 후 호출된다. OnApplicationBootstrap 애플리케이션, 프로바이더 애플리케이션의 모든 초기화가 완료된 후 호출한다. 예제: OnModuleInit
import { Injectable, OnModuleInit } from '@nestjs/common'; @Injectable() export class AppService implements OnModuleInit { onModuleInit() { console.log('Module has been initialized'); } }
예제: OnApplicationBootstrap
import { Injectable, OnApplicationBootstrap } from '@nestjs/common'; @Injectable() export class AppService implements OnApplicationBootstrap { onApplicationBootstrap() { console.log('Application has been bootstrapped'); } }
2.2 애플리케이션 종료 관련 이벤트
이벤트 대상 설명 OnModuleDestory 모듈, 프로바이더 모듈이 종료되기 전에 호출된다. BeforeApplicationShutdown 애플리케이션, 프로바이더 애플리케이션 종료 전 호출된다. OnAppliationShutdown 애플리케이션, 프로바이더 애플리케이션 종료 후 호출된다. 종료 훅(hook) 리스너는 시스템 리소스를 소모하므로 기본적으로 비활성화된다.
위 테이블의 종료 관련 훅(
OnModuleDestory
,BeforeApplicationShutdown
,OnApplicationShutdown
)은 명시적으로app.close()
를 호출하거나 특수 시스템 신호(예:SIGTERM
) 를 수신하고 애플리케이션 부트스트랩에서enableShutdownHooks
를 올바르게 호출한 경우에 트리거된다.종료 훅(hook) 리스너 활성화 예시
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); // Starts listening for shutdown hooks app.enableShutdownHooks(); await app.listen(process.env.PORT ?? 3000); } bootstrap();
'Node' 카테고리의 다른 글
Jest timeout 설정 (0) 2024.11.10 TypeError [ERR_INVALID_ARG_TYPE]: The “path” argument must be of type string. Received type undefined raised when starting react app (0) 2021.04.27