전진해서 `git rm -f` 하라 🚀
Source: Dev.to
The Problem
GenAI 코딩 도구는 코드를 삭제하는 것을 꺼립니다. 죽은 코드가 컨텍스트에 남아 모델이 불필요하거나 잘못된 제안을 하게 됩니다. 이 “잡동사니”를 제거하면 효율성이 회복됩니다.
A Recent Experience (May 2026)
- Identify dead code – 나는 대형 모델에게 불필요한 코드, 즉 안전하게 제거할 수 있는 정확한 라인과 파일을 찾아달라고 요청했습니다.
- Apply deletions with Aider – 모델의 제안을 Aider Chat에 붙여넣었고, Aider는 저수준 편집 명령을 받아 해당 파일들을 삭제했습니다.
- Iterate – 모델에게
git diff를 실행하고 추가로 제거할 수 있는 코드를 알려달라고 요청했습니다.
이 세션 동안 모델 Opus 4.7이 자동으로 삭제를 수행했으며, 이는 내가 이전에 보지 못한 행동이었습니다.
Why Models Usually Don’t Delete
Training reward shape
사후 학습 보상은 “도움이 되는” 출력을 선호합니다. 삭제는 사용자가 명시적으로 목표로 제시하지 않으면 도움이 되지 않는 것으로 간주됩니다. 모호한 프롬프트는 모델이 코드를 추가하거나 리팩터링하도록 유도하고, 삭제는 하지 않습니다.
Loss aversion
모델은 필요한 코드를 삭제하면 벌점이 부과되는 것처럼 행동합니다. 실제로 Git은 히스토리를 보존하지만, 이러한 편향 때문에 컨텍스트 오염이 발생하고 죽은 코드가 남아 있습니다. 모델이 “트리거를 당기지” 않기 때문이죠.
“Dual‑use” anxiety
많은 공개 리포지토리에서 학습된 모델은 겉보기에 죽은 코드가 실제로는 리플렉션, 동적 디스패치, 혹은 설정 파일을 통해 사용된 사례를 접했습니다. 따라서 모델은 코드를 삭제하기보다는 (종종 주석과 함께) 남겨두는 쪽으로 회피합니다.
Refactor‑instead‑delete reflex
형편없는 코드를 마주하면 모델은 이를 개선하려는 본능이 작동합니다. 삭제는 리팩터링보다 강한 행동이므로, 삭제가 적절해도 모델은 종종 리팩터링을 선택합니다.
Context pollution from earlier turns
코드가 한 번이라도 컨텍스트에 등장하면 모델은 이를 유지하려는 약간의 편향을 갖게 되고, 장시간 세션 동안 문제가 강화됩니다.
“I’ll just clean up while I’m here” trap
모델은 명시적인 작업에 관계없는 개선 사항을 덧붙여 원래 목표에서 벗어나게 됩니다 (예: 데이터 관련 질문에 답하면서 CSS 스타일을 제거하려는 경우).
Mitigating the Issue
- Short sessions – 모델이 한 번에 보는 컨텍스트 양을 제한합니다.
- Explicit deletion goals – 목표가 죽은 코드를 제거하는 것임을 명확히 밝힙니다.
- Use
git diffas ground truth – 삭제를 버전 관리 diff와 비교해 검증합니다.
Practical Solution
나는 “죽은 코드를 삭제하는 방법” 워크플로를 자동화하는 스킬을 만들었습니다. 여기서 시도해 볼 수 있습니다:
simbo1905/deleting-dead-code/SKILL.md
Disclaimer: Results may vary. This is not investment advice.