
클로드 코드는 매 턴마다 대화 전체를 다시 보냅니다. 프롬프트 캐시가 유효하면 입력 토큰 비용이 90% 할인되고, 무효화되면 같은 대화를 정가로 다시 읽습니다.
출력이 입력보다 다섯 배 비싼 이유
요청이 GPU를 타는 과정은 두 단계입니다.
프리필(prefill): 모델이 요청을 읽는 단계입니다. 시스템 프롬프트, CLAUDE.md, 사용자 메시지, 대화에 쌓인 모든 것이 입력 토큰입니다. 병렬 처리가 가능해서 상대적으로 저렴합니다.
디코드(decode): 모델이 답을 쓰는 단계입니다. 사고 토큰, 도구 호출, 화면에 보이는 텍스트. 토큰 하나씩 순차적으로 나옵니다. 200토큰짜리 답이면 GPU가 200번 점유됩니다. 이 차이 때문에 출력이 입력보다 약 다섯 배 비쌉니다.

출력 토큰 중 상당 부분이 사고 토큰입니다. /effort 레벨이 모델의 사고 깊이를 정합니다. 단순 작업이라면 MAX_THINKING_TOKENS=0 claude로 세션을 열어 사고 토큰을 꺼버릴 수도 있습니다.
프롬프트 캐싱의 작동 원리
요청이 직전 요청과 앞부분이 똑같으면 서버가 그 부분을 다시 계산하지 않습니다. 이전에 계산해 둔 결과를 불러오는 게 프롬프트 캐싱입니다.
- 캐시 읽기: 입력 정가의 0.1배 (90% 할인)
- 캐시 쓰기: 입력 정가의 최대 2배 (첫 한 번만)
쓰기는 토큰당 한 번이고 읽기는 그 뒤 매 턴마다 반복되니 금방 본전입니다.
테스트 수정 예시로 보면 이렇습니다.
턴 1: 시스템 프롬프트 + CLAUDE.md + "utils.test.ts 고쳐" → 전부 전액
턴 2: 파일 Read → 앞은 캐시(0.1x), 새 파일만 전액
턴 3: 대상 파일 Read → 같은 구조
턴 4: 코드 수정 적용 → 앞은 캐시, 수정 결과만 전액
턴 5: 테스트 실행 → 앞은 캐시, 테스트 결과만 전액
다섯 번의 요청에 매번 대화 전체가 나갔지만, 전액을 치른 건 매번 새로 붙은 조각뿐입니다. 구독이든 API든 같은 구조입니다.
캐시를 깨는 네 가지 조건
캐시는 요청 맨 앞부터 일치해야 합니다. 도구 정의 → 시스템 프롬프트 → 대화 순서로 항상 나가고, 이 앞부분이 바뀌면 뒤 전체를 다시 계산합니다.
1. /model 변경
모델마다 캐시가 따로입니다. 세션 중간에 모델을 바꾸면 다음 턴에 대화 전체를 처음부터 전액으로 다시 읽습니다.
2. /effort 변경
캐시 키의 일부입니다. 바꾸면 전부 다시 계산합니다. 두 명령 모두 세션 중간에 바꿀 때 확인을 물어보는 이유가 여기 있습니다.
3. /compact 실행
대화를 요약으로 바꿔 쓰기 때문에 기존 캐시와 일치하는 부분이 없습니다. 시스템 프롬프트만 살아남습니다. 요약 생성 비용 자체는 옛 대화가 아직 캐시에 있을 때 하면 저렴합니다. 긴 휴식 뒤보다 작업 직후가 유리합니다.
4. 시간 만료
구독이면 1시간, API 키면 5분입니다. ENABLE_PROMPT_CACHING_1H=1을 설정하면 API도 1시간으로 늘릴 수 있습니다. 턴을 칠 때마다 시계가 리셋되지만 그 시간을 넘기면 다음 턴에 전체가 전액으로 나갑니다.
바꿀 게 있으면 세션 시작이나 /clear 직후가 가장 싸게 바꾸는 타이밍입니다.

