테스트-NestJS강의-7-overview-module
- 모듈은 @Module() 데코레이터로 장식된 클래스로, NestJS 애플리케이션 구조를 구성하는 메타데이터를 제공하며, 각 애플리케이션은 최소 하나의 루트 모듈을 가집니다. 🏗️
- 모듈은 밀접하게 관련된 기능 집합을 캡슐화하여 컴포넌트를 효과적으로 구성하는 강력한 방법입니다. 📦
- @Module() 데코레이터는 imports, controllers, providers, exports 속성을 포함하는 객체를 인자로 받습니다. ⚙️
- 모듈은 프로바이더를 캡슐화하며, exports 배열에 명시된 프로바이더는 해당 모듈의 공개 인터페이스(API)로 간주되어 다른 모듈에서 접근 가능합니다. 🔒
- 피처 모듈은 특정 도메인을 응집도 높고 재사용 가능한 단위로 묶는 하위 모듈(예: CatsModule, UsersModule)이며, 루트 모듈 아래에 존재합니다. 🧩
- NestJS의 모듈은 기본적으로 싱글톤이므로, exports와 imports를 통해 동일한 프로바이더 인스턴스를 여러 모듈 간에 쉽게 공유하여 메모리 사용량을 줄이고 예측 가능한 동작을 보장합니다. 🔄
- 모듈은 자신이 임포트한 다른 모듈의 프로바이더까지 exports를 통해 재내보내기(re-exporting)하여 중앙 허브 역할을 할 수 있습니다. 📡
- @Global() 데코레이터를 사용하면 모듈을 전역에서 사용할 수 있게 하여, 명시적인 imports 없이도 해당 모듈의 프로바이더를 애플리케이션 전체에서 자동 주입할 수 있습니다. 🌍
- 동적 모듈은 forRoot()와 같은 팩토리 메서드를 통해 옵션을 전달받아 모듈을 동적으로 구성하고 등록할 수 있게 하여, 데이터베이스 연결과 같은 커스터마이징 가능한 설정을 가능하게 합니다. 🚀
- 서로가 서로를 필요로 하는 순환 의존성은 빌드 에러나 런타임 문제를 야기하므로, forwardRef()는 임시 방편일 뿐 근본적으로 의존성을 분리하거나 공통 로직을 추출하여 단방향 의존성을 유지하는 것이 중요합니다. ⚠️