@Module()
데코레이터로 연결되며
Application 구조를 정의하기 위한 메타데이터를 가지고 있음
Root 모듈(최상단) 을 통해 Nest 구조를 그림
Module()
내부 속성
providers | 인스턴스화 되어 공유되는 모듈 |
controllers | 현재 모듈 내 인스턴스화 되어야 할 controllers 집합 |
imports | 현재 모듈 내 필요한, provider 를 export 하는 module |
exports | 현재 모듈에서 제공하는 provider 집합, 다른 모듈에서 현재 모듈의 필요한 부분으로 provider 자체 혹은 token(provide value) |
기능에 연관된 코드들끼리 모아놓는 것
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
CLI를 사용하여 모듈을 생성하려면 $ nest g module cats명령을 실행하기만 하면 됩니다.
import { Module } from '@nestjs/common';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [CatsModule],
})
export class AppModule {}
Module 은 기본 singleton 이며,
공통 instance 를 공유할 수 있음
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
exports: [CatsService] // shared modules
})
export class CatsModule {}
@Module({
imports: [CommonModule],
exports: [CommonModule],
})
export class CoreModule {}
이로 인해, CoerModule 을 통해 CommonModule 의 provider 에 접근이 가능
모듈 자체적으로도 provider 를 주입할 수 있음
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {
constructor(private catsService: CatsService) {}
}
주로 Config 에 적용되는데, 문자 그대로 해당 Module 이 생성될 때 init 됨
모듈 범위 내에서 캡슐화되기 때문에, 가져오지 않으면 사용할 수 없음
@Global()
데코레이터로 전역적으로 사용 가능
import { Module, Global } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Global()
@Module({
controllers: [CatsController],
providers: [CatsService],
exports: [CatsService],
})
export class CatsModule {}
모든 것을 글로벌하게 만드는 것은 좋은 디자인 결정이 아닙니다. 불필요한 상용구의 양을 줄이기 위해 전역 모듈을 사용할 수 있습니다. Imports은 일반적으로 소비자가 모듈의 API를 사용할 수 있도록 하는 데 선호되는 방법입니다.
provider 를 동적으로 등록할 수 있게 해주는 custom module