컨텍스트에 쌓이는 것이 세션 비용을 결정합니다
세션 비용의 공식은 단순합니다.
컨텍스트에 뭐가 쌓이나 × 몇 턴 동안 남아있나 × 동시에 몇 개 도나
세션 시작 시 타이핑 전에 이미 들어가 있는 것들이 있습니다. 도구 정의, 시스템 프롬프트, CLAUDE.md. /context를 세션 시작에 한 번 쳐 보면 확인할 수 있습니다.
세션 중에 추가되는 건 거의 다 도구 결과입니다. 클로드가 읽은 파일, 실행한 명령의 출력이 컨텍스트에 누적됩니다.
컨텍스트 절약 팁:
- @ 멘션:
@utils.test.ts 고쳐라고 하면 Read 호출 없이 파일이 첫 요청에 바로 붙습니다. 한 대화에 한 번만 하면 됩니다. - 구체적 지시: "테스트 실패해"보다 "utils.test.ts 고쳐"가 탐색 비용을 줄입니다.
- quiet 플래그: CLAUDE.md에 자주 쓰는 명령을 quiet 옵션으로 적어 두면 매 세션 출력 수백 줄을 절약합니다.
/clear: 작업이 바뀌면 컨텍스트를 비웁니다./rewind: 최근 턴만 잘라낼 때 사용합니다. 대화 끝에서 턴을 떼어내는 거라 앞은 캐시에 그대로 남습니다./compact보다 저렴합니다.

한 번 컨텍스트에 들어간 건 세션이 끝나거나 /clear할 때까지 매 턴 다시 나갑니다. 40턴째 요청은 앞 39턴을 전부 다시 보냅니다. 캐시 덕에 저렴하지만 공짜는 아닙니다.
서브에이전트로 컨텍스트 격리하기
시끄러운 작업을 메인 컨텍스트에서 빼는 방법이 서브에이전트입니다.

서브에이전트는 자기만의 컨텍스트 창을 가집니다. 시스템 프롬프트, 도구, CLAUDE.md는 있지만 부모 대화는 없습니다. 작업을 끝내면 결과만 부모에게 돌려주고 나머지는 버립니다.
메인 세션 [컨텍스트 A]
└─ 서브에이전트 [컨텍스트 B] ← 부모 대화 없음
└─ 결과만 A로 반환
단점은 부모 대화가 없으니 이미 읽은 것을 다시 읽을 수 있다는 겁니다. 작은 일이면 오버헤드입니다. 로그 파일 분석처럼 출력이 많고 메인에 남길 필요 없는 일에 빛납니다.
반복되는 작업이라면 서브에이전트 정의를 따로 만들고 model: haiku를 달아 두는 게 좋습니다. 메인 세션 모델로 돌릴 필요 없는 일이 대부분이니까요.
/loop도 마찬가지입니다. 루프가 도는 턴은 메인 세션에서 일반 턴과 비용이 같습니다. 터미널 하나 더 열어서 빈 세션에 루프만 돌리는 게 효율적입니다.
앤트로픽이 비용 구조를 이렇게 상세하게 공개하는 건 거의 유일합니다. Cursor나 Windsurf는 토큰 비용을 월정액 뒤에 숨깁니다. 투명성은 좋지만 "비싸다"를 "관리할 수 있다"로 바꾸려는 목적도 같이 봐야 합니다.
글의 가치가 줄어들지는 않습니다. 프롬프트 캐싱 구조와 캐시를 깨는 조건은 사실이고, 아는 것과 모르는 것의 차이가 큽니다. 세션을 열고 /context 한 번 쳐 보세요. 10초면 됩니다.
참고
FAQ
자주 묻는 질문
- 구독이랑 API 키 중에 캐시 혜택이 더 큰 건 어느 쪽인가요?
- 구독이에요. 캐시 유효 시간이 구독은 1시간이고 API 키는 5분이에요. API도 ENABLE_PROMPT_CACHING_1H=1을 설정하면 1시간으로 늘릴 수 있어요.
- 세션 도중에 /model이나 /effort를 바꾸면 비용이 올라가나요?
- 네, 둘 다 캐시 키의 일부라 바꾸는 순간 쌓인 대화 전체를 정가로 다시 읽어요. 바꿀 거면 세션 시작이나 /clear 직후가 가장 싸요.
- 서브에이전트를 쓰면 무조건 비용이 줄어드나요?
- 작은 일이면 오히려 오버헤드예요. 서브에이전트는 부모 대화가 없어서 파일을 다시 읽거든요. 로그 분석처럼 출력이 크고 메인에 남길 필요 없는 작업에 효과적이에요.