Module을 만들어보자

HanSH·2024년 1월 15일

NestJS

목록 보기
5/29

하나의 main 모듈에 모든 provider, controller을 넣으면 유지보수하기 매우 힘들어진다.
따라서 모듈을 기능마다 만들 필요가 있다.

Nest는 아래의 그림과 같이 모듈을 구성할 수 있다!
nestjs의 모듈 구조
모듈 여러 개를 만들어 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() 어노테이션을 쓴 경우 전역 모듈이 되어 어느 곳에서나 사용할 수 있다고 한다.

그래서 의존성 주입이 뭔데 씹덕아

profile
저는 말하는 싹 난 감자입니다

0개의 댓글