카카오 FE, 의존관계 불안정성 지표로 리팩토링 포인트 발굴
핵심 내용
Angular 모듈의 FanIn/FanOut 기반 불안정성 수치(I)로 설계 의도 이탈 코드 식별
자세히 보기
카카오 FE플랫폼팀이 Angular 기반 '오픈빌더' 프로젝트에서 의존관계 그래프와 **불안정성 지표(Instability, I)**를 활용해 구조적 리팩토링 포인트를 찾는 방법을 소개했다. 여러 개발자의 손길을 거치며 설계 의도와 다른 코드가 생성될 수 있는 문제를 해결하기 위해, 모듈 간 의존 방향이 올바른지 수치화하여 검증하는 방식을 적용했다.
불안정성 지표(I)를 통한 구조 분석
로버트 C. 마틴의 '클린 아키텍처'에 기반한 불안정성 지표 I는 특정 모듈의 FanIn(들어오는 의존성)과 FanOut(나가는 의존성)을 측정해 0에서 1 사이의 값으로 산출한다. I 값이 0에 가까울수록 많은 모듈이 사용하는 '안정적'인 상태이며, 1에 가까울수록 다른 모듈을 많이 사용하는 '불안정'한 상태다. 이상적인 설계는 불안정한 모듈이 안정적인 모듈을 사용하는 방향으로 의존성이 형성되는 것이다.
실제 프로젝트 적용 및 문제 발견
오픈빌더의 의존관계 그래프를 분석한 결과, 공통 라이브러리인 SharedModule은 낮은 I 값을, 엔트리 포인트인 AppModule은 I 값 1을 기록하며 설계 의도와 일치했다. 그러나 일부 모듈에서는 안정적인 SharedModule이 불안정한 모듈을 재수출(re-export)하는 등 역방향 의존성이 발견되었다.
발견된 주요 문제 모듈은 다음과 같다:
- StandaloneTestModule: 더 이상 사용되지 않는 테스트 전용 모듈로, FanIn이 0인 고립된 상태
- TutorialGuideModule: SharedModule이 불필요하게 재수출하여 역방향 의존성을 유발
- BotTestDialogModule: TutorialGuideModule과 동일하게 SharedModule과의 관계를 끊거나 역전시켜야 하는 대상
확장 가능성
이러한 분석 방법은 단순 리팩토링을 넘어 모듈 변경 시 전체 시스템에 미치는 영향을 수치화하거나, 불안정성 수치를 기준으로 테스트 커버리지 우선순위를 설정하는 데 활용될 수 있다. 또한 FanOut과 FanIn의 절댓값에 가중치를 두어 더 정밀한 불안정성 지표를 계산하는 방안도 제시되었다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.