🔥 고급2026-06-175~7분
Prompt Caching으로 반복 컨텍스트 비용 90% 절감하기
Anthropic의 prompt caching을 활용해 시스템 프롬프트·RAG 문서 재사용 시 토큰 비용을 대폭 줄이는 전략과 실패 모드를 다룬다.
prompt-cachingcost-optimizationobservability
Prompt Caching 동작 원리와 수치
Anthropic prompt caching은 cache_control: {type: 'ephemeral'} 마커를 삽입한 블록을 최대 5분간 서버 측에 캐싱한다. cache write 비용은 기본 입력 토큰의 1.25배이지만, cache hit 시 0.1배로 줄어든다. 1000 토큰짜리 시스템 프롬프트를 100회 호출한다고 가정하면:
- 캐싱 없음: 100,000 토큰 과금
- 캐싱 적용: 1,250(write) + 9,900(hit×99) = 11,150 토큰 수준
- 절감률: 약 88%
RAG 파이프라인에서 대형 컨텍스트 문서를 매 요청마다 붙이는 구조라면 효과가 극대화된다.
실제 SDK 예제
import anthropic
client = anthropic.Anthropic()
LARGE_SYSTEM_DOC = "...수천 토큰 분량의 정책 문서..." # 실제론 파일 로드
response = client.messages.create(
model="claude-opus-4-5",
max_tokens=1024,
system=[
{
"type": "text",
"text": LARGE_SYSTEM_DOC,
"cache_control": {"type": "ephemeral"} # 캐시 경계 마커
},
{
"type": "text",
"text": "위 문서를 참고해 사용자 질문에 답하라."
}
],
messages=[{"role": "user", "content": "환불 정책이 어떻게 되나요?"}]
)
usage = response.usage
print(f"cache_creation_input_tokens: {usage.cache_creation_input_tokens}")
print(f"cache_read_input_tokens: {usage.cache_read_input_tokens}")
print(f"input_tokens: {usage.input_tokens}")
usage 객체의 세 필드를 모니터링해 hit율을 추적하라. hit율이 낮으면 캐시 마커 위치나 TTL 만료를 의심한다.
트레이드오프와 실패 모드
트레이드오프
- 캐시 마커는
messages배열의 앞쪽 고정 블록에만 유효하다. 사용자 메시지처럼 매번 바뀌는 부분에 마커를 달면 매번 write만 발생해 오히려 비용 증가. - 캐시 TTL은 5분이므로 트래픽이 낮은 새벽 시간대엔 hit율이 급락한다.
- 멀티턴 대화에서 히스토리가 길어질수록 마커 이후 내용이 달라져 캐시 미스 발생.
실패 모드
- 마커를 messages 배열 중간에 배치 → 무시됨. 항상 system 또는 messages 앞부분에 배치.
- 동일 내용이라도 공백·개행 차이로 캐시 미스 발생 → 템플릿을 상수로 고정.
- 캐시 hit 여부를 모니터링하지 않아 비용 이상을 뒤늦게 발견.
운영 체크리스트
- [ ]
cache_creation_input_tokens/cache_read_input_tokens메트릭을 Datadog·Grafana에 전송 - [ ] hit율 = read / (read + creation) 기준 70% 미만이면 알림 설정
- [ ] 캐시 대상 텍스트를 환경변수 또는 상수로 관리해 내용 변경 추적
- [ ] 트래픽 낮은 시간대 배치 작업엔 Batch API 병행 고려
- [ ] 모델 업그레이드 시 캐시 키가 리셋됨을 배포 계획에 반영