nestJS오류 (Nest can't resolve dependencies of the..)

전은평·2023년 4월 26일
1

nestJS를 이용해서 서버를 구축하던 중 데이터 베이스 쪽을 만지다 아래와 같은 오류가 발생했다. 평소 같았으면 의존성 주입을 제대로 안해줬구나! 하고 해결했을텐데, 웬걸... 이미 의존성 주입 똭!똭! 되어있는 것이었다.

이것 때문에 몇시간을 썼는지 모르겠다. 그래도 물어 물어서 해결하긴 했지만 결론은 서비스 간의 의존성 주입이 쌍방향으로 이루어져 있어서, 평소처럼 주입을 하는 것으로는 작동이 안되는 것이었다..

nestjs 독스에는 circular dependency(순환 의존성/종속성)이라고 표현하고, 설명이 되어 있다. 웬만하면 이런 상황을 피하는 것이 좋다고 독스에도 적혀있었다.. 나도 물론 일단 제출해야 하는 데드라인이 있기에 우선은 피해서 처리했지만, 내 궁금증은.. 피하지 못했다 🙅🏻‍♂️. 그래도 덕분에 하나 더 알게 되어서 당시엔 고통스러웠지만 지금은 매우 뿌듯하다!
독스에 찾아보니 피하지 못한다면 해결할 수 있는 방법도 제시해주고 있었다.

<CatService.ts>

@Injectable()
export class CatsService {
  constructor(
    @Inject(forwardRef(() => CommonService)) // 이 부분을 추가적으로 처리해주면 된다!!
    private commonService: CommonService,
  ) {}
}

<CommonService.ts>

@Injectable()
export class CommonService {
  constructor(
    @Inject(forwardRef(() => CatsService)) // 얘도 마찬가지로 처리
    private catsService: CatsService,
  ) {}
}

<CommonModule.ts>

@Module({
  imports: [forwardRef(() => CatsModule)], // import도 추가적으로 해주기!!
})
export class CommonModule {}

nestjs 독스에 위와 같은 예시를 통해 해결방법을 제시하고 있는데, 말 그대로 circular dependency가 발생하는 service에서 forwardRed(()=>해당 서비스) 처리를 따로 해줘야 된다. module에서도 추가적으로 처리해줘야하는데 이는 한쪽에만 해줘도 실행되는 것을 보니 한쪽에만 처리해주면 되는 것 같다.

더 궁금하신 분들은 밑의 참고자료를 읽어보시길 바랍니다^^

참고자료
: https://docs.nestjs.com/fundamentals/circular-dependency

profile
`아는 만큼 보인다` 라는 명언을 좋아합니다. 많이 배워서 많은 걸 볼 수 있는 개발자가 되고 싶습니다.

1개의 댓글

comment-user-thumbnail
2023년 5월 23일

굿

답글 달기