huny.log

기술 포스트 · AI·LLM

Prompt caching 운영 경제학 — 같은 프롬프트를 1000번 보낼 때 비용을 90% 줄이는 법

시스템 프롬프트·페르소나·문서가 호출마다 동일하다면 그 부분을 캐시할 수 있습니다. Anthropic·OpenAI의 prompt caching 작동 원리와 마케팅 자동화의 비용을 90% 깎는 운영 패턴.

광고 카피 양산을 LLM에 자동화한 뒤 첫 달 청구서를 받으면 자주 놀랍니다. 같은 페르소나·같은 브랜드 가이드를 매번 보내는데 그 부분이 매번 입력 토큰으로 잡혀 비용을 만듭니다. prompt caching은 이 반복되는 부분을 캐시 영역으로 표시해, 두 번째 호출부터는 그 부분을 캐시 토큰(가격 1/10)으로 처리합니다. 마케팅 자동화의 운영 비용을 90% 가까이 깎을 수 있는 단순하고 강력한 도구입니다.

마케터가 이 글을 읽어야 하는 이유: LLM을 자동화에 끼워 넣을수록 비용은 호출 수 × 입력 토큰으로 빠르게 커집니다. 같은 페르소나를 1000번 보내고 있다면, 그게 1000번의 입력 토큰 비용입니다. caching 한 줄로 999번을 캐시 토큰으로 돌리면 비용이 거의 1/10. 작은 변경 하나로 LLM 자동화의 ROI가 완전히 달라집니다.

시스템 프롬프트와 문서가 캐시 영역으로 표시되어 두 번째 호출부터 캐시 히트로 처리되는 다이어그램
반복되는 부분을 캐시로 표시하면 그 부분의 비용이 1/10. 자동화의 운영 경제학이 완전히 달라진다.

1. 왜 비용 90% 절감이 가능한가

LLM API 비용은 일반적으로 입력 토큰 + 출력 토큰의 합으로 청구됩니다. 마케팅 자동화에서는 입력 토큰이 비용의 80% 이상을 차지하는 경우가 흔합니다. 그 입력 토큰의 대부분은 매번 동일한 시스템 프롬프트·페르소나·브랜드 가이드·예시(few-shot)입니다.

호출 영역토큰 수매 호출마다 동일?캐시 가능?
시스템 프롬프트500동일가능
브랜드 페르소나300동일가능
제품 정보200동일가능
Few-shot 예시1500동일가능
사용자 입력50매번 다름불가
출력200매번 다름

총 입력 2550 토큰 중 캐시 가능 영역이 2500 (98%). 사용자 입력은 50 토큰뿐. caching이 적용되면 첫 호출은 그대로 비용이 들지만, 두 번째 호출부터 2500 토큰 영역이 캐시 히트로 처리되어 1/10 가격이 됩니다.

2. Anthropic·OpenAI의 caching 작동 원리

두 주요 제공사가 caching을 구현하는 방식은 비슷하지만 디테일이 다릅니다.

2-1. Anthropic Claude — 명시적 cache_control

Claude는 messages 안에 cache_control: {"type": "ephemeral"}을 명시적으로 박아 표시합니다. 캐시 경계를 직접 지정합니다.

  • 캐시 영역 표시: 메시지 또는 도구 정의 안에 cache_control 추가
  • 캐시 TTL: 5분(기본) 또는 1시간(프리미엄)
  • 캐시 히트 비용: 입력 토큰의 약 10%
  • 캐시 쓰기 비용: 입력 토큰의 약 125% (첫 호출에서 쓰는 비용)

직관: 첫 호출에서 약간 더 비싸게 캐시를 쓰고, 그 다음부터 1/10 가격으로 읽음. 5분 안에 5번만 같은 캐시를 써도 본전 회수.

2-2. OpenAI — 자동 prefix caching

OpenAI는 명시적 표시 없이 자동으로 prefix를 캐시합니다. 같은 시작 부분을 가진 요청이 들어오면 자동으로 hit.

  • 캐시 표시 불필요
  • 캐시 TTL: 5-10분
  • 캐시 히트 비용: 입력 토큰의 약 50%
  • 캐시 쓰기 비용: 추가 비용 없음

