Prompt Caching 완전 가이드: 원리, 비용 모델, 실전 적용법
Prompt caching은 반복되는 접두사 입력 Token 비용을 한 자릿수 수준으로 낮출 수 있습니다. 이 글에서는 Anthropic과 OpenAI의 캐시 구현 차이, 실제로 비용이 절감되는 시나리오, 그리고 통합 게이트웨이로 여러 모델에서 동일한 캐시 전략을 재사용하는 방법을 분석합니다.
Prompt caching이 해결하는 문제
대부분의 LLM 호출 입력에는 매번 동일한 부분이 상당히 많습니다. 시스템 프롬프트, few-shot 예시, 검색된 고정 문서, 도구 정의(tool schema) 등입니다. 일반 과금 방식에서는 이 반복 내용에 대해 매번 입력 Token 비용을 다시 지불하고, 매번 attention도 다시 계산해야 합니다.
Prompt caching의 발상은 직접적입니다. 서버가 이 접두사 구간의 계산 결과를 저장해 두고, 다음 요청에서 접두사가 완전히 동일하면 그대로 재사용하며 새로 추가된 부분만 다시 계산합니다. Anthropic은 [prompt caching 문서](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)에서 이를 지연 시간과 비용을 낮추는 수단으로 설명하며, OpenAI 쪽에는 자동 prompt caching과 batch 할인 등의 메커니즘이 대응됩니다.
실제로 비용이 절감되는 시나리오
Prompt caching은 '켜기만 하면 절감되는' 스위치가 아닙니다. 명확한 수익 경계가 있습니다: 동일 접두사가 재사용되는 횟수 × 접두사 길이 > 캐시 쓰기의 추가 오버헤드.
- 긴 시스템 프롬프트 + 멀티턴 대화: 시스템 프롬프트가 수천 Token이고 세션 턴이 많으면 거의 반드시 이득입니다.
- RAG + 고정 문서 집합: 불변의 정책 문서/지식베이스를 접두사에 두고 사용자 질문만 변하게 합니다.
- 코드 Agent / 도구 호출: 도구 schema와 저장소 구조 설명이 보통 매 호출마다 반복됩니다.
- 단발성, 짧은 접두사 호출: 캐시 쓰기 오버헤드가 절감액보다 클 수 있으니 억지로 캐시하지 마세요.
캐시를 무효화하는 다섯 가지 흔한 실수
- 접두사에 타임스탬프나 랜덤 ID 혼입: 고정 위치 하나에
Date.now()만 넣어도 접두사 전체가 바뀝니다. - 시스템 프롬프트의 동적 조합: 사용자마다 다른 접두사를 받으면 캐시 적중률이 거의 0으로 희석됩니다.
- 히스토리 메시지의 요약 압축: 매 턴 재작성하면 접두사가 불안정해집니다.
- 사용자 입력을 맨 앞에 배치: 가장 흔한 구조적 실수이며, 변수는 최대한 뒤에 두어야 합니다.
- 청구서만 보고 적중률은 안 보기: 적중률 지표가 없으면 캐시 수익을 전혀 귀인할 수 없습니다.
여러 모델 간에 동일한 캐시 전략 재사용하기
제품에서 Claude와 GPT를 동시에 사용한다면, 캐시 의미론이 벤더마다 완전히 일치하지는 않습니다(누가 캐시 중단점을 선언하는지, TTL이 얼마인지, 과금 방식은 어떤지). 이 적응 로직을 하나의 통합 게이트웨이 뒤에 모아 두면, 비즈니스 코드는 프롬프트 구조 하나만 유지하고 모델 전환 시 재작성할 필요가 없습니다.
Admesh 게이트웨이는 하위에 대해 OpenAI 호환 프로토콜을 유지하므로, 동일한 프롬프트 구조에서 model 필드만 바꿔 여러 벤더 간에 전환할 수 있습니다. 캐시 적중 과금 기준은 청구서의 usage 명세에 통일되어 반영되므로, 벤더마다 과금 기준을 따로 연동할 필요가 없습니다.
Admesh 실시간 요금 (발췌)
가격은 Admesh 실시간 구성에서 가져온 것이며, 백만 토큰당 USD 기준입니다. 전체 목록은 모델 카탈로그를 참조하세요.
| 모델 이름 및 ID | 컨텍스트 창 | 가격 입력 / 1M | 판매 가격 / 1M | 캐시 적중 / 1M |
|---|---|---|---|---|
Claude Fable 5 anthropic/claude-fable-5 | 1M | $3.25 / 1M | $16.25 / 1M | $0.325 / 1M |
Claude Fable 5.1 anthropic/claude-fable-5-1 | 1M | $3.25 / 1M | $16.25 / 1M | $0.08125 / 1M |
Claude Haiku 4.5 anthropic/claude-haiku-4-5-20251001 | 200K | $0.325 / 1M | $1.625 / 1M | $0.0325 / 1M |
Claude Haiku 5.5 anthropic/claude-haiku-5-5 | 1M | $0.0325 / 1M | $0.1625 / 1M | $0.00325 / 1M |
Claude Opus 4.5 anthropic/claude-opus-4-5-20251101 | 200K | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.6 anthropic/claude-opus-4-6 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.7 anthropic/claude-opus-4-7 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
Claude Opus 4.8 anthropic/claude-opus-4-8 | 1M | $1.625 / 1M | $8.125 / 1M | $0.1625 / 1M |
상기 금액은 표준 공용 채널 단가이며, 토큰의 실제 사용량에 따라 정산됩니다. 전체 모델 목록 보기
실전 체크리스트
- 프롬프트를 '안정 접두사 / 반안정 부분 / 사용자 입력' 세 구간으로 나누고, 안정 부분을 맨 앞에 둡니다.
- 안정 접두사에 타임스탬프, 난수, 사용자 ID가 나타나지 않도록 보장합니다.
- 청구서에서 캐시 읽기/쓰기 Token을 별도로 집계하여 실제 적중률로 환산합니다.
- 고정된 평가 요청 세트로 정기 회귀 테스트를 수행하여 프롬프트 변경이 적중률을 무너뜨리지 않았는지 확인합니다.
- 캐시 수익에 하한을 설정합니다(예: 5% 미만이면 프롬프트 구조 롤백). 최적화를 위한 최적화를 피하세요.
