[nestJS] 순환 종속성 문제

Uhan33·2024년 3월 14일
0

TIL

목록 보기
47/72

과제 진행 중 처음 보는 오류가 발생했는데,
알고 보니 순환 종속성에 대한 문제였다.
A모듈과 B모듈이 있으면, 둘이 서로 의존 주입을 하려 했을 때 발생하는 문제이다.

ex) 

@Module({
  imports: [ModuleBModule],
  providers: [ModuleAService],
  exports: [ModuleAService],
})
export class ModuleAModule {}
@Module({
  imports: [ModuleAModule],
  providers: [ModuleBService],
  exports: [ModuleBService],
})
export class ModuleBModule {}

이러한 경우 해결방법은 여러 가지가 있는데,
첫 번째로 가장 간단한 방법은 forwardRef()를 사용하여 순서를 정해주는 것.
단, 어떤 모듈이 먼저 불러지는지는 알 수 없다.

@Module({
  imports: [forwardRef(() => ModuleBModule)], // 주목!
  providers: [ModuleAService],
  exports: [ModuleAService],
})
export class ModuleAModule {}
@Module({
  imports: [forwardRef(() => ModuleAModule)], // 주목!
  providers: [ModuleBService],
  exports: [ModuleBService],
})
export class ModuleBModule {}

사실 이 방법으로도 완전하게 해결이 되지 않을 수 있다.
가장 베스트는 순환 종속을 피하는 것이다.
본인 또한 위 방법을 사용했으나 동일한 에러가 발생해서
결국 코드를 리팩토링했다..

순환종속을 피하려면 서비스들을 더 작은 단위로 분리하고 의존성을 최소화하여 각 서비스가 단일 책임을 갖도록 설계하고,
두 개의 서비스가 너무 강하게 결합되지 않도록 하는 것이 중요하다.

0개의 댓글