단 2번의 질문만으로 본전을 뽑는 마법: 프롬프트 캐싱 (Prompt Caching) 완전 정복

단 2번의 질문만으로 본전을 뽑는 마법: 프롬프트 캐싱 (Prompt Caching) 완전 정복

AI 최적화의 끝판왕은 모델을 바꾸는 것도, 프롬프트를 줄이는 것도 아니다. 바로 "이미 계산된 생각을 재사용하는 것"이다. 이 글에서는 Claude Code 환경에서 프롬프트 캐싱을 제대로 활용하여 비용을 90% 절감하는 방법을 다룬다.

1. 핵심 개념: "읽었던 책을 다시 공부하지 마라"

프롬프트 캐싱은 AI가 긴 텍스트(코드베이스, 문서, 시스템 프롬프트)를 처리할 때, 매번 처음부터 다시 읽는 것이 아니라 이전에 처리한 상태(KV Cache)를 저장해두고 재사용하는 기술이다.

왜 혁명적인가?

  • 비용 절감: 캐시된 내용을 다시 읽을 때는 비용이 90% 할인된다 (기본 입력 비용의 10%만 부과).
  • 속도 향상: 이미 계산된 상태를 불러오기 때문에 응답 속도(Latency)가 최대 85% 빨라진다.
  • 손익분기점: 동일한 프롬프트를 2번만 재사용해도 이득이다 (정확히는 1.28회 이상부터 비용 절감 발생).

2. 비용 구조와 경제성 분석 (The Math)

캐싱은 "저장(Write)" 비용이 비싸고 "읽기(Read)" 비용이 매우 저렴한 구조다.

항목 비용 (Sonnet 3.5 기준) 비고
일반 입력 (No Cache) $3.00 / 1M 토큰 매 요청마다 발생
캐시 쓰기 (Cache Write) $3.75 / 1M 토큰 최초 1회만 발생 (일반 입력의 1.25배)
캐시 읽기 (Cache Read) $0.30 / 1M 토큰 2번째 요청부터 발생 (일반 입력의 10%, 90% 할인)

실제 절감 사례 (100번의 요청 시뮬레이션)

상황: 20,000 토큰 분량의 코드베이스를 컨텍스트에 넣고 100번 질문함.

  • 캐싱 미사용: 20k * $3.00 * 100회 = $6.00
  • 캐싱 사용: (20k * $3.75 * 1회) + (20k * $0.30 * 99회) = $0.075 + $0.594 = $0.669
  • 결과:89% 비용 절감 ($6.00 -> $0.67)

3. 작동 원리와 생명주기 (TTL)

캐시 생명주기 (TTL)

  • 기본적으로 캐시는 5분(Epemeral) 동안 유지된다.
  • 중요: 캐시가 적중(Hit)할 때마다 타이머가 리셋되어 수명이 5분씩 연장된다. 즉, 5분 안에 계속 질문하면 캐시는 영원히 유지된다.
  • 1시간 캐시 (Beta/New): 비용을 2배(쓰기 기준) 지불하면 1시간 동안 유지되는 옵션도 있다. 작업 간격이 긴 경우 유용하다.

최소 토큰 요구사항

아무거나 캐싱되지 않는다. Sonnet/Opus는 최소 1,024 토큰, Haiku는 4,096 토큰 이상의 길이어야 캐싱이 작동한다.


4. 캐시 적중률을 높이는 프롬프트 구조화 전략

캐싱은 "접두사(Prefix) 일치" 방식이다. 프롬프트의 앞부분이 토씨 하나 틀리지 않고 똑같아야 캐시를 재사용할 수 있다. 따라서 프롬프트 순서가 돈을 결정한다.

