Spring Framework 를 사용하다 NestJS 를 사용하며 겪은 다른점
NestJS는 의존성을 두 번 선언한다.
- Class 레벨에서 의존성을 선언한다.
- 모듈 레벨에서 Provider 배열에 의존성을 선언한다.
이유는?
- 모듈 작성 자체가 문서 역할을 한다.
- 구조를 한눈에 파악할 수 있다.
- 순환 참조 문제 발견이 쉬워진다
// a.module.ts
@Module({
imports: [BModule],
exports: [AService]
})
export class AModule {}
// b.module.ts
@Module({
imports: [AModule],
exports: [BService]
})
export class BModule {}
- 외에 기타 등등 장점이 있지만 가장 와닫는건 위 2가지 이다.
그렇다면 단점은?
- 같은 의존성을 두번 작성 하므로 코드의 중복이 발생
- 두 곳의 선언이 일치하지 않을 경우 오류가 발생할 수 있음
- 모듈의 선언된 모든 provider 의 인스턴스를 생성 하므로
사용하지 않는 인스턴스가 불필요하게 생성될 수 있음