블로그클로드 활용6분 읽기

클로드 코드 40턴째에 /model을 바꿨더니 입력 비용을 훨씬 더 냈습니다

클로드 코드 캐시를 깨는 네 가지 조건과 세션 비용을 줄이는 법을 정리했습니다.

클로드 코드 40턴째에 /model을 바꿨더니 입력 비용을 훨씬 더 냈습니다 대표 이미지

클로드 코드를 40턴째 돌리고 있었습니다. 중간에 /model을 바꿨더니 다음 턴에 입력 비용을 훨씬 더 냈습니다.

이유는 단순합니다. 클로드 코드는 매 턴마다 대화 전체를 다시 보내는데, 프롬프트 캐시를 쓰면 입력 토큰을 정가의 10%만 냅니다. 모델을 바꾸면 클로드 코드는 캐시를 못 쓰고 같은 대화를 정가로 다시 읽습니다.

출력이 입력보다 다섯 배 비싼 이유

모델은 요청을 두 단계로 처리합니다.

프리필(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로 작업 간 컨텍스트를 분리한 효과

클로드 코드는 한 번 컨텍스트에 넣은 걸 세션이 끝나거나 /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 직후가 가장 싸요.
서브에이전트를 쓰면 무조건 비용이 줄어드나요?
작은 일이면 오히려 오버헤드예요. 서브에이전트는 부모 대화가 없어서 파일을 다시 읽거든요. 로그 분석처럼 출력이 크고 메인에 남길 필요 없는 작업에 효과적이에요.
원고, 봉투, 책자가 오렌지 리본 하나로 이어진 모습

SEASON 3

시즌3 「콘텐츠로 팔기」

AI와 콘텐츠를 만들고 고객에게 연결하는 4주

제가 에이전트로 조사하고 쓰고 파는 과정을 그대로 보여 드려요. 그다음 각자의 주제로 같이 만들어 봐요.

10월 2일 OT · 10월 5일부터 월·수 4주 · 10월 31일 오프라인

시즌3 커리큘럼 보기