# Refactor Clean 사용하지 않는 코드를 안전하게 식별하고 매 단계마다 테스트 검증을 수행하여 제거합니다. ## 1단계: 사용하지 않는 코드 감지 프로젝트 유형에 따라 분석 도구를 실행합니다: | 도구 | 감지 대상 | 커맨드 | |------|----------|--------| | knip | 미사용 exports, 파일, 의존성 | `npx knip` | | depcheck | 미사용 npm 의존성 | `npx depcheck` | | ts-prune | 미사용 TypeScript exports | `npx ts-prune` | | vulture | 미사용 Python 코드 | `vulture src/` | | deadcode | 미사용 Go 코드 | `deadcode ./...` | | cargo-udeps | 미사용 Rust 의존성 | `cargo +nightly udeps` | 사용 가능한 도구가 없는 경우, Grep을 사용하여 import가 없는 export를 찾습니다: ``` # export를 찾은 후, 다른 곳에서 import되는지 확인 ``` ## 2단계: 결과 분류 안전 등급별로 결과를 분류합니다: | 등급 | 예시 | 조치 | |------|------|------| | **안전** | 미사용 유틸리티, 테스트 헬퍼, 내부 함수 | 확신을 가지고 삭제 | | **주의** | 컴포넌트, API 라우트, 미들웨어 | 동적 import나 외부 소비자가 없는지 확인 | | **위험** | 설정 파일, 엔트리 포인트, 타입 정의 | 건드리기 전에 조사 필요 | ## 3단계: 안전한 삭제 루프 각 안전 항목에 대해: 1. **전체 테스트 스위트 실행** --- 기준선 확립 (모두 통과) 2. **사용하지 않는 코드 삭제** --- Edit 도구로 정밀하게 제거 3. **테스트 스위트 재실행** --- 깨진 것이 없는지 확인 4. **테스트 실패 시** --- 즉시 `git checkout -- `로 되돌리고 해당 항목을 건너뜀 5. **테스트 통과 시** --- 다음 항목으로 이동 ## 4단계: 주의 항목 처리 주의 항목을 삭제하기 전에: - 동적 import 검색: `import()`, `require()`, `__import__` - 문자열 참조 검색: 라우트 이름, 설정 파일의 컴포넌트 이름 - 공개 패키지 API에서 export되는지 확인 - 외부 소비자가 없는지 확인 (게시된 경우 의존 패키지 확인) ## 5단계: 중복 통합 사용하지 않는 코드를 제거한 후 다음을 찾습니다: - 거의 중복된 함수 (80% 이상 유사) --- 하나로 병합 - 중복된 타입 정의 --- 통합 - 가치를 추가하지 않는 래퍼 함수 --- 인라인 처리 - 목적이 없는 re-export --- 간접 참조 제거 ## 6단계: 요약 결과를 보고합니다: ``` Dead Code Cleanup ────────────────────────────── 삭제: 미사용 함수 12개 미사용 파일 3개 미사용 의존성 5개 건너뜀: 항목 2개 (테스트 실패) 절감: 약 450줄 제거 ────────────────────────────── 모든 테스트 통과 ✅ ``` ## 규칙 - **테스트를 먼저 실행하지 않고 절대 삭제하지 않기** - **한 번에 하나씩 삭제** --- 원자적 변경으로 롤백이 쉬움 - **확실하지 않으면 건너뛰기** --- 프로덕션을 깨뜨리는 것보다 사용하지 않는 코드를 유지하는 것이 나음 - **정리하면서 리팩토링하지 않기** --- 관심사 분리 (먼저 정리, 나중에 리팩토링)