파일 1,749개 제거Polestar 10
정적 분석과 회귀 검증을 통한 Dead Code 제거
실제로 불러오는 파일을 추적하는 분석 도구를 설계하고 knip 교차 검증과 회귀 테스트를 거쳐 미사용 파일 1,749개 제거
knipPlaywright
배경·문제
장기간 개발 과정에서 더 이상 사용되지 않는 코드가 코드베이스에 누적되어 있었습니다. 단순한 코드 정리를 넘어 유지보수 과정에서 실제 리스크가 되고 있었습니다.
- AI가 미사용 코드를 참조하거나 수정 대상으로 삼는 문제
- 미사용 코드가 UI 소스 기반 매뉴얼에 실제 기능으로 잘못 반영되는 문제
제약
천 개가 넘는 파일을 삭제해야 했기 때문에 기존 기능에 영향이 없는지 충분히 검증해야 했습니다. 정적 분석 도구 하나의 결과만으로 삭제 여부를 판단할 수는 없었습니다.
접근 — 3중 검증 절차
- 1
참조 추적
앱 진입점부터 실제로 불러오는 파일을 따라가 어디에서도 참조되지 않는 파일 추출 · alias 60여 개와 import.meta.glob, SCSS @import 체인까지 해석
- 2
교차 검증
knip 결과와 대조해 불일치 후보는 전수 수동 판정
- 3
문자열 · 레지스트리 스캔
동적 import 레지스트리 · e2e fixture 참조까지 재검색
- 4
회귀 검증 후 반영
프로덕션 빌드 + Playwright 25개 주요 라우트 테스트 후 2회에 나누어 반영
결과
- 미사용 파일 1,749개 제거 (코드 · 스타일 603개 + 구버전 아이콘 에셋 1,146개, 약 7.3만 줄)
- 분석 도구가 실제 사용 중인 파일 330개를 삭제 대상으로 분류한 것을 교차 검증 과정에서 발견하고, 미사용이 확실한 파일만 삭제 후보로 남기도록 도구를 수정
- 여러 도메인이 공유하는 공통 레이어 후보 245개는 영향 범위를 고려해 삭제하지 않고 백로그로 유지
💡 미사용 코드가 실제 버그로 이어진 사례는 간헐적으로 발생하던 그리드 깜빡임 원인 추적 케이스에서 확인할 수 있습니다.
사용 기술
- knip
- 직접 설계한 참조 추적 도구의 결과를 검증할 대조군으로 사용했습니다. 두 도구의 판정이 불일치하는 후보만 따로 모아 전수 수동 확인했고, 이 과정에서 제 도구가 잘못 분류한 파일 330개를 발견했습니다.
- Playwright
- 대량 삭제가 실제 화면 동작에 영향이 없음을 25개 주요 라우트에 대한 회귀 테스트로 검증하기 위해 사용했습니다.