- Published on
Nestjs Module | Nestjs Docs
- Authors

- Name
- JaeHyeok CHOI
- none
Nestjs Module

모듈은 @Module 데코레이터로 주석이 달린 클래스입니다. 이 데코레인터는 Nest가 앱 구조를 효율적으로 구성하고 관리하는 데 사용하는 메타데이터를 제공합니다.
모든 Nest 애플리케이션에는 최소 하나의 모듈 ROOT 모듈이 있으며, 이 모듈을 Nest가 애플리케이션 그래프를 구축하는 시작점 역할을 합니다.
이 그래프는 NEst가 모듈과 Provider 사이의 관계와 종속성을 확인하는 데 사용하는 내부 구조입니다.
소규모 앱에는 루트 모듈만 있을 수 있지만, 일반적으로는 그렇지 않으며 모듈은 구성 요소를 효과적으로 구성하는 방법으로 적극 권장됩니다.
대부분의 앱에는 여러 모듈이 있으며, 각 모듈은 밀접하게 관련된 기능 집합을 캡슐화합니다.
@Module() 데코레이터는 모듈을 설명하는 속성을 가진 단일 객체를 가져옵니다.
|---|---|---|---| | providers | NEst 인젝터에 의해 인스턴스화되고 최소한 이 모듈 전체에서 공유될 수 있는 공급자 | | controllers | 이 모듈에 정의된 컨트롤러 세트는 인스턴스화되어야 합니다. | | imports | 이 모듈에 필요한 공급자를 export 한 모듈들 | | exports | 이 모듈에서 제공하는 하위 집합은 provders 모듈을 가져오는 다른 모듈에서도 사용할 수 있어야 합니다. Provider 자체를 사용하거나 토큰만 사용할 수 있습니다. |
이 모듈은 기본적으로 Provider를 캡슐화합니다. 모듈에서 export된 Provider는 기본적으로 해당 모듈의 공용 인터페이스 또는 API 역할을 합니다.
공유 모듈
Nest에서는 기본적으로 모듈이 싱글턴이므로 여러 모듈 간에 모든 공급자의 동일한 인승턴스를 손쉽게 공유할 수 있습니다.
모든 모듈은 자동으로 공유 모듈이 되며, 일단 생성되면 모든 모듈에서 재사용할 수 있습니다.
글로벌 모듈
동일한 모듈 셋을 모든 곳에서 가져와야 한다면 번거로울 수 있습니다.
어디서나 사용할 수 있는 일련의 Provider를 제공하려면 @Global() 데코레이터를 사용하여 모듈을 전역으로 생성할 수 있습니다.
동적 모듈
Nest의 동적 모듈을 사용하면 런타임에 구성 가능한 모듈을 생성할 수 있습니다. 이는 특히 특정 옵션이나 구성에 따라 제공자를 생성할 수 있는 유연하고 사용자 정의 가능한 모듈을 제공해야 할 때 유용합니다.
동적 모듈의 작동 방식에 대한 간략한 개요는 다음과 같습니다.
import { Module, DynamicModule } from '@nestjs/common';
import { createDatabaseProviders } from './database.providers';
import { Connection } from './connection.provider';
@Module({
providers: [Connection],
exports: [Connection],
})
export class DatabaseModule {
static forRoot(entities = [], options?): DynamicModule {
const providers = createDatabaseProviders(options, entities);
return {
module: DatabaseModule,
providers: providers,
exports: providers,
};
}
}
| 이 forRoot() 메서드는 동기 혹은 비동기로 동적 모듈을 반환 가능합니다.
이 모듈은 Connection 모듈을 default로 정의하며 forRoot() 메서드를 통해 전달된 entities와 options에 종속된 레포지토리와 같은 provider의 집합을 노출시킵니다.
이는 동적 모듈에서 반환되는 속성들이 데코레이터 메타데이터에 정의된 기본 모듈 메타데이터를 재정의하는 것이 아니라 확장한다는 의미입니다.
이를 통해 정적으로 선언된 공급자와 동적으로 생성된 저장소 공급자가 모듈에서 내보내집니다.