| [Glossary] 프롬프트 캐싱 완벽 정리 | Prompt Caching을 쉽게 이해하는 법 |
한 줄 요약: 프롬프트 캐싱(Prompt Caching)이란, LLM API 호출 시 반복되는 시스템 프롬프트나 대용량 문서를 서버 측에 캐시해 재처리 없이 재사용함으로써 비용과 지연시간을 크게 줄이는 최적화 기술이다.
1. 프롬프트 캐싱이란 무엇인가?
매번 회의가 시작될 때 “저는 홍길동이고, 우리 회사는 AI 서비스를 운영하고, 회의 규칙은 이렇습니다…“라고 처음부터 설명한다면 얼마나 비효율적일까요? 프롬프트 캐싱은 이 비효율을 해결합니다.
LLM 서비스에서는 모든 요청마다 시스템 프롬프트(역할 정의, 도메인 지식, 회사 규칙 등)를 함께 전송합니다. 이 내용이 수천 토큰에 달하면 매 호출마다 막대한 비용이 발생합니다. 프롬프트 캐싱은 이 반복 부분을 서버에 저장(캐시)해 두고 재사용합니다.
Anthropic의 프롬프트 캐싱 효과 (공식 발표):
- 토큰 처리 비용: 최대 90% 절감
- 응답 지연시간: 최대 85% 감소
2. 핵심 개념 이해하기
캐싱 동작 원리
[첫 번째 호출]
시스템 프롬프트 (5,000토큰) + 질문 (50토큰)
↓ 처리 + 캐시 저장
응답 생성 (5,050토큰 처리, 전체 비용 부과)
[두 번째 호출] ← 5분 이내
시스템 프롬프트 (cache_read: 5,000토큰) + 질문 (50토큰)
↓ 캐시 히트
응답 생성 (50토큰만 신규 처리, 90% 비용 절감)
Claude의 캐시 구조
┌─────────────────────────────────────────┐
│ 시스템 프롬프트 │
│ "당신은 법률 전문가입니다..." │
│ [회사 규정 전문 2,000토큰...] │ ← cache_control: ephemeral
│ [판례 데이터베이스 3,000토큰...] │ ← 캐시 저장 포인트
├─────────────────────────────────────────┤
│ 사용자 메시지 │
│ "이 계약서의 위험 조항을 분석해줘" │ ← 매번 새로 처리
└─────────────────────────────────────────┘
캐시 유효 기간
| 제공업체 | 캐시 TTL |
|---|---|
| Anthropic (Claude) | 5분 (활성 사용 시 갱신) |
| OpenAI | 5~10분 |
캐시는 TTL 초과 시 자동 삭제되므로, 고정 시스템 프롬프트는 정기적으로 호출해 갱신해야 합니다.
3. 실무 적용 예시
Claude API 캐싱 구현
import anthropic
client = anthropic.Anthropic()
# 대용량 시스템 프롬프트 + 문서를 캐시
SYSTEM_PROMPT = """당신은 10년 경력의 법률 전문가입니다.
아래 회사 규정을 기반으로 질문에 답변해 주세요.
[회사 취업 규칙 전문]
제1조 (목적) 이 규칙은...
(이하 3,000토큰 분량의 규정)
"""
def ask_legal_question(question: 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"} # 캐시 포인트 지정
}
],
messages=[
{"role": "user", "content": question}
]
)
# 캐시 사용 여부 확인
usage = response.usage
print(f"입력 토큰: {usage.input_tokens}")
print(f"캐시 생성: {usage.cache_creation_input_tokens}")
print(f"캐시 읽기: {usage.cache_read_input_tokens}")
return response.content[0].text
# 첫 호출: 캐시 생성 (전체 비용)
answer1 = ask_legal_question("연차 휴가는 며칠인가요?")
# 두 번째 호출: 캐시 히트 (90% 절감)
answer2 = ask_legal_question("육아휴직 신청 절차는?")
OpenAI 자동 캐싱
from openai import OpenAI
client = OpenAI()
# OpenAI는 자동으로 프롬프트 캐싱 적용 (별도 설정 불필요)
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT}, # 자동 캐시
{"role": "user", "content": "질문 내용"}
]
)
# 캐시 사용량 확인
usage = response.usage
print(f"캐시 읽기 토큰: {usage.prompt_tokens_details.cached_tokens}")
4. 프롬프트 캐싱 vs 유사 개념 비교
| 구분 | 프롬프트 캐싱 | RAG | 파인튜닝 |
|---|---|---|---|
| 목적 | 비용/속도 최적화 | 지식 확장 | 행동 특화 |
| 데이터 위치 | 서버 캐시 | 벡터 DB | 모델 가중치 |
| 업데이트 | 즉시 반영 | 인덱싱 필요 | 재학습 필요 |
| 비용 효과 | 반복 호출 시 큰 절감 | 장문 검색 시 효율적 | 초기 비용 높음 |
| 적용 상황 | 고정 컨텍스트 반복 | 동적 정보 필요 | 특수 도메인 |
5. 마치며
프롬프트 캐싱은 LLM 서비스를 프로덕션에 배포할 때 비용 최적화의 가장 빠른 방법입니다. 특히 고정된 시스템 프롬프트(역할, 규칙, 문서)가 큰 서비스일수록 효과가 큽니다. 컨텍스트 윈도우(Context Window)와 함께 이해하면 토큰 비용을 전략적으로 관리하는 방법을 설계할 수 있습니다.
참고 자료
- Anthropic 프롬프트 캐싱 공식 문서 — Claude 캐싱 구현 가이드
- OpenAI 프롬프트 캐싱 안내 — OpenAI 자동 캐싱 설명
함께 읽으면 좋은 용어
이 개념과 함께 알아두면 이해가 깊어지는 관련 용어들입니다.
댓글 남기기