🔥 고급2026-05-245~7분
Prompt Caching TTL 전략: 캐시 적중률 90% 이상 유지하는 프접근법
Anthropic의 prompt caching은 잘못 설계하면 캐시 미스가 빈발해 오히려 비용이 증가한다. 캐시 블록 배치 순서, TTL 갱신 패턴, 모니터링 지표를 체계적으로 설계해 적중률 90% 이상을 안정적으로 달성하는 방법을 다룬다.
prompt-cachingcost-optimizationobservability
왜 캐시 미스가 예상보다 많이 발생하는가
Anthropic prompt caching의 TTL은 5분이다. 트래픽이 분산된 프로덕션 환경에서 동일 캐시 블록이 5분 내에 재사용되지 않으면 캐시가 만료되어 full input token 비용이 재과금된다. 주요 실패 모드는 세 가지다.
- 캐시 블록 위치 오류:
cache_control을 시스템 프롬프트 끝이 아닌 중간에 삽입하면 이후 내용 변경 시 캐시 전체가 무효화된다. - 동적 콘텐츠 혼입: 타임스탬프·요청 ID 등 변하는 값이 캐시 대상 블록 내부에 포함되면 매 요청마다 미스가 발생한다.
- 트래픽 버스트 부재: QPS가 낮은 서비스에서 5분 TTL 내 재요청이 없어 캐시가 계속 콜드 상태를 유지한다.
캐시 블록 설계 원칙
캐시 블록은 변경 빈도 역순으로 배치한다. 가장 안정적인 내용(시스템 지침, RAG 문서 청크)을 앞에, 요청마다 달라지는 내용(사용자 쿼리)을 뒤에 둔다. cache_control은 안정 블록의 마지막 토큰 위치에만 설정한다.
import anthropic
client = anthropic.Anthropic()
# 안정적 컨텍스트: 시스템 프롬프트 + RAG 문서를 캐시 대상으로
STABLE_SYSTEM = """당신은 결제 시스템 전문 어시스턴트입니다.
[규칙 500토큰 분량...]"""
RAG_DOCS = """[검색된 문서 1500토큰 분량...]"""
def query_with_cache(user_question: str) -> str:
response = client.messages.create(
model="claude-opus-4-5",
max_tokens=1024,
system=[
{
"type": "text",
"text": STABLE_SYSTEM + "\n\n" + RAG_DOCS,
"cache_control": {"type": "ephemeral"} # 안정 블록 끝에만
}
],
messages=[
{"role": "user", "content": user_question} # 동적 부분은 캐시 밖
]
)
usage = response.usage
cache_hit = usage.cache_read_input_tokens > 0
print(f"캐시 {'HIT' if cache_hit else 'MISS'} | "
f"캐시읽기={usage.cache_read_input_tokens} "
f"캐시생성={usage.cache_creation_input_tokens} "
f"일반입력={usage.input_tokens}")
return response.content[0].text
TTL 갱신 패턴과 모니터링
Proactive warming: QPS가 낮은 서비스는 4분 30초 간격으로 경량 더미 요청을 보내 TTL을 갱신한다. 비용은 캐시 히트 요금(일반의 10%)만 발생하므로 경제적이다.
비용 비교 수치:
- claude-opus-4-5 기준: 일반 입력 $15/MTok, 캐시 생성 $18.75/MTok, 캐시 읽기 $1.50/MTok
- 2000토큰 시스템 프롬프트를 1000회 요청 시: 캐시 없이 $30, 캐시 적중률 90% 시 약 $4.5 (85% 절감)
운영 체크리스트:
- [ ]
cache_read_input_tokens/(cache_read + input_tokens)비율을 Datadog/CloudWatch에 메트릭으로 전송 - [ ] 적중률 < 70% 시 알람 설정
- [ ] 캐시 블록 내 동적 값(날짜, UUID) 정기 감사
- [ ] 배포 시 캐시 블록 내용 변경 여부를 CI diff로 확인
- [ ] 서비스 QPS < 0.2/s 이면 proactive warming 스케줄러 활성화