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을 주입한다.