Nest.js LifeCycle Hook: 애플리케이션 초기화 및 종료 시점 관리
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

Nest.js 라이프 사이클 LifeCycle

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

  • *백엔드 개발자** (NestJS 프레임워크 사용자, 의존성 주입(DI) 및 애플리케이션 생명주기 관리 필요자)
  • *난이도**: 중급 이상 (의존성 주입, 애플리케이션 초기화/종료 로직 이해 필요)

핵심 요약

  • NestJS의 LifeCycle HookOnModuleInit, OnApplicationBootstrap, OnModuleDestroy, OnApplicationShutdown 4가지 인터페이스로, 애플리케이션 초기화 및 종료 시점에 특정 작업을 처리할 수 있도록 제공
  • onModuleDestroy()모듈 종료 시 호출되며, onApplicationShutdown()애플리케이션 전체 종료 시 호출됨 (범위 차이)
  • async 키워드를 사용한 메서드도 NestJS가 자동으로 처리 가능

섹션별 세부 요약

1. 왜 LifeCycle을 알아야 할까?

  • NestJS는 의존성 주입(DI) 기반 프레임워크로, 클래스를 자동 생성 및 관리
  • 서비스 클래스의 생성/소멸 시점을 명확히 이해해야 애플리케이션 초기화/종료 시 로직을 정확히 처리 가능
  • 애플리케이션 종료 시 리소스 정리(예: DB 연결 종료, 메모리 해제)를 위해 LifeCycle Hook 사용 필요

2. 기본 실행 흐름

  • main.ts 실행 → AppModule 로딩 → 모듈/프로바이더 의존성 주입 → 컨트롤러/서비스 작동 → 요청 처리 완료
  • Hook은 이 흐름의 중간 단계에 개입 가능 (예: 초기화, 종료 시점)

3. LifeCycle Hook 정의

| Hook | 호출 시점 | 주요 용도 |

|------|-----------|-----------|

| OnModuleInit | 모듈 의존성 주입 직후 | 모듈 내 초기화 로직 (예: DB 연결) |

| OnApplicationBootstrap | 앱 전체 부트스트랩 이후 | 전역 설정 (예: 로깅 시스템 초기화) |

| OnModuleDestroy | 모듈 종료 직전 | 모듈 내 리소스 정리 (예: 파일 해제) |

| OnApplicationShutdown | 앱 종료 시그널 감지 시 | 전역 리소스 정리 (예: Redis 커넥션 종료) |

4. 예시 코드 및 실행 흐름

@Injectable()
export class MyService implements OnModuleInit, OnApplicationShutdown {
  onModuleInit() {
    console.log('MyService 초기화!');
  }
  onApplicationShutdown(signal: string) {
    console.log(`앱 종료 감지! 시그널: ${signal}`);
  }
}
  • 실행 시점:

- 앱 시작 시 → onModuleInit() 호출

- 앱 종료 시 → onApplicationShutdown(signal) 호출

5. 사용 사례

  • 앱 시작 시: DB 초기화, 테스트 데이터 로딩, 배치 잡 등록
  • 앱 종료 시: Redis/RabbitMQ 커넥션 종료, 에러 로깅 시스템 종료

결론

  • LifeCycle Hook은 애플리케이션 생명주기 관리에 필수적 (리소스 관리, 로깅, 초기화 등)
  • onModuleDestroy()onApplicationShutdown()범위 차이로 분리하여 사용 (모듈 vs 전역)
  • 공식 문서Node.js 시그널 처리 관련 문서 참조 권장 (예: SIGINT, SIGTERM 등)