Prompt Caching TTL과 비용 모델 완전 분석: 캐시 히트율 90% 달성 전략
Anthropic의 Prompt Caching은 잘못 설계하면 오히려 비용이 증가한다. 캐시 TTL 구조, 프리픽스 고정 패턴, 히트율 측정까지 운영 관점에서 정리한다.
Prompt Caching의 비용 구조 이해
Anthropic Prompt Caching은 캐시 쓰기(write) 비용이 기본 입력 토큰의 1.25× 로 더 비싸다. 반면 캐시 읽기(read) 는 기본 입력 대비 0.1× 수준이다. TTL은 현재 5분으로 고정되어 있어, 5분 내 동일 프리픽스 재호출이 없으면 쓰기 비용만 소모하고 히트 없이 끝난다.
실패 모드 1: 사용자별로 system prompt 앞부분이 달라지는 구조 → 프리픽스 불일치로 캐시 미스 100%
실패 모드 2: 요청 간격이 5분을 초과하는 저빈도 배치 작업에 캐시 적용 → 순손실
실패 모드 3: cache_control 마커를 content 블록 중간에 여러 개 삽입 → 가장 긴 매칭 프리픽스만 유효하므로 의도와 다른 캐시 경계 발생
캐시 히트율 90% 달성을 위한 프리픽스 고정 패턴
핵심 원칙은 변하지 않는 내용을 최대한 앞으로, cache_control 마커는 고정 구간의 끝에 정확히 1개 배치하는 것이다.
import anthropic
client = anthropic.Anthropic()
STATIC_SYSTEM = """당신은 법률 문서 검토 전문가입니다.
관련 판례 데이터베이스: [...수천 토큰의 고정 컨텍스트...]
"""
def review_document(user_query: str, document: str) -> str:
response = client.messages.create(
model="claude-opus-4-5",
max_tokens=1024,
system=[
{
"type": "text",
"text": STATIC_SYSTEM,
"cache_control": {"type": "ephemeral"} # 고정 구간 끝에만
}
],
messages=[
{
"role": "user",
"content": f"문서:\n{document}\n\n질문: {user_query}"
}
]
)
usage = response.usage
hit = usage.cache_read_input_tokens > 0
print(f"캐시 히트: {hit} | 읽기: {usage.cache_read_input_tokens} | 쓰기: {usage.cache_creation_input_tokens}")
return response.content[0].text
usage.cache_read_input_tokens가 0이면 미스다. 이 값을 Datadog 등에 메트릭으로 쏴서 히트율 = read / (read + creation) 을 대시보드화한다. 목표치 90% 미달 시 프리픽스 길이 또는 호출 간격을 점검한다.
비용 손익분기 계산과 운영 체크리스트
손익분기: 캐시 쓰기 오버헤드 0.25× 를 회수하려면 같은 프리픽스로 최소 2회 이상 히트해야 한다. 히트 1회당 0.9× 절감이므로 3회 히트부터 실질 이익.
운영 체크리스트
- [ ] 고정 system prompt 길이 확인 (최소 1,024 토큰 이상이어야 캐싱 대상)
- [ ]
cache_control마커가 정적 블록 끝에만 위치하는지 코드 리뷰 - [ ] 호출 패턴 분석: 동일 프리픽스 요청이 5분 내 발생하는지 트래픽 로그 확인
- [ ]
cache_read_input_tokens/cache_creation_input_tokens메트릭 수집 및 알림 설정 - [ ] 저빈도 배치 작업은 캐싱 제거 후 비용 비교 A/B 테스트