Skip to main content

NestJs - Dynamic Module

Nestjs - 동적 모듈

Dynamic Module

  • 정적 모듈이 매개변수를 통해 모듈의 동작을 변경시킬 수 있는 동적 할당 방식
  • 동적 모듈은 인스턴스가 아닌 클래스 호출 방식을 사용한다.

기존 정적 모듈의 방식

- Providers 리스트를 각각 인스턴스로 생성하여 상위 모듈의 Serivce 레이어의 생성자에 해당 인스턴스를 주입한다.
- 정적 모듈 바인딩의 경우, 상위 모듈이 Provider가 구성되는 방식에 영향을 미칠 수 없다.

모듈의 imports 배열을 확인했을 때

  • 해당 모듈에서 사용하려는 다른 module 클래스만 들어가있으면, 정적 모듈 방식이다.
  • 해당 모듈에서 사용하려는 module 클래스의 정적 메소드를 호출해서 인자(옵션 객체)를 넘겨준다면, 동적 모듈 방식이다.
  • 커뮤니티 가이드라인에 따르면 register 또는 forRoot, forFeature로 메소드 네이밍을 한다.
    • register - 특정 설정을 config 하기위해 동적 모듈을 사용하는 일반적인 경우
    • forRoot - 한 번이상 해당 module을 config하고, 해당 설정을 여러 곳에서 재사용하려는 경우
    • forFeature - forRoot를 재사용 하는 경우에 일부 설정을 수정해서 적용하려는 경우

Dynamic Module 동작 방식

  • Module은 다른 공급자가 사용할 수 있도록 주입 가능한 서비스를 제공하고 내보내기 위한 호스트이다.
  • 의존성 주입시 런타임에만 제공되는 개체가 달라진다.
  • 런타임 환경에서 정적 메소드(forRoot, register)에서 넘겨받는 옵션 객체를 Nest IoC 컨테이너에 바인딩 후, Nest가 해당 모듈을 사용하는 Service을 주입한다.