들어가기 전에…
모듈은 무엇인가?
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
복사