
nestjs에서는 어플리케이션의 모든 요소에서 관리할 수 있는 라이프사이클이 있는데,
nest에서는 이런 주요 라이프사이클에 대한 훅(hook)을 제공한다.
- onModuleInit
- onApplicationBootstrap()
- onModuleDestroy()
- beforeApplicationShutdown()
- 모든 onModuleDestroy() 핸들러가 완료된 이후 호출
모든 작업이 완료된 후 남아있는 모든 커넥션을 닫음(app.close()를 호출함으로)
- onApplicationShutdown()
- app.close()가 실행돼 커넥션이 닫힌 이후에 호출
- request스코프를 가진 인스턴스는 위의 라이프사이클이 트리거되지 않는데, 이는 request스코프 인스턴스의 생명주기를 예측할 수 없기 때문이다.
request스코프 인스턴스는 요청에 따라 개별적으로 생성되고, 요청에 대한 응답을 보낸 수 가비지가 된다.
- Shutdown Hook관련 주의사항
해당 훅은 시스템 리소스를 소비하기 때문에 기본적으로는 비활성화되어 있다.
따라서 훅을 사용하려면 아래처럼 해당 훅을 활성화해야 한다.
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// Starts listening for shutdown hooks
app.enableShutdownHooks();
await app.listen(3000);
}