하나의 main 모듈에 모든 provider, controller을 넣으면 유지보수하기 매우 힘들어진다.
따라서 모듈을 기능마다 만들 필요가 있다.
Nest는 아래의 그림과 같이 모듈을 구성할 수 있다!

모듈 여러 개를 만들어 main에서는 모듈들만 가져오면 controller, provider도 동시에 가져오는 효과를 볼 수 있다.
모듈의 기본 정의는 아래와 같다.
// 공식 문서에서는 Nest inject 돼야하니 뭐니 말하지만
// 아래와 같이 이해하는 것이 편하다.
@Module({
providers: [], // 이 모듈에서 사용하는 provider들
controllers: [], // 이 모듈에서 사용하는 controller들
imports: [], // 이 모듈에서 사용하는 module들
exports: [] // 이 모듈을 사용하는 다른 모듈에서 사용해야 하는 provider 혹은 module들
})
export class AppModule {}
Cats 모듈을 만들어서 사용해보자. nest g no cats 하면 된다.
@Module({
providers: [CatsService],
controllers: [CatsController],
})
export class CatsModule {}
이 경우 app.module.ts는 아래와 같이 변경된다.
@Module({
imports: [CatsModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
유지보수하기 매우 쉬워졌다!
@Module({
imports: [CommonModule],
exports: [CommonModule],
})
export class CoreModule {}
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {
constructor(private catsService: CatsService) {}
}
@Global() 어노테이션을 쓴 경우 전역 모듈이 되어 어느 곳에서나 사용할 수 있다고 한다.그래서 의존성 주입이 뭔데 씹덕아