직관: 자동이라 편하지만 캐시 효율은 Claude보다 낮음(50% vs 10%). 대량 자동화에서는 Claude의 명시적 caching이 비용 측면 우위.

항목AnthropicOpenAI
표시 방법명시적 cache_control자동 prefix
캐시 히트 가격입력의 10%입력의 50%
캐시 쓰기 추가 비용125% (첫 호출)없음
캐시 TTL5분 / 1시간5-10분

3. 캐시 히트율을 높이는 프롬프트 구조 룰

caching은 prefix 매칭이라 프롬프트 구조가 중요합니다.

3-1. 변하지 않는 부분을 앞으로

시스템 프롬프트·페르소나·문서는 messages의 앞쪽에 고정. 사용자 입력은 항상 끝쪽. 같은 시작 부분을 공유하는 호출들이 캐시를 효율적으로 공유합니다.

좋은 구조나쁜 구조
[시스템] [페르소나] [문서] [사용자 입력][사용자 입력] [페르소나] [문서] [시스템]
[시스템] [예시1] [예시2] [사용자 입력][사용자 입력] [동적 컨텍스트] [예시]

prefix 한 토큰이 다르면 그 뒤로 캐시 미스. 변하지 않는 부분 앞쪽 배치는 단순하지만 가장 강력한 룰.

3-2. 동적 부분을 한 곳에 모으기

타임스탬프·세션 ID 같은 동적 값을 시스템 프롬프트에 흩뿌리지 마세요. 그 값들 때문에 시스템 프롬프트의 prefix 매칭이 깨집니다. 동적 값은 사용자 메시지 끝쪽으로 모으거나 별도 메타 헤더로 분리.

3-3. Few-shot 예시 순서 고정

같은 작업을 위한 few-shot 예시를 매번 다른 순서로 섞지 마세요. 같은 순서로 고정하면 그 부분이 캐시됩니다. 다양성을 위해 예시를 무작위로 섞고 싶으면 batch 단위로 같은 순서를 유지하고 batch가 끝날 때 새 순서로 갱신하는 패턴.

4. 마케팅 자동화의 캐시 ROI 계산

캐시가 비용에 어떻게 영향을 미치는지 구체적으로 보겠습니다.

4-1. 캐시 없을 때

  • 호출 1회: 입력 2500 토큰 × 0.0075
  • 1000회/일: $7.5/일
  • 한 달: $225

4-2. 캐시 있을 때 (Anthropic 기준)

  • 첫 호출: 2500 × 0.0094 (캐시 쓰기)
  • 두 번째 호출부터: 2500 × 0.00075 (캐시 히트)
  • 1000회/일: 0.00075) = $0.76/일
  • 한 달: $22.8

22.8, 약 90% 절감. 자동화 호출 수가 많을수록 절감 효과는 더 큼.

4-3. 손익분기 — 몇 번 호출하면 본전?

첫 호출의 추가 비용(0.0075 = 0.0075 - 0.00675)을 회수하려면 호출 0.3회면 충분. 사실상 즉시 본전. 5분 안에 두 번째 호출이 일어나기만 하면 무조건 이득.

일일 호출 수월 비용 (캐시 없음)월 비용 (캐시 있음)절감
100$22.5$2.688%
1000$225$22.890%
10000$2,250$22890%
100000$22,500$2,28090%

자동화 규모가 클수록 절감액이 크고 캐시 ROI가 폭발합니다.

5. 코드 한 묶음 — Anthropic cache_control

이게 글에 박는 유일한 코드입니다. Claude의 명시적 caching 패턴.

import anthropic
client = anthropic.Anthropic()
SYSTEM = "당신은 30대 워킹맘 타겟 유아용품 브랜드의 카피라이터..." # 500 토큰
PERSONA = "브랜드 톤: 안심·따뜻함·과장 금지..." # 300 토큰
EXAMPLES = "[예시1] ... [예시2] ..." # 1500 토큰
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=300,
system=[
{"type": "text", "text": SYSTEM},
{"type": "text", "text": PERSONA, "cache_control": {"type": "ephemeral"}},
],
messages=[
{"role": "user", "content": [
{"type": "text", "text": EXAMPLES,
"cache_control": {"type": "ephemeral"}},
{"type": "text", "text": "오늘의 카피 5개 만들어줘"},
]},
],
)
print(resp.usage)
# {'cache_creation_input_tokens': 0, 'cache_read_input_tokens': 1800,
# 'input_tokens': 50, 'output_tokens': 280}

