NestJS Tutorial (4) - Module

Hoony·2023년 6월 26일
0

NestJS

목록 보기
4/8


Module

모듈은 @Module() 데코레이터로 주석이 달린 클래스입니다.

각 애플리케이션에는 최소한 하나의 모듈인 루트 모듈이 있습니다 . 

루트 모듈은 Nest가 애플리케이션 그래프를 구축하는 시작점입니다.

대부분의 애플리케이션에서 결과 아키텍처는 각각 밀접하게 관련된 기능 집합을 캡슐화하는 여러 모듈을 사용합니다 .

@Module()데코레이터는 다음 속성을 사용합니다.



모듈 생성

$ nest g module [module-name]

해당 cli로 모듈을 생성하면 다음과 같은 모듈 클래스가 만들어지고 AppModule에 자동으로 등록됩니다.

cats.module.ts 파일

import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class CatsModule {}

app.module.ts 파일

@Module({
  imports: [CatsModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}


공유 모듈(Shared Module)

모든 모듈은 기본적으로 공유 모듈 입니다. 따라서 다른 모든 모듈에서 해당 모듈을 재사용할 수 있습니다.

export 키워드를 통해 cats.module.tsCatsService를 다른 모듈에서 인스턴스를 공유하여 사용할 수 있습니다.

  • 이때 NestJS는 싱글톤(singleton) 디자인 패턴 원칙을 사용하므로 인스턴스는 하나만 생성됩니다.
@Module({
  controllers: [CatsController],
  providers: [CatsService],
  **exports: [CatsService]**, //해당 부분 추가
})
export class CatsModule {}

이후 다른 모듈에서 import 키워드를 통해 CatsService provider를 가져와 사용할 수 있습니다.

이때 중요한 것은 import 대상이 Service가 아닌 Module 입니다.

NestJS에선 모듈 단위로 import가 가능합니다.

@Module({
  import: [CatsModule],
})
export class OtherModule {}


@Global

전역으로 모듈을 내보내고 사용할 수 있습니다.

NestJS에선 모든 것을 글로벌화 하는 것을 지양하고 있습니다.

다음과 같이 @Global 키워드를 통해 전역으로 모듈을 내보낼 수 있습니다.

@Global
@Module({
  controllers: [CatsController],
  providers: [CatsService],
  **exports: [CatsService]**, //해당 부분 추가
})
export class CatsModule {}

이후에 다른 모듈에선 import 없이 바로 해당 모듈을 사용할 수 있게 됩니다.

profile
Just Do it!

0개의 댓글

관련 채용 정보