일단 먼저 우리만의 모듈을 만들어보자. 이름은 cats라고 하겠다.
$ nest g module cats
루트 폴더에서 이 명령어를 실행해주면
이렇게 자동으로 폴더가 생성된다.
전체적인 파일 구조는 이런식이 될 것이다.
Feature Modules(기능 모듈)
먼저 cats.module.ts를 다음과 같이 수정해보자.
cat.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 {}
이렇게 controllers와 provider를 가지는 모듈을 한 개 생성하였다. ( controller와 provider는 아직 생성 안 함.)
그 다음 app.module.ts(루트 모듈) 파일을 수정해주어야 한다.
app.module.ts
import { Module } from '@nestjs/common';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [CatsModule],
})
export class AppModule {}
여기까지가 기능 모듈의 기본적인 예이다. 모듈을 생성하고, 루트 모듈에 연결해주었다.
Shared Modules( 공유 모듈)
Nest에서의 모듈은 기본적으로 싱글톤이다. 여러 모듈간에 쉽게 프로바이더의 인스턴스를 공유할 수 있다.
공유를 하기 위해서 만들었던 모듈에 export 옵션을 만들어주어야한다. 여기서 모듈에서 사용하는 용어를 살펴보면,
Providers | Nest 인젝터에 의해 인스턴스화 되고 적어도 이 모듈에서 공유될 수 있는 프로바이더 |
controllers | 인스턴스화 되어야 하는 이 모듈에 정의된 컨트롤러 세트 |
imports | 모듈에 필요한 프로바이더를 내보내는 가져온 모듈들 |
exports | 다른모듈에서 import하여 사용되어야 하는 프로바이더의 하위 집합 |
이렇게 되어있다. export를 써보자.
cat.module.ts
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
exports: [CatsService]
})
export class CatsModule {}
이렇게 하면 CatsModule을 가져오는 모든 모듈이 CatService에 액세스 할 수 있다.
( 가져올 때는 import를 써준다. )
Global modules
모든 곳에서 동일한 모듈 세트를 가져와야할 때 @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 {}
이런식으로 exports 옵션에 넣어주면 CatService를 필요로 하는 모듈에서 가져와 쓸 수 있다.
Global 데코레이터는 일반적으로 루트 또는 코어 모듈에서 한번만 등록을 해야한다. 서비스를 가져오려는 모듈에서
가져오기 배열에서 CatModule을 가져올 필요가 없다.
'Back-End > Nest.js' 카테고리의 다른 글
Nest.js | REST API | More Routes (0) | 2021.09.28 |
---|---|
Nest.js | REST API | Movies Controller (0) | 2021.09.24 |
Nest.js | 개요 | Service (0) | 2021.09.24 |
Nest.js | 개요 | Controller(2) (0) | 2021.09.24 |
Nest.js | 개요 | Controllers(1) (0) | 2021.09.24 |