API ์์ฒญ ์ ํ๋กฌํํธ์ ๋ฐ๋ณต๋๋ ์ ๋์ฌ(prefix)๋ฅผ ์บ์ฑํ์ฌ ์ฒ๋ฆฌ ์๊ฐ๊ณผ ๋น์ฉ์ ์ค์ด๋ ๊ธฐ๋ฅ. ๊ฐ์ ๋ด์ฉ์ ๋ฐ๋ณต ์ ์กํ ๋ ์ ์ฒด๋ฅผ ๋ค์ ์ฒ๋ฆฌํ์ง ์๊ณ ์บ์๋ ๋ถ๋ถ์ ์ฌ์ฌ์ฉํ๋ค.
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
- ๋น์ฉ ์ ๊ฐ: ์บ์ ํํธ ์ ํด๋น ํ ํฐ์ ๋น์ฉ์ด ๊ธฐ๋ณธ ์ ๋ ฅ ๋น์ฉ์ **10%**๋ก ์ค์ด๋ฆ (90% ์ ๊ฐ)
- ์๋ต ์๋ ํฅ์: ์บ์๋ ํ๋กฌํํธ๋ ์ฌ์ฒ๋ฆฌ๊ฐ ๋ถํ์ํ์ฌ time-to-first-token์ด ๊ฐ์ ๋จ
- ๋ฐ๋ณต ์์ ์ ์ต์ : system prompt, tool ์ ์, ๊ธด ๋ฌธ์ ์ปจํ ์คํธ ๋ฑ ๋งค ์์ฒญ๋ง๋ค ๋์ผํ ๋ด์ฉ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ์ ํจ๊ณผ์
AS-IS
sequenceDiagram autonumber participant Client as API Client participant API as Claude API Client->>API: ์์ฒญ 1: System(10๋ง ํ ํฐ) + User("Mars ์ค๋ช ํด์ค") Note over API: 10๋ง ํ ํฐ ์ ์ฒด ์ฒ๋ฆฌ API-->>Client: ์๋ต Client->>API: ์์ฒญ 2: System(10๋ง ํ ํฐ) + User("Jupiter ์ค๋ช ํด์ค") Note over API: 10๋ง ํ ํฐ ์ ์ฒด ๋ค์ ์ฒ๋ฆฌ API-->>Client: ์๋ต Note over Client,API: ๋งค ์์ฒญ๋ง๋ค ๋์ผํ System 10๋ง ํ ํฐ์<br/>๋ฐ๋ณต ์ฒ๋ฆฌ โ ๋น์ฉ + ์ง์ฐ์๊ฐ ๋ญ๋น
TO-BE
sequenceDiagram autonumber participant Client as API Client participant Cache as Prompt Cache participant API as Claude API Client->>API: ์์ฒญ 1: System(10๋ง ํ ํฐ, cache_control) + User("Mars ์ค๋ช ํด์ค") API->>Cache: System 10๋ง ํ ํฐ ์บ์ ์ ์ฅ (cache write) Note over API: ์ ์ฒด ์ฒ๋ฆฌ (์ต์ด 1ํ) API-->>Client: ์๋ต Client->>API: ์์ฒญ 2: System(10๋ง ํ ํฐ, cache_control) + User("Jupiter ์ค๋ช ํด์ค") API->>Cache: ์บ์ ํ์ธ โ ํํธ! Note over API: System 10๋ง ํ ํฐ์ ์บ์์์ ์ฝ๊ธฐ (10% ๋น์ฉ)<br/>User ๋ฉ์์ง๋ง ์๋ก ์ฒ๋ฆฌ API-->>Client: ์๋ต Note over Client,API: 10๋ง ํ ํฐ ร $3/MTok = $0.30 โ $0.03๋ก ์ ๊ฐ (Sonnet ๊ธฐ์ค)
๋์ ์๋ฆฌ
cache_controlํ๋ผ๋ฏธํฐ๊ฐ ํฌํจ๋ ์์ฒญ์ ๋ณด๋- ์์คํ ์ด ํด๋น ํ๋กฌํํธ ์ ๋์ฌ(prefix)๊ฐ ์ด๋ฏธ ์บ์์ ์๋์ง ํ์ธ
- ์บ์ ํํธ: ์บ์๋ ๋ฒ์ ์ ์ฌ์ฌ์ฉ โ ๋น์ฉ ์ ๊ฐ + ์๋ ํฅ์
- ์บ์ ๋ฏธ์ค: ์ ์ฒด ํ๋กฌํํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์๋ต ์์ ์ ์ ๋์ฌ๋ฅผ ์บ์์ ์ ์ฅ
์บ์๋ ์ ๋์ฌ ๊ธฐ๋ฐ์ด๋ค. tools โ system โ messages ์์๋ก ์ฒ์๋ถํฐ cache_control ์ง์ ๊น์ง์ ๋ชจ๋ ๋ด์ฉ์ด ์บ์ ๋จ์๊ฐ ๋๋ค.
๋น์ฉ ๊ตฌ์กฐ
| ๊ธฐ๋ณธ ์ ๋ ฅ | 5๋ถ ์บ์ Write | 1์๊ฐ ์บ์ Write | ์บ์ Hit (Read) | |
|---|---|---|---|---|
| ๋ฐฐ์จ | 1x | 1.25x | 2x | 0.1x |
| Sonnet ๊ธฐ์ค | $3/MTok | $3.75/MTok | $6/MTok | $0.30/MTok |
| Haiku ๊ธฐ์ค | $1/MTok | $1.25/MTok | $2/MTok | $0.10/MTok |
- ์ฒซ ์์ฒญ: cache write ๋น์ฉ ๋ฐ์ (๊ธฐ๋ณธ์ 1.25๋ฐฐ)
- ์ดํ ์์ฒญ: cache hit ์ ๊ธฐ๋ณธ์ 10% ๋น์ฉ๋ง ๋ฐ์
- ์บ์ ๊ฐฑ์ : ์บ์๋ ๋ด์ฉ์ ์ฌ์ฉํ ๋๋ง๋ค TTL์ด ๋ฌด๋ฃ๋ก ๊ฐฑ์ ๋จ
์บ์ ์๋ช (TTL)
| TTL | ๋น์ฉ | ์ฉ๋ |
|---|---|---|
| 5๋ถ (๊ธฐ๋ณธ) | 1.25x write | ๋น๋ฒํ ์์ฒญ (5๋ถ ์ด๋ด ๋ฐ๋ณต) |
| 1์๊ฐ | 2x write | ๊ฐํ์ ์์ฒญ (5๋ถ~1์๊ฐ ๊ฐ๊ฒฉ) |
์บ์๋ ์ฌ์ฉํ ๋๋ง๋ค ๋ฌด๋ฃ๋ก ๊ฐฑ์ ๋๋ค. 5๋ถ TTL ์บ์๋ฅผ 4๋ถ๋ง๋ค ์ฌ์ฉํ๋ฉด ์์ํ ์ ์ง.
2๊ฐ์ง ์บ์ฑ ๋ฐฉ๋ฒ
1. Automatic Caching (๊ถ์ฅ, ๊ฐ๋จ)
์์ฒญ body์ ์ต์์์ cache_control์ ์ถ๊ฐ. ์์คํ
์ด ๋ง์ง๋ง ์บ์ ๊ฐ๋ฅ ๋ธ๋ก์ ์๋์ผ๋ก breakpoint๋ฅผ ์ค์ ํ๋ค:
{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"cache_control": {"type": "ephemeral"},
"system": "You are a helpful assistant.",
"messages": [...]
}๋ฉํฐํด ๋ํ์์ ์บ์ ํฌ์ธํธ๊ฐ ์๋์ผ๋ก ์ด๋:
| ์์ฒญ | ์บ์ ๋์ |
|---|---|
| ์์ฒญ 1: System + User:A + Asst:B + User:C | ์ ์ฒด ์บ์ ์ ์ฅ |
| ์์ฒญ 2: โฆ + Asst:D + User:E | System~User:C๋ ์บ์ ์ฝ๊ธฐ, Asst:D+User:E๋ ์๋ก ์ ์ฅ |
| ์์ฒญ 3: โฆ + Asst:F + User:G | System~User:E๋ ์บ์ ์ฝ๊ธฐ, Asst:F+User:G๋ ์๋ก ์ ์ฅ |
2. Explicit Cache Breakpoints (์ธ๋ฐํ ์ ์ด)
๊ฐ๋ณ content block์ cache_control์ ์ง์ ๋ฐฐ์น. ์ต๋ 4๊ฐ breakpoint ์ฌ์ฉ ๊ฐ๋ฅ:
{
"tools": [
{"name": "search", "...", "cache_control": {"type": "ephemeral"}}
],
"system": [
{"type": "text", "text": "์ง์นจ...", "cache_control": {"type": "ephemeral"}},
{"type": "text", "text": "๋ฌธ์...", "cache_control": {"type": "ephemeral"}}
],
"messages": [
{"role": "user", "content": [
{"type": "text", "text": "์ง๋ฌธ", "cache_control": {"type": "ephemeral"}}
]}
]
}๋ณ๊ฒฝ ๋น๋๊ฐ ๋ค๋ฅธ ์น์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ์บ์ฑํ ๋ ์ ์ฉ:
- Breakpoint 1: Tool ์ ์ (๊ฑฐ์ ์ ๋ณํจ)
- Breakpoint 2: System ์ง์นจ (๊ฑฐ์ ์ ๋ณํจ)
- Breakpoint 3: RAG ๋ฌธ์ (๋งค์ผ ๋ณ๊ฒฝ)
- Breakpoint 4: ๋ํ ํ์คํ ๋ฆฌ (๋งค ํด ๋ณ๊ฒฝ)
์บ์ ๋ฌดํจํ ์กฐ๊ฑด
์บ์๋ tools โ system โ messages ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅธ๋ค. ์์ ๋ ๋ฒจ ๋ณ๊ฒฝ ์ ํ์ ๋ ๋ฒจ ์บ์๋ ๋ฌดํจํ๋๋ค:
| ๋ณ๊ฒฝ ์ฌํญ | Tools ์บ์ | System ์บ์ | Messages ์บ์ |
|---|---|---|---|
| Tool ์ ์ ๋ณ๊ฒฝ | ๋ฌดํจ | ๋ฌดํจ | ๋ฌดํจ |
| Web search ํ ๊ธ | ์ ์ง | ๋ฌดํจ | ๋ฌดํจ |
| Tool choice ๋ณ๊ฒฝ | ์ ์ง | ์ ์ง | ๋ฌดํจ |
| ์ด๋ฏธ์ง ์ถ๊ฐ/์ ๊ฑฐ | ์ ์ง | ์ ์ง | ๋ฌดํจ |
์ต์ ์บ์ ํ ํฐ ์
๋ชจ๋ธ๋ณ๋ก ์บ์ฑ ๊ฐ๋ฅํ ์ต์ ํ ํฐ ์๊ฐ ๋ค๋ฅด๋ค. ์ด๋ณด๋ค ์งง์ผ๋ฉด cache_control์ ์ค์ ํด๋ ์บ์ฑ๋์ง ์๋๋ค:
| ๋ชจ๋ธ | ์ต์ ํ ํฐ |
|---|---|
| Claude Opus 4.6 / 4.5 | 4,096 |
| Claude Sonnet 4.6 / 4.5 / 4.1 / 4 | 1,024 |
| Claude Haiku 4.5 | 4,096 |
| Claude Haiku 3.5 / 3 | 2,048 |
Claude Code์์์ Prompt Caching
Claude Code๋ ๋ชจ๋ ๋ฐฐํฌ ์ต์ (Anthropic ์ง์ , Bedrock, Vertex AI, Foundry)์์ Prompt Caching์ด ๊ธฐ๋ณธ ํ์ฑํ๋์ด ์๋ค.
- ๋ณ๋ ์ค์ ๋ถํ์ (๊ธฐ๋ณธ ํ์ฑํ)
- ๋นํ์ฑํ๊ฐ ํ์ํ ๊ฒฝ์ฐ:
export DISABLE_PROMPT_CACHING=1 - ์ผ๋ถ ๋ฆฌ์ ์์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ์ ์์