🔥 고급2026-07-185~7분
Prompt Caching TTL 전략: 캐시 히트율 90% 이상 달성을 위한 구조 설계
Anthropic Prompt Caching의 TTL 5분 제약을 역이용해 캐시 히트율을 최대화하는 prefix 정렬 전략과 비용 절감 수치를 다룬다.
prompt-cachingcost-optimizationproduction
왜 캐시 히트율이 낮은가
Anthropic Prompt Caching은 cache_control: {type: 'ephemeral'} 마킹된 블록을 최대 5분간 서버 측에 보존한다. 문제는 대부분의 팀이 prefix 순서를 무시한 채 캐시 포인트를 찍어, 매 요청마다 캐시 미스가 발생한다는 것이다. 실측 기준으로 prefix 순서가 어긋나면 히트율이 12~18% 수준에 머문다.
핵심 제약: 캐시는 항상 messages 배열의 앞에서부터 연속된 동일 prefix 단위로 매칭된다. 즉, 시스템 프롬프트→긴 컨텍스트→few-shot 순서로 정렬해야 하며, 동적 값(유저 입력, 타임스탬프)은 반드시 뒤쪽에 위치해야 한다.
Prefix 정렬 패턴과 실제 코드
아래는 claude-3-5-sonnet-20241022 기준으로 캐시 히트율 90%+ 를 달성하는 구조다.
import anthropic
client = anthropic.Anthropic()
# 정적 블록: 시스템 + 대형 컨텍스트(RAG 문서 등)
SYSTEM_PROMPT = "You are an expert code reviewer..." # ~2000 tokens
LARGE_CONTEXT = open("codebase_summary.txt").read() # ~4000 tokens
def call_with_cache(user_query: str) -> str:
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
system=[
{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"} # prefix-1
},
{
"type": "text",
"text": LARGE_CONTEXT,
"cache_control": {"type": "ephemeral"} # prefix-2
}
],
messages=[
{"role": "user", "content": user_query} # 동적: 캐시 포인트 없음
]
)
usage = response.usage
hit = usage.cache_read_input_tokens > 0
print(f"Cache hit: {hit} | read={usage.cache_read_input_tokens} write={usage.cache_creation_input_tokens}")
return response.content[0].text
비용 구조 (claude-3-5-sonnet 기준):
- 캐시 write: $3.75 / 1M tokens (일반의 1.25×)
- 캐시 read: $0.30 / 1M tokens (일반의 0.1×)
- 손익분기: 동일 prefix로 2회 이상 요청 시 즉시 이득
실패 모드와 운영 체크리스트
실패 모드 3가지:
- prefix 중간에 동적 값 삽입 → 캐시 미스 100%. few-shot 예제 사이에 날짜/유저ID 삽입 금지.
- 5분 TTL 초과 후 burst 트래픽 → 첫 요청이 write, 이후 read. 워밍업 요청을 cron으로 4분 주기 발송하면 TTL 리셋 가능.
- 모델 버전 변경 → 캐시는 모델별로 격리. 배포 시 캐시 miss spike 예상하고 알림 설정 필요.
운영 체크리스트:
- [ ]
cache_read_input_tokens / total_input_tokens비율을 메트릭으로 수집 (목표 ≥ 0.85) - [ ] 정적 블록 크기 ≥ 1024 tokens 확인 (미만 시 캐싱 불가)
- [ ] 배포 파이프라인에 prefix 순서 린트 스텝 추가
- [ ] 4분 주기 헬스체크 요청으로 TTL 자동 갱신
- [ ] 모델 업그레이드 시 캐시 hit율 24시간 모니터링