cache_read_input_tokens가 1800 = 두 번째 호출부터 그 1800 토큰이 1/10 가격. input_tokens는 50(사용자 입력만). 비용 청구 절감이 그대로 보입니다.

6. 캐시가 깨지는 흔한 함정

6-1. 시스템 프롬프트에 동적 값 박힘

"오늘은 2026년 5월 9일입니다" 같은 날짜를 시스템 프롬프트에 박으면 매일 캐시 미스. 동적 값은 사용자 메시지로 분리.

6-2. 모델 버전 변경

claude-sonnet-4-5claude-sonnet-4-6으로 모델 변경 시 캐시 전체 무효화. 점진적 롤아웃하면서 비용 모니터링 필수.

6-3. 캐시 TTL 만료

5분 안에 다음 호출이 없으면 캐시 만료. 자동화 호출이 산발적으로 일어나면 캐시 효율이 떨어짐. batch 호출로 묶어서 5분 안에 몰아 부르면 캐시 활용률 폭증.

6-4. cache_control 위치 잘못

cache_control은 캐시 영역의 끝을 표시합니다. 그 표시 이후의 부분은 캐시되지 않음. 캐시하고 싶은 마지막 부분에 cache_control을 박아야 함.

7. Caching이 의미 없는 자리

caching은 만능이 아닙니다. 의미 없는 자리도 있습니다.

7-1. 매 호출이 완전히 다른 컨텍스트

사용자 질문마다 검색된 RAG 문서가 다르게 들어가는 챗봇. 시스템 프롬프트만 캐시 가능, RAG 문서는 매번 다르므로 캐시 미스.

7-2. 호출 빈도가 낮은 자리

5분 안에 호출이 한 번도 일어나지 않으면 캐시 만료. 일주일에 몇 번 부르는 도구는 caching 무용.

7-3. 시스템 프롬프트가 짧은 자리

전체 입력이 100 토큰 이하인 짧은 호출. caching 추가 비용을 회수할 만큼 절감액이 안 나옴.

자리caching 효과
카피 양산 자동화매우 큼
캠페인 분류 라벨링매우 큼
RAG 챗봇 (FAQ)시스템 프롬프트만
단발성 분석의미 없음
짧은 prompt 자동화의미 없음

8. 1시간 캐시(프리미엄) — 큰 자동화의 자리

Anthropic의 1시간 캐시는 가격이 더 비싸지만 TTL이 1시간으로 늘어납니다. 다음 자리에 적합합니다.

  • 일일 배치 자동화 (오전 한 번 시작해서 1시간 내 호출 완료)
  • 대형 문서를 base context로 두고 여러 질문 (예: 100쪽 보고서 분석)
  • 시즌 캠페인 배치 (한 시간 안에 100-1000개 캠페인 처리)

5분 캐시로는 만료될 자리에 1시간 캐시가 답이 됩니다. 추가 비용을 감안해 손익분기를 계산해야 하지만, 대부분의 batch 자동화에서는 이득.

9. 마치며 — caching은 자동화의 운영 조정실

prompt caching은 LLM 자동화의 운영 비용을 결정하는 가장 중요한 한 줄 설정입니다. 같은 페르소나·같은 가이드를 1000번 보내고 있다면, 그게 곧 1000번의 입력 비용이고, caching이 없으면 그 비용이 그대로 청구됩니다. cache_control 한 줄, 프롬프트 구조 룰 한 가지, batch 호출 한 가지 — 이 세 가지만 챙겨도 자동화 ROI가 완전히 달라집니다.

다음 분기에 한 번만 시도해 볼 만한 것은 가장 호출 수가 많은 LLM 자동화 한 자리에 caching을 적용해 일주일 비용을 비교하는 흐름입니다. 결과를 보고 나면 다른 자동화에도 자연스럽게 확장됩니다.

다음에 읽을 글

참고

AI·LLM 카테고리의 다른 글

전체 보기 →