07. Context Compact — 잊는 게 아니다, 치워두는 것이다
이전 이야기에서: 지민은 MCPs로 외부 서비스를 연결하고, Security로 보안 경계를 설정했다. 도구, 지식, 컨텍스트, 권한 — 네 레이어가 모두 작동하기 시작했다. Stripe 결제 연동에 2시간을 쏟았다. 그리고 Claude의 응답이 느려지기 시작했다...
"Context will fill up; you need a way to make room" — Harness Engineering
"Claude가 느려졌다"
Stripe 결제 연동 작업 2시간째. 지민은 이상함을 느꼈다.
Claude의 응답이 느려졌다. 3초 걸리던 대답이 8초가 됐다. 더 이상한 건 품질이었다. 방금 읽은 파일 내용을 잊어버린 것 같았다.
지민: 현재 컨텍스트 상태는?
Claude: "현재 사용량: 87%"
87%. 30개 파일을 읽고, MCP 툴을 20번 호출하고, 대화 30턴을 나누는 동안 — messages 배열이 한계에 다가가고 있었다.
그런데 근본적인 물리적 제약이 있었다.
Claude의 context window는 유한하다.
대화 내용, 파일 읽기 결과, 커맨드 출력... 이 모든 것이 messages 배열에 쌓인다.
messages = [
{ role: "user", content: "인증 시스템 구현해줘" },
{ role: "assistant", content: "읽어볼게요..." },
{ role: "user", content: "[tool_result] src/auth.ts 내용 (2000줄)..." }, ← 8000 토큰
{ role: "assistant", content: "..." },
{ role: "user", content: "[tool_result] tests/auth.test.ts (500줄)..." }, ← 2000 토큰
{ role: "assistant", content: "..." },
{ role: "user", content: "[tool_result] npm test 출력..." }, ← 1000 토큰
...
[30개 파일 * 평균 3000토큰 = 90,000 토큰]
[+ 대화 내용 10,000 토큰]
[= 100,000 토큰... 한계 접근]
]
대형 코드베이스를 다루거나, 오래 걸리는 작업을 하면 context가 꽉 찼다. Claude가 더 이상 생각할 공간이 없었다.