728x90
반응형

일단 먼저 우리만의 모듈을 만들어보자. 이름은 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을 가져올 필요가 없다.

728x90
반응형

'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

+ Recent posts