Nest.js의 Module에 대해 이해하기

어쩌다·2022년 8월 26일
0

Nest.js의 Module에 대해 이해하기


Springboot를 하다가 node.js => nest.js로 넘어오면서 모듈이란 개념에 대해 알고 싶었다.

++ 출처

모듈(Module)이란 무엇인가?

한 가지 일만 수행하는 컴포넌트가 아닌 여러 컴포넌트를 조합하여 작성한 상위의 단위 개념

  1. 일반적으로는 class나 함수와 같이 하나의 역할만 가지고 있는 컴포넌트 보단 더 큰 개념이다.
  2. 음식 배달 서비스에 대해 예를 들어보자.
  3. 유저의 정보를 관리하고 로그인을 처리하는 UserModule, 주문을 관리하는 OrderModule 등 여러한 모듈이 모여 음식 배달 서비스라는 프로그램이 만들어진다.

Nest.js의 Application이 실행되려면 필수

  1. 최상위에 있는 AppModule이 존재하고, 해당 모듈은 프로젝트의 다양한 모듈들로 구성되는 것이다.

  2. 왜 모듈로 나누는가?

    1. nest.js는 AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)을 채택한 프레임 워크이다.
    2. 따라서 예시를 둔 음식 배달에서도 다양한 역할과 책임이 있듯, 모듈 또한 책임에 따라 나누어 응집도를 높이기 위한 것이다.
    3. AOP에 대한 정답은 없다. 하지만 nest.js로 개발을 하면서 이를 기억하면 유지보수가 쉽고 깔끔한 프로젝트를 만들 수 있을 것이다.

Module interface

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>;
}
  1. 모듈은 @Module() 데코레이터를 사용한다.
  2. import: 해당 모듈에서 사용하기 위해 다른 모듈을 가져온다. 이에 해당하는 다른 모듈은 provider를 '가지고 있는' 모듈들이다.
  3. controllers/providers: 모듈에서 컨트롤러와 프로바이더를 사용할 수 있도록 nest.js에서 객체 생성과 DI(Dependency Injection)와 같은 주입을 해준다.
  4. export: 다른 모듈에서 import를 할 수 있도록 public하게 export를 선언하는 것이다.
profile
혼자 공부하는 공간

0개의 댓글