Claude Code 요금이 빨리 소진되는 이유: 프롬프트 캐시 이해하기
이상하다고 느꼈던 순간
같은 Max 플랜을 쓰는데, 어떤 사람은 하루 종일 여유롭게 쓰고 어떤 사람은 점심 전에 한도에 걸린다. 처음엔 그냥 사용량 차이라고 생각했다. 그런데 Anthropic이 엔지니어링 블로그에 올린 글을 읽고 나서야 진짜 이유를 알았다.
캐시 히트율의 차이였다.
조사해보니: 캐시가 작동하는 방식
Claude Code가 모델에 보내는 요청은 항상 이 순서로 구성된다.
시스템 프롬프트 + 툴 정의 → 프로젝트 문서 (CLAUDE.md) → 세션 컨텍스트 → 메시지
API는 이 시퀀스를 앞에서부터 캐시한다. 다음 요청에서 앞부분이 일치하면 이전 계산을 재사용한다. 캐시 히트 = 해당 토큰이 1/10 가격이 된다.
핵심 문제는 이것이다. 프리픽스에서 1바이트라도 바뀌면, 그 이후의 캐시가 전부 무효화된다.
Anthropic의 설계 원칙은 "변화 빈도가 낮은 것일수록 앞에 배치한다"는 것이다. 시스템 프롬프트와 툴 정의는 거의 안 바뀌니까 맨 앞에. CLAUDE.md는 가끔 바뀌니까 중간에. 메시지는 매 턴 바뀌니까 맨 뒤에. 이 구조 덕분에 새 턴은 맨 뒤에 추가하는 것만으로 충분하고, 앞의 캐시는 유지된다.
내가 캐시를 망가뜨리고 있었던 방법들
대화 중간에 모델 전환하기
Opus로 작업하다가 간단한 질문이 생기면 /model로 Haiku로 바꾸고, 끝나면 다시 Opus로 돌아왔다. 비용을 아끼려는 습관이었다.
실제로는 반대 효과였다.
캐시는 모델에 묶여 있다. 한 번 전환하면 그때까지 쌓인 캐시가 전부 0이 된다. 재구축 비용이 Opus에 그냥 답하게 했을 때의 비용을 초과하는 경우가 많다.
Anthropic 내부에서는 메인 대화를 하나의 모델로 유지한다. 다른 모델이 필요하면 서브에이전트를 사용해서 독립된 컨텍스트와 캐시로 처리한다.
세션 중에 MCP 툴 추가/제거하기
툴 정의는 캐시된 프리픽스의 일부다. 추가, 제거, 파라미터 변경 모두 캐시를 파괴한다.
Claude Code가 사용하지 않는 툴 정의를 계속 유지하는 이유가 이것이다. 여분의 토큰 비용보다 캐시 무효화 비용이 훨씬 크다.
Plan Mode도 같은 이유로, 플래닝 모드 진입 시 실행 툴을 제거하는 대신 EnterPlanMode/ExitPlanMode라는 특수 툴을 추가한다. 툴셋을 바꾸지 않음으로써 캐시를 유지한다.
짧게 쓰고 자꾸 새 세션 열기
claude를 실행할 때마다 캐시는 0에서 시작한다. "두세 번 물어보고 종료, 다시 실행"하는 습관으로는 캐시 혜택을 거의 받을 수 없다.
계정 전환하기
캐시는 계정별로 분리되어 있다. 여러 계정을 번갈아 쓰면 전환할 때마다 리셋된다.
바꾼 것들과 결과
--resume로 이전 세션 이어가기
claude --resume
이전 세션을 복원하고 캐시 체인을 이어받는다. 재구축 비용이 없다. Claude Code에서 가장 과소평가된 비용 절감 습관이라고 생각한다.
대화를 길게 유지하기
대화가 길어질수록 캐시가 두꺼워지고, 후반 메시지가 저렴해진다. 불필요하게 새 세션을 열지 않는다.
컨텍스트 윈도우 초과가 걱정될 수 있는데, Claude Code에는 Cache-Safe Forking이라는 자동 압축 기능이 있다. 압축 요청 자체가 동일한 시스템 프롬프트와 툴 정의를 재사용하기 때문에 캐시 체인이 유지된다. 긴 대화는 비용이 올라가는 게 아니라 오히려 내려간다.
모델 전환은 별도 대화에서
다른 모델이 필요한 작업은 전용 대화를 따로 연다. 메인 세션의 캐시 체인을 지키는 것이 저렴한 모델로 전환해서 얻는 절약보다 가치 있다.
빠른 참조표
작업 | 캐시 영향 | 비용 영향 |
|---|---|---|
대화 중 모델 전환 | 완전 무효화 | 최대 20배 |
MCP 툴 추가/제거 | 완전 무효화 | 10~20배 |
새 세션 시작 | 0에서 시작 | 첫 턴은 풀 가격 |
계정 전환 | 완전 무효화 | 10~20배 |
긴 연속 대화 | 누적됨 | 후반으로 갈수록 저렴 |
| 체인 유지 | 거의 무료 |
마치며
Anthropic이 이 블로그를 쓴 이유는 분명하다. "쿼터가 부족한 게 아니라 사용 패턴이 비효율적인 것"이라는 메시지다.
Max 플랜이 "항상 부족하다"고 느끼는 사람과 "충분하다"고 느끼는 사람의 차이는 작업량이 아니라 캐시 효율의 차이다.
참고: Anthropic Engineering: Lessons from building Claude Code
작성: Jessie(EvoLink)— EvoLink Claude Desktop 통합 가이드: https://docs.evolink.ai/en/integration-guide/claude-desktop
