오늘 뭐했냐/개발에 대한 주저리

23.10.02 NestJS에서 모듈(Module)

스스로에게 2023. 10. 4. 19:48

모듈

애플리케이션의 구조와 조직을 위한 메타데이터를 갖춘 클래스이다.

 

그래서 무슨 역할인데?

코드 조직화: 관련된 기능, 컴포넌트, 서비스 등을 모듈 내부로 그룹화함으로써 코드의 구조를 깔끔하게 유지한다.
의존성 주입: 의존성 주입에 필요한 서비스나 리포지터리와 같은 제공자의 집합을 정의한다.
모듈 재사용: 응용 프로그램 내의 다른 모듈 또는 외부 라이브러리에서 제공된 모듈을 임포트하고 재사용할 수 있다.
캡슐화: 모듈은 내부 구현을 숨기고 필요한 것만을 익스포트함으로써 캡슐화를 제공한다.

 

주요 구성 요소

제공자 (Providers): 서비스, 리포지터리, 팩토리 등 다양한 클래스들이 여기에 포함되며, 의존성 주입에 사용 된다.
컨트롤러 (Controllers): 요청을 처리하고 응답을 반환하는 클래스이다.
임포트 (Imports): 다른 모듈들을 임포트하여 현재 모듈에서 그 기능이나 제공자를 사용할 수 있도록 한다.
익스포트 (Exports): 모듈에서 제공하고자 하는 제공자들을 익스포트하여 다른 모듈들이 그것들을 임포트 할 수 있게 한다.

 

이것에 대해서 의문이 들었던 부분은

@Module({
  imports: [
    TypeOrmModule.forRoot(typeORMConfig),
    BoardsModule,
    AuthModule
  ],

})
export class AppModule { }

export class AppModule { } 에서 왜 클래스가 비어있을까 하는 부분이었다.

앱모듈에서 보드모듈인지 어스모듈인지 어떻게 찾아가나?

 

  1.  기존에 Experss에 익숙해져서 이어지는 줄 알았는데 아니었다. 모듈은 위에 요소를 통해서 필요한 것들을 정의하고 컨트롤러에서 요청을 처리한다. 즉, 모듈은 설계도이고 구현은 컨트롤러에서 하는 거라고 이해했다. 
  2.  여기서 앱모듈의 역할은 보드와 어스를 묶어서 하나로 실행시키는 역할이며 앱모듈이 없다면 각각 다른 포트에서 다른 앱으로 구분될 것이다.
  3.  AppModule란 이름은 다른 모듈에서 사용될 때 필요한 명칭으로 AppTestModule로 변경해도 되며, 빈 클래스 객체가 아니라 안에 생성자나 다른 메서드를  추가할 수도 있다.