대규모 레거시 .NET 코드베이스를 이해하기 위해 도구를 만들었다

발행: (2026년 4월 23일 AM 03:04 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

배경

저는 .NET 개발자이며, 최근에 제가 직접 만든 작은 도구들을 천천히 오픈소스로 공개하고 있습니다. 그 중 하나는 약 15년 된 대규모 레거시 .NET 4.6 애플리케이션(~1 M LOC)을 이해하는 데 도움을 주기 위해 만들었습니다.

문제점

코드만 읽는 것 이상으로 아키텍처를 파악할 방법이 필요했습니다:

  • 무엇이 무엇에 의존하는가
  • 잘못된 방향으로 흐르는 부분은 어디인가
  • 숨겨진 순환 구조가 있는가

코드를 탐색하는 것은 가능하지만, 전체가 어떻게 연결되어 있는지 실질적인 그림을 얻기는 쉽지 않았습니다. 기존의 강력한 도구들은 비용이 많이 들고, 무료 도구들은 제 요구에 한계가 있었습니다.

초기 시도

직접 해결책을 만들 생각으로 실험을 해보았지만, 곧 포기했습니다. 다시 아이디어를 떠올렸을 때 몇 가지 실용적인 문제에 부딪혔습니다:

  • SDK 차이
  • MSBuild 해석 문제
  • 프로젝트가 제대로 로드되지 않음
  • 누락된 참조

결국 저는 코드를 디버깅하기보다 솔루션 로딩 과정을 디버깅하고 있음을 깨달았습니다. 로딩 단계가 안정화되니 나머지는 재미있는 작업이었습니다.

솔루션 개요

도구는 다음 단계들을 수행합니다:

  1. 솔루션 로드
  2. 의존성 매핑
  3. 브라우저에서 인터랙티브 그래프로 표시
  4. 순환 의존성 강조

추가 분석

깊이 파고들면서 몇 가지 빠른 체크를 추가했습니다:

  • 순환 복잡도(Cyclomatic complexity)
  • 사용되지 않는 공개 멤버(Dead code) 탐지
  • 기본 결합도 지표

간단한 품질 게이트를 두어 임계값을 초과하면 CI에서 도구가 실패하도록 할 수 있습니다.

구현 세부 사항

  • 대상 프레임워크: .NET 8
  • 핵심 라이브러리: Roslyn (MSBuild workspace), MSBuildLocator
  • 웹 서버: ASP.NET Core (임베디드)
  • 시각화: D3.js

.NET 개발자인 저는 이를 .NET 글로벌 툴로 패키징했습니다.

dotnet tool install -g KiwiDepend
kiwi-dep analyze --solution MyApp.sln

사용법

kiwi-dep analyze 명령을 솔루션에 실행하면 인터랙티브 HTML 페이지가 생성되어 의존성 그래프를 시각화하고, 순환 구조를 강조하며, 위에서 언급한 추가 메트릭을 보고합니다.

결론

이 정도 규모의 코드베이스를 명확한 개요 없이 탐색하는 것은 고통스럽습니다. 이 도구는 가볍고 확장 가능한 방법으로 전체 개요를 제공하고, 아키텍처 문제를 조기에 발견하도록 도와줍니다.

유용하다고 생각되거나 직접 사용해 보고 싶다면, 저장소는 여기에서 확인할 수 있습니다:

https://github.com/KiwiDevelopment/KiwiDepend

레포에 ⭐ 하나만 눌러 주셔도 큰 힘이 됩니다! 🙂

0 조회
Back to Blog

관련 글

더 보기 »

Tokenmaxxing 논쟁은 요점을 놓치고 있다

Jensen Huang는 모든 엔지니어가 매일 100,000 토큰을 소비해야 한다고 말합니다. Shopify의 CTO는 실제 지표는 토큰을 어떻게 활용하느냐라고 말합니다. 두 사람 모두 옳습니다. 두 사람 모두 …

Tech Debt 인식의 중요성

Tech debt는 단순한 버즈워드가 아니라 프로젝트의 조용한 파괴자다. 부채를 정기적으로 평가하고 다른 기능과 마찬가지로 우선순위를 정해 코드베이스를 건강하게 유지하라.