Springboot를 하다가 node.js => nest.js로 넘어오면서 모듈이란 개념에 대해 알고 싶었다.
++ 출처
한 가지 일만 수행하는 컴포넌트가 아닌 여러 컴포넌트를 조합하여 작성한 상위의 단위 개념
음식 배달 서비스
에 대해 예를 들어보자.음식 배달 서비스
라는 프로그램이 만들어진다.최상위에 있는 AppModule이 존재하고, 해당 모듈은 프로젝트의 다양한 모듈들로 구성되는 것이다.
음식 배달
에서도 다양한 역할과 책임이 있듯, 모듈 또한 책임에 따라 나누어 응집도를 높이기 위한 것이다.export declare function Module(metadata: ModuleMetadata): ClassDecorator;
export interface ModuleMetadata {
imports?: Array<Type<any> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
controllers?: Type<any>[];
providers?: Provider[];
exports?: Array<DynamicModule | Promise<DynamicModule> | string | symbol | Provider | ForwardReference | Abstract<any> | Function>;
}
@Module()
데코레이터를 사용한다.import
: 해당 모듈에서 사용하기 위해 다른 모듈을 가져온다. 이에 해당하는 다른 모듈은 provider를 '가지고 있는' 모듈들이다.controllers/providers
: 모듈에서 컨트롤러와 프로바이더를 사용할 수 있도록 nest.js에서 객체 생성과 DI(Dependency Injection)와 같은 주입을 해준다.export
: 다른 모듈에서 import를 할 수 있도록 public하게 export를 선언하는 것이다.