Search

모듈 / 동적 모듈 (Dynamic Module)

들어가기 전에…

모듈은 무엇인가?

NestJS의 모듈 시스템은 애플리케이션을 기능별로 나누고 코드 재사용성과 관리 편의성을 높이기 위해 설계된 구조이다.
모듈을 통해 애플리케이션을 기능 단위로 나누면 의존성 관리를 효과적으로 할 수 있고 유지 보수와 확장에 용이해진다.
모듈의 기본 구조
모듈은 @Module() 데코레이터를 통해 정의되며, 이 데코레이터는 모듈에 필요한 Controller, Service, Provider들을 설정하는 역할을 한다.
모듈의 옵션은 크게 네 가지로 imports, controllers, providers, exports 가 있다.
imports : 다른 모듈을 불러올 수 있도록 설정하는 옵션이다. 이를 통해 기능이나 의존성을 모듈 간에 공유할 수 있다.
controllers : 해당 모듈에서 사용되는 컨트롤러 목록이다.
providers : 모듈에서 제공할 서비스나 기타 종속성 목록이다. 주로 비즈니스 로직을 처리하는 서비스가 포함된다.
exports : 외부 모듈에서 이 모듈의 프로바이더를 사용할 수 있도록 허용하는 옵션이다.
모듈의 활용 방안
기능별 분리 : UserModule, ProductModule 등으로 분리하여 사용한다. 기능별로 코드가 구분되어 있어 관리가 수월하다.
글로벌 모듈 : 공통으로 사용되는 모듈 ex) AuthModule, DatabaseModule은 전역 모듈로 설정하여 어디에서나 사용할 수 있다.
마이크로 서비스 : 여러 기능이 독립적으로 작동하도록 나누고, 필요에 따라 모듈을 분리하여 마이크로 서비스로 전환할 수 있다.

개요

NestJs의 모듈은 기본적으로 정적이다. 즉, 모듈 내에 정의된 프로바이더나 서비스는 고정된 상태로 설정된다.
하지만 애플리케이션의 다양한 환경 또는 외부 시스템 연동 시, 각 상황에 맞는 동적인 설정을 적용해야 할 때가 많다. 이런 케이스에서는 NestJS의 동적 모듈을 사용하면 된다.
NestJS의 동적 모듈은 애플리케이션의 구성에 따라 모듈의 설정을 동적으로 변경하거나 초기화 할 수 있는 기능이다.
이 기능은 NestJS의 유연성확장성을 극대화 하는 핵심 패턴 중 하나이다.
동적 모듈은 주로 모듈의 설정값을 외부에서 전달받아 모듈의 동작 방식이나 제공하는 프로바이더를 변경해야 하는 경우에 사용된다.
대표적으로 예를 들면 데이터베이스 연결 설정이나 외부 API 서비스 설정 등 환경에 따라 달라지는 설정값을 다룰 때 유용하다.

동적 모듈의 구성요소

동적 모듈은 보통 forRoot() 또는 forRootAsync() 메서드를 통해 설정을 전달받고, 모듈을 동적으로 구성한다.
1.
forRoot() 메서드
정적 메서드로 정의되며, 모듈의 초기 설정값을 받아 동적으로 설정한다.
반환값은 DynamicModule 타입으로 NestJS가 모듈을 어떻게 구성할지에 대한 정보 (provider, module, export 등)를 포함한다.
TypeScript
복사