전체 코드베이스에서 함수를 리팩토링하되 깨지 않는 방법
언제 쓸까: 함수 이름을 바꾸거나, 서명을 변경하거나, 헬퍼를 인라인화해야 하며, 저장소의 30개 이상 파일에서 사용되는 경우입니다.
사전 조건
- git 워킹 트리 정리됨 —
git status에 스테이징된 항목이 없음 —git diff로 검토하고 필요시git restore할 수 있음 - 저장소에 범위가 지정된 파일시스템 루트 —
npx -y @modelcontextprotocol/server-filesystem /abs/path/to/repo로 시작
흐름
-
모든 호출 사이트 찾기코드베이스에서
getUserProfile(의 모든 사용처를 검색합니다. 파일별로 일치 항목을 그룹화하고 파일당 개수를 알려주세요.✓ 복사됨→ 테스트와 소스 구분을 제외한 일치 개수가 있는 파일 목록 -
한 파일에서 편집 드라이런src/api/users.ts에서 편집 모습을 보여주세요 — 전체 파일이 아닌 diff입니다. 아직 작성하지 마세요.✓ 복사됨→ 최소한의 diff 패치, 전체 파일 재작성 아님
-
모든 파일에 적용하고 보고1단계의 모든 파일에 동일한 변환을 적용합니다. write_file(덮어쓰기)이 아닌 edit_file(라인 레벨)을 사용하세요. 패턴이 깔끔하게 일치하지 않은 파일을 알려주세요.✓ 복사됨→ 파일별 성공/스킵 로그
결과: 테스트를 실행할 수 있는 집중된 리뷰 가능한 git diff — 예상치 못한 전체 파일 재작성 없음.
함정
- Claude가
write_file을 사용하고 편집이 복잡할 때 파일의 절반을 무음으로 삭제함 — 제자리 변경에는edit_file을 명시적으로 요구하고, 새로 생성되는 파일에만write_file을 허용하세요 - 일치가 관련 없는 코드를 적중 (예:
getUserProfileAvatar) — 검색을 고정합니다: 뒤에 오는 괄호가 있는getUserProfile(를 사용하거나 단어 경계 정규식을 사용하세요