모듈
애플리케이션의 구조와 조직을 위한 메타데이터를 갖춘 클래스이다.
그래서 무슨 역할인데?
코드 조직화: 관련된 기능, 컴포넌트, 서비스 등을 모듈 내부로 그룹화함으로써 코드의 구조를 깔끔하게 유지한다.
의존성 주입: 의존성 주입에 필요한 서비스나 리포지터리와 같은 제공자의 집합을 정의한다.
모듈 재사용: 응용 프로그램 내의 다른 모듈 또는 외부 라이브러리에서 제공된 모듈을 임포트하고 재사용할 수 있다.
캡슐화: 모듈은 내부 구현을 숨기고 필요한 것만을 익스포트함으로써 캡슐화를 제공한다.
주요 구성 요소
제공자 (Providers): 서비스, 리포지터리, 팩토리 등 다양한 클래스들이 여기에 포함되며, 의존성 주입에 사용 된다.
컨트롤러 (Controllers): 요청을 처리하고 응답을 반환하는 클래스이다.
임포트 (Imports): 다른 모듈들을 임포트하여 현재 모듈에서 그 기능이나 제공자를 사용할 수 있도록 한다.
익스포트 (Exports): 모듈에서 제공하고자 하는 제공자들을 익스포트하여 다른 모듈들이 그것들을 임포트 할 수 있게 한다.
이것에 대해서 의문이 들었던 부분은
@Module({
imports: [
TypeOrmModule.forRoot(typeORMConfig),
BoardsModule,
AuthModule
],
})
export class AppModule { }
export class AppModule { } 에서 왜 클래스가 비어있을까 하는 부분이었다.
앱모듈에서 보드모듈인지 어스모듈인지 어떻게 찾아가나?
- 기존에 Experss에 익숙해져서 이어지는 줄 알았는데 아니었다. 모듈은 위에 요소를 통해서 필요한 것들을 정의하고 컨트롤러에서 요청을 처리한다. 즉, 모듈은 설계도이고 구현은 컨트롤러에서 하는 거라고 이해했다.
- 여기서 앱모듈의 역할은 보드와 어스를 묶어서 하나로 실행시키는 역할이며 앱모듈이 없다면 각각 다른 포트에서 다른 앱으로 구분될 것이다.
- AppModule란 이름은 다른 모듈에서 사용될 때 필요한 명칭으로 AppTestModule로 변경해도 되며, 빈 클래스 객체가 아니라 안에 생성자나 다른 메서드를 추가할 수도 있다.
'오늘 뭐했냐 > 개발에 대한 주저리' 카테고리의 다른 글
23.10.04 프레임워크 라이브러리 (0) | 2023.10.10 |
---|---|
23.10.03 도메인 주도 설계 (Domain-driven design, DDD) (0) | 2023.10.05 |
23.10.01 데코레이터( @, Decorator) (0) | 2023.10.03 |
23.09.30 NestJS에서 의존성 주입 (0) | 2023.10.03 |
23.09.29 제어 역전 (Inversion of Control, IoC) (0) | 2023.10.02 |