당신의 AI 코딩 에이전트가 말을 듣지 않기 시작했습니다. 원인은 컨텍스트 부패(Context Rot)입니다.
요약
AI 코딩 에이전트의 성능이 저하되는 원인인 '컨텍스트 부패(Context Rot)' 현상을 분석합니다. 불필요한 메모리 파일, 중복된 지침, 사용하지 않는 MCP 도구 등이 컨텍스트 윈도우를 점유하여 모델의 주의력을 분산시키는 문제를 다룹니다.
핵심 포인트
- 컨텍스트 창이 커질수록 불필요한 정보가 지시 사항을 방해함
- 사용하지 않는 플러그인이나 파일이 컨텍스트를 오염시키는 '부패' 유발
- 매 턴 로드되는 토큰 양과 MCP 도구 카탈로그를 정기적으로 감사 필요
- 중복된 지침 파일과 죽은 시스템의 잔재를 제거하여 주의력 예산 확보
당신의 AI 코딩 에이전트가 말을 듣지 않기 시작했습니다. 원인은 컨텍스트 부패(Context Rot)입니다.
몇 주 동안 저의 Claude Code 설정은 지시 사항을 따르는 능력이 꾸준히 저하되었습니다. 동일한 모델, 동일한 프롬프트(Prompts)를 사용했음에도 순종성이 서서히 떨어졌습니다. 쉬운 설명은 "모델이 퇴보했다"는 것이지만, 진짜 이야기는 당신의 컨텍스트 윈도우(Context Window) 안에 있으며, 그 내용은 훨씬 더 참혹합니다.
원인을 찾아보았습니다. 제가 발견한 것은 모든 세션을 조용히 오염시키고 있는 4,648개의 죽은 파일들이었습니다.
더 많은 규칙, 더 적은 준수
직관에 반하는 부분부터 시작하겠습니다. 지시 사항을 추가할수록 에이전트는 당신의 지시를 더 못하게 따릅니다.
A 개발자가 [
여기에 함정이 있습니다. 도구 자체에서 강제로 내용을 _제한(trim)_하도록 만드는 장치는 아무것도 없습니다. 작은 컨텍스트 창은 강제적으로 규율을 부여합니다. 반면 거대한 창은 이러한 강제 기능을 제거하고, 당신이 내용을 채워 넣도록 유혹합니다. 그래서 당신은 채워 넣게 됩니다. 모든 CLAUDE.md, 모든 메모리 파일, 모든 MCP 서버의 전체 도구 카탈로그(tool catalog), 모든 기술 설명(skill description)이 매 턴마다 함께 실려 나갑니다. 컨텍스트 창은 신호가 낮은 스캐폴딩(scaffolding, 구조물)으로 가득 차고, 당신의 진짜 지시 사항은 그 중간에서 익사해 버립니다.
제가 단 한 단어도 입력하기 전에, 저의 상시 작동하는 스캐폴딩은 대략 38,000 토큰(tokens)까지 불어나 있었습니다. 도구 자체가 너무 크다고 표시하고 잘라버린 60KB의 메모리 인덱스, 33KB의 CLAUDE.md, 약 200개의 기술 설명, 그리고 약 180개의 MCP 도구 이름들. 모델은 제 가구들을 읽는 데 주의력 예산(attention budget)을 낭비하고 있었습니다.
4,648구의 시체
그러다 저는 가장 심각한 범인을 찾아냈고, 이를 통해 컨텍스트 부패(context rot)에 대한 진짜 교훈을 얻었습니다. 죽은 시스템은 당신이 사용을 중단한 후에도 계속해서 주입을 시도한다는 것입니다.
몇 달 전, 세션 컨텍스트를 자동으로 캡처하기 위해 메모리 플러그인인 claude-mem 제품군을 설치했습니다. 그러다 어느 시점에 작동이 멈췄습니다. 백그라운드 워커(background worker)도 없고, 등록된 훅(hooks)도 없으며, 로그 파일은 지난 2월에 멈춰 있었습니다. 제가 알기로는 그것은 사라진 상태였습니다.
하지만 그것은 지뢰를 남겨두었습니다. 활성화되어 있을 당시, 이 플러그인은 접촉하는 거의 모든 폴더에 CLAUDE.md를 생성했으며, 각 파일에는 자동 생성된
자신만의 부패(Rot)를 찾는 방법
이를 빠르게 감사(Audit)할 수 있습니다. 세 가지 질문을 던져보세요:
- 매 턴(Turn)마다 무엇이 로드되는가? 여러분의
CLAUDE.md파일들, 메모리/인덱스(Memory/Index) 파일들, 그리고 연결된 MCP 도구 카탈로그(Tool Catalogs)를 모두 합산해 보세요. 총합이 수만 토큰(Tokens)에 달한다면, 여러분의 실제 지침은 건초더미 속에 놓여 있는 셈입니다. - 죽어있지만 여전히 연결되어 있는 것은 무엇인가? 지금까지 설치한 모든 플러그인(Plugin), 훅(Hook), 그리고 MCP 서버를 나열해 보세요. 각각의 항목이 여전히 실행 중인지, 그리고 그에 상응하는 컨텍스트 비용(Context Cost)을 정당하게 지불하고 있는지 확인하세요. 실시간 작업 없이 텍스트만 주입하는 모든 것은 부패(Rot)입니다.
- 중복된 것은 무엇인가? 저에게는 다른 도구를 위한 두 번째 지침 파일이 있었는데, 이는 제
CLAUDE.md와 97%의 바이트가 동일했으며 조용히 동기화가 어긋나 있었습니다. 중복은 두 번째 작성자가 있는 부패입니다.
여러분의 리포지토리(Repos) 전체에서 죽은 플러그인의 시그니처(Signature)를 grep으로 검색해 보는 것은 정신이 번쩍 드는 5분이 될 것입니다. 저의 경우 네 자릿수 결과가 나왔습니다.
규칙은 요청이고, 훅은 법이다
컨텍스트를 다듬는 것이 치료의 절반입니다. 나머지 절반은 CLAUDE.md 규칙이 실제로 무엇인지 받아들이는 것입니다. dev.to의 저자는 이를 완벽하게 표현했습니다: "프롬프트(Prompt) 내의 규칙은 요청이다. 코드 내의 훅(Hook)은 법이다."
CLAUDE.md에 적힌 한 줄은 모델이 합리화하여 무시할 수 있는 제안입니다. 특히 그 내용이 파묻혀 있을 때는 더욱 그렇습니다. 반면 훅(Hook)은 모델이 무엇을 결정하든 상관없이 결정론적(Deterministically)으로 실행되는 코드입니다. 제가 임시 디렉토리에 스크래치 파일(Scratch files)을 쓰지 말라는 상시 규칙을 두었을 때, 모델은 몇 달 동안 이를 무시했습니다. 규칙이 권고 사항이었고, 동시에 Claude Code 자체가 임시 디렉토리가 유효한 워크스페이스(Workspace)라고 모델에게 말하고 있었기 때문입니다. 저는 이 규칙을 하드 deny(거부)를 반환하는 PreToolUse 훅으로 전환했습니다. 그날 이후로 해당 동작은 중단되었습니다.
이 패턴은 일반화될 수 있습니다. 진정으로 강제해야 하는 것이 있다면, 그것을 산문(Prose)에서 분리하여 잘못된 동작이 일어나기 전에 차단하는 코드로 옮기세요. 산문은 진정한 가이드를 위해 남겨두세요. 여러분의 컨텍스트 예산은 살아있고, 정확하며, 지탱하는 힘이 있는 것들에 사용하십시오.
정리(The cleanup)
저는 죽은 메모리 설치본을 아카이브(archive)하고, 제가 직접 소유한 정크 파일(junk files) 3,349개를 삭제했으며, 실제 콘텐츠가 남아 있는 소수의 파일에서 죽은 블록(dead block)을 제거했습니다. 그리고 제가 공유하는 리포지토리(repo)에 있는 나머지 파일들은 주의 깊은 검토를 위해 플래그(flag)를 지정했습니다. 글로벌 인스트럭션(global instruction) 파일은 몇 줄의 실시간 가이드와 캐시된 컨텍스트 스냅샷(cached context snapshot)을 가리키는 포인터로 되돌려 놓았습니다.
모델은 전혀 변하지 않았습니다. 모델이 사고할 수 있는 윈도우(window)가 변했을 뿐입니다. 부패(rot)를 제거하면, 그것은 다시 말을 듣기 시작합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기