https://docs.nestjs.com/fundamentals/lifecycle-events#lifecycle-sequence

request-response cycle 와는 다름! 이것도 정리해야겠다.
Lifecycle sequence
크게 나누면 초기화 - 실행 - 종료
초기화
모듈과 서비스 초기화
설정 로드, 데이터베이스 설정
필요한 리소스 준비
실행
실제 요청을 받아 처리하고 응답을 반환
종료
개방된 연결 정리
사용 중인 리소스 해제
종료 신호 받으면 종료 전 필요한 작업을 수행할 수 있도록 종료 훅을 제공(graceful shutdown)
Nest.js 애플리케이션 생명주기
1. 부트스트래핑 시작
- Nest 코어 부트스트래핑: 애플리케이션의 핵심 기능을 초기화합니다.
2. onModuleInit
- 각 모듈 초기화 후:
- 자식 컨트롤러 및 프로바이더의 onModuleInit() 메소드 대기: 각 모듈에 속한 컨트롤러와 프로바이더의
onModuleInit() 메소드를 비동기적으로 실행합니다.
- 모듈의 onModuleInit() 메소드 대기: 모듈 자체의
onModuleInit() 메소드를 실행합니다.
3. onApplicationBootstrap
- 각 모듈에 대하여:
- 자식 컨트롤러 및 프로바이더의 onApplicationBootstrap() 메소드 대기: 모듈 내의 각 컨트롤러와 프로바이더가
onApplicationBootstrap() 메소드를 실행합니다.
- 모듈의 onApplicationBootstrap() 메소드 대기: 모듈 자체의
onApplicationBootstrap() 메소드를 실행합니다.
4. 애플리케이션 실행 중
- 리스너 시작: HTTP 서버, WebSocket 서버, 각 마이크로서비스 등의 리스너를 시작하고 연결을 준비합니다.
- 정상적인 애플리케이션 처리: 일반적인 애플리케이션 작업을 수행합니다.
5. 종료 신호 수신
- 애플리케이션을 종료하기 위한 신호를 받습니다.
6. onModuleDestroy
- 각 모듈에 대하여:
- 자식 컨트롤러 및 프로바이더의 onModuleDestroy() 메소드 대기: 각 모듈의 컨트롤러와 프로바이더가
onModuleDestroy() 메소드를 실행합니다.
- 모듈의 onModuleDestroy() 메소드 대기: 모듈 자체의
onModuleDestroy() 메소드를 실행합니다.
7. beforeApplicationShutdown
- 각 모듈에 대하여:
- 자식 컨트롤러 및 프로바이더의 beforeApplicationShutdown() 메소드 대기
- 모듈의 beforeApplicationShutdown() 메소드 대기
8. 리스너 중지
- HTTP 서버, WebSocket 서버 등의 연결 종료를 기다립니다.
9. onApplicationShutdown
- 각 모듈에 대하여:
- 자식 컨트롤러 및 프로바이더의 onApplicationShutdown() 메소드 대기
- 모듈의 onApplicationShutdown() 메소드 대기
10. 프로세스 종료
시작 -> 모듈 설정 -> 애플리케이션 시작 -> 실행 -> 모듈 종료 -> 애플리케이션 종료 준비 -> 리스터 중지 -> 애플리케이션 종료 -> 프로세스 종료