✅ 권장 구조 (Static -> Dynamic)

  1. 도구 정의 (Tools): 변경 빈도가 가장 낮음
  2. 시스템 프롬프트 (System Prompt): 역할 부여, CLAUDE.md 내용
  3. 참조 문서/코드 (Context): 분석할 코드 파일, 문서 내용 (← 여기에 캐시 포인트 설정)
  4. 대화 내역 (Chat History): 이전 턴의 대화들
  5. 사용자 질문 (User Query): 매번 바뀌는 내용 (맨 뒤에 배치)

❌ 캐시를 망치는 나쁜 습관

  • 동적 도구 정의: 매 요청마다 도구 설명이나 파라미터를 동적으로 바꾸면(예: 현재 시간을 도구 설명에 넣기), 전체 캐시가 무효화된다. 도구 정의는 캐시의 최상단에 위치하기 때문이다.
  • 중간 수정: 프롬프트 중간에 있는 CLAUDE.md 내용을 수정하면, 그 뒤에 오는 대화 내역이나 코드 컨텍스트의 캐시도 모두 깨진다.

5. Claude Code CLI에서의 실무 적용 팁

Claude Code CLI는 기본적으로 프롬프트 캐싱을 적극 활용하도록 설계되어 있지만, 사용자의 행동에 따라 효율이 달라진다.

  • 자동 캐싱 활용: Claude Code는 시스템 프롬프트와 도구 정의를 자동으로 캐싱한다. 사용자가 별도로 설정하지 않아도 기본 적용된다.
  • CLAUDE.md 최적화: CLAUDE.md 파일은 세션의 앞부분(시스템 프롬프트 영역)에 위치하므로, 이 파일이 자주 바뀌지 않도록 관리해야 캐시 효율이 높다. 빈번하게 바뀌는 "오늘의 할 일" 같은 내용은 별도 파일로 분리하는 것이 좋다.
  • 대용량 파일 처리: cat big_log.txt | claude 처럼 파일을 파이핑하거나 @large_file.ts를 참조할 때, 해당 파일 내용이 캐시 최소 용량(1,024 토큰)을 넘으면 자동으로 캐싱 효과를 볼 수 있다. 따라서 같은 파일을 여러 번 참조하며 질문하는 작업에서 효율이 극대화된다.
  • 1시간 캐시 (High-Leverage): 작업을 하다가 30분 정도 회의를 다녀와야 한다면? 기본 5분 캐시는 만료된다. 중요한 대규모 세션이라면 cache_control의 TTL을 1시간으로 늘려(설정 가능 여부 확인 필요) 컨텍스트를 보존하는 전략이 유효할 수 있다.

6. 문제 해결: "왜 캐싱이 안 될까?" (Debugging Cache Misses)

  • 정확한 일치 (Exact Match): 공백 문자 하나, 줄바꿈 하나라도 다르면 캐시 미스가 발생한다.
  • 20 블록 제한: Anthropic API는 캐시 체크포인트 지점으로부터 역방향으로 최대 20개의 블록까지만 캐시 일치 여부를 검사한다. 프롬프트 구조가 너무 파편화되어 있으면 캐시를 못 찾을 수 있다.
  • JSON 키 순서: 일부 언어/환경에서는 JSON 객체의 키 순서가 무작위로 바뀔 수 있는데, 이 경우 내용이 같아도 텍스트가 달라져 캐시가 깨진다.

📝 요약 테이블 (Copy & Paste용)

전략 핵심 내용 효과
순서가 생명 변하지 않는 것(도구, 규칙)을 에, 변하는 것(질문)을 에 배치. 캐시 적중률 극대화
5분의 법칙 캐시는 5분 뒤 폭파됨. 5분 내에 한 번이라도 더 질문하면 수명 연장. 비용 90% 절감 유지
대용량 우선 1,024 토큰 미만은 캐싱 안 됨. 큰 파일이나 문서를 다룰 때 효과적. 소량 질문엔 효과 없음
도구 고정 도구(MCP) 정의를 동적으로 바꾸지 말 것. 전체 캐시 무효화 방지
손익분기점 같은 컨텍스트로 2번 이상 질문할 거라면 무조건 이득. 2회차부터 1/10 가격