모듈은 클래스나 함수처럼 한가지 일만 수행하는 컴포넌트는 아닙니다. ✨여러 컴포넌트를 합쳐서 더 큰 작업을 수행하는 단위를 일컫는 말입니다. @Module() 데코레이터를 사용하며 이에 대한 인자로 메타데이터를 받습니다. 아래의 그림을 예시로 모듈을 설명하도록 하겠습니다.
Application Module은 루트 모듈이며 기본적으로 Nestjs 프레임워크에 자동으로 생성되는 모듈입니다. 루트 모듈은 다른 모듈들을 사용하기 위한 일종의 시작점입니다. 그리고 각각의 모듈들은 맡은 고유의 기능들이 있습니다. 물론 이 기능들은 개발자가 정의하며 유지/보수하는 과정에서 더 세밀하게 재정의되거나 변경될 수 있습니다. User Module은 사용자와 관련된 기능들( 회원가입, 정보 수정 등)을 내포하고 있으며 Order Module은 주문과 관련 기능 그리고 Chat Module은 채팅과 관련된 기능들을 내포하고 있습니다.
기존에 배웠던 내용들에 있던 모듈을 토대로 보면, CatsController과 CatsService는 둘 다 고양이에 대해 다루기에 같은 도메인에 속합니다. 이런식으로 밀접하게 관련되어있으면 보통 같은 모듈로 묶어서 사용합니다. 이는 규모가 커지면 유지/보수에 훨씬 편리하며 SOLID 원칙으로 개발하는데 유용하기 때문입니다.
cats/cats.module
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
import { Module } from '@nestjs/common';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [CatsModule],
})
export class AppModule {}
@Module() 데코레이터는 providers, controllers, imports, exports 등을 가지는 객체가 필요합니다. 그리고 모듈은 해당 프로바이더를 캡슐화하며 모듈에서 export하지 않은 프로바이더는 주입할 수 없습니다.
'Nestjs' 카테고리의 다른 글
[Nestjs] 6. 미들웨어 (middleware) (0) | 2022.05.13 |
---|---|
[Nestjs] 5-1. 공유 모듈 (shared modules) (0) | 2022.04.27 |
[Nestjs] 4-3. 속성 기반 주입(property based injection) (0) | 2022.04.23 |
[Nestjs] 4-2. DI(Dependency Injection)?? 의존성 주입?? (0) | 2022.04.21 |
[Nestjs] 4-1. 프로바이더와 서비스 (0) | 2022.04.10 |