문제 및 히스토리
NestJS 를 통해 웹소켓 프로젝트 구현중에 순환 종속성 문제가 발생했다.
개발할 때 가능한, 순환 종속을 피해서 개발해야하지만,
가끔은 순환 종속을 피하기 어려운 상황들이 많다.
이곳저곳에 다 불러다가 사용하면, 한개의 서버에서 소켓 서버가 여러개로 나눠질 수 있고 예기치 못한 오류가 발생할 수 있다.
또한 한 GateWay에 모든 기능을 구현하는건 굉장히 비효율적이기에 기능별로 쪼개서 빠르게 개발하려면 가끔은 순환 종속을 맞닥뜨린다.
우선적으로 순환 종속을 임시로 허용하고, 개발이 완료 된 후 기술부채들 정리하며 순환종속을 없애야한다.
순환 종속성 오류 해결
@nestjs/common 에서 패키지로 제공해주는 forwardRef() 기능을 사용하면 해결할 수 있다.
xxx.module.ts 에서 모듈을 imports 할 때 forwardRef() 를 사용해서 모듈의 중첩을 허용해줍니다.
import { Module, forwardRef } from '@nestjs/common';
// moduleA
@Module({
imports: [ModuleB],
///...
})
// moduleB
@Module({
imports: [ModuleA],
///...
})```