💸 클로드 토큰, 이렇게 하면 60% 줄일 수 있습니다 — API 비용 최적화 완전 가이드
by gasbugs2026. 3. 31.
매달 청구서를 보고 눈이 번쩍 뜨인다면, 당신은 혼자가 아닙니다. 토큰 낭비는 모두의 문제입니다.
🎯 이 글에서 다루는 것
토큰이 정확히 어떻게 과금되는지 (인풋 vs 아웃풋의 차이)
프롬프트 캐싱(Prompt Caching)으로 비용 90%까지 줄이는 방법
모델 선택 전략 — Haiku vs Sonnet vs Opus 언제 쓸까
claude.ai 일반 사용자도 적용할 수 있는 실용 팁
API 개발자를 위한 코드 레벨 최적화 기법
📌 들어가며 — 왜 토큰 최적화가 중요한가
Claude API를 처음 쓰다 보면 이런 상황을 겪게 됩니다. 처음엔 괜찮았는데, 어느 순간 월 청구서가 예상보다 훨씬 크게 나옵니다.
원인을 추적해보면 대부분 패턴이 비슷합니다. 매 요청마다 같은 시스템 프롬프트를 반복 전송하거나, 대화가 길어질수록 이전 히스토리 전체를 재처리하거나, 간단한 작업에 비싼 Opus 모델을 쓰는 식이죠.
한 개발자의 실제 사례를 보면, 처음에 1,000토큰이었던 세션이 5번의 메시지 교환만으로 15,000토큰 이상으로 불어났습니다. 대화를 할 때마다 Claude는 새 질문만 처리하는 것이 아니라 이전 프롬프트, 이전 응답, 코드 스니펫, 맥락 정보 전부를 재처리하기 때문입니다. BSWEN
이 글에서는 이 문제를 체계적으로 해결하는 방법을 다룹니다.
🔍 토큰 비용 구조 먼저 이해하기
인풋 vs 아웃풋 — 어느 쪽이 더 비쌀까?
토큰 최적화에서 가장 먼저 알아야 할 핵심 사실이 있습니다.
아웃풋 토큰은 인풋 토큰 대비 5배 비쌉니다. Sonnet 4 기준으로, 불필요한 응답 500토큰은 낭비된 인풋 토큰 2,500개와 비용이 같습니다. 출력 길이를 최적화하는 것이 인풋을 줄이는 것보다 훨씬 큰 절감 효과를 냅니다. SitePoint
즉, "짧게 대답해줘" 한 마디가 생각보다 훨씬 강력한 비용 절감 방법입니다.
토큰 과금 구조 한눈에 보기
구분
설명
과금 단위
일반 인풋
매 요청마다 새로 처리
표준가
캐시 쓰기
캐시에 저장할 때
표준가 × 1.25 (5분)
캐시 읽기
캐시에서 불러올 때
표준가 × 0.1 (90% 절감!)
아웃풋
생성된 응답
표준가 × 5
💡 핵심 기법 1 — 프롬프트 캐싱 (Prompt Caching)
개념: "같은 내용을 왜 매번 다시 읽나요?"
프롬프트 캐싱의 개념은 단순합니다. 고정된 내용(시스템 프롬프트, 문서, 도구 정의 등)은 한 번만 처리하고, 이후 요청에서는 캐시된 결과를 재활용하는 방식입니다.
예를 들어, 하루에 수백 명의 사용자가 동일한 문서에 대해 질문을 던지는 시스템을 운영한다면, 매번 동일한 문서를 재처리하지 않고 캐시를 유지함으로써 입력 토큰 비용의 90%까지 절감할 수 있습니다. Brunch
API에서 캐싱 적용하는 법
import anthropic
client = anthropic.Anthropic()
# 시스템 프롬프트에 cache_control 추가
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[
{
"type": "text",
"text": "당신은 AWS 클라우드 전문가입니다. 아래는 프로젝트 문서입니다...\n\n[수천 토큰의 고정 문서]",
# 👇 이 한 줄이 핵심!
"cache_control": {"type": "ephemeral"}
}
],
messages=[
{"role": "user", "content": "EC2 비용 최적화 방법을 알려주세요"}
]
)
# 사용량 확인
print(f"캐시 읽기 토큰: {response.usage.cache_read_input_tokens}")
print(f"캐시 쓰기 토큰: {response.usage.cache_creation_input_tokens}")
캐시 TTL (유효시간) 전략
Anthropic의 캐시는 기본적으로 비활성 5분 후 만료됩니다. 단, 캐시가 히트될 때마다 타이머가 리셋됩니다. 따라서 매 1~2분마다 메시지를 주고받는 활발한 코딩 세션에서는 캐시가 계속 유지됩니다. 반대로 5분 이상 입력이 없으면 캐시가 소멸되며, 다음 요청은 콜드 스타트(캐시 쓰기)가 됩니다. Claude Code Camp
⚠️ 주의: 1시간 캐시는 쓰기 비용이 표준가의 2배입니다. 요청이 충분히 많은 경우에만 경제적입니다.
💡 핵심 기법 2 — 모델 선택 전략
모든 작업에 Opus를 쓰면 망합니다
일반적으로 80%의 작업에는 Sonnet으로 시작하고, 복잡한 아키텍처 결정이나 심층 분석이 필요할 때만 Opus로 전환하는 것이 권장됩니다. Claude Fast
모델
적합한 작업
상대적 비용
Haiku
분류, 간단한 Q&A, 키워드 추출
최저
Sonnet
코딩, 분석, 일반 작업 (대부분)
중간
Opus
복잡한 추론, 전략 수립
최고
실제 라우팅 패턴 예시
def route_request(task_type: str, complexity: str) -> str:
"""작업 복잡도에 따라 모델 자동 선택"""
if task_type in ["classification", "simple_qa", "keyword_extraction"]:
return "claude-haiku-4-5-20251001" # 최저 비용
elif complexity == "high" or task_type in ["architecture", "deep_analysis"]:
return "claude-opus-4-6" # 고품질 필요 시
else:
return "claude-sonnet-4-6" # 기본값 (80% 케이스)
# 사용 예시
model = route_request(task_type="code_review", complexity="medium")
# → "claude-sonnet-4-6" 반환
```
---
## 💡 핵심 기법 3 — 출력 길이 제어
아웃풋 토큰이 5배 비싸다는 사실을 기억하시죠? 그래서 **응답 길이를 제어하는 것**이 비용 절감에 가장 직접적인 효과를 냅니다.
### ❌ 토큰 낭비형 프롬프트
```
"EC2 비용 최적화 방법을 알려주세요"
```
→ Claude가 장황한 설명, 배경 지식, 예시, 부연 설명을 모두 포함해 응답
### ✅ 토큰 절약형 프롬프트
```
"EC2 비용 최적화 방법을 3가지만, 각 50자 이내로 간결하게 알려주세요"
→ 딱 필요한 내용만 전달
명시적 길이 제약을 프롬프트에 추가하는 것만으로 토큰 사용량을 40%까지 줄였다는 사례도 있습니다. 핵심 원칙은 "Claude에게 뭘 원하는지 탐색하게 하지 말고, 원하는 것을 명확히 지정하라"는 것입니다. BSWEN
응답 형식 지정 팁
# 나쁜 예시
messages=[{"role": "user", "content": "이 코드 리뷰해줘"}]
# 좋은 예시
messages=[{
"role": "user",
"content": """다음 코드를 리뷰해주세요.
형식: JSON으로만 응답
{"issues": [...], "improvements": [...]}
각 항목은 한 줄 이내로 작성"""
}]
💡 핵심 기법 4 — 컨텍스트 관리
대화가 길어질수록 비용이 선형으로 증가합니다
컨텍스트 누적이 토큰 소비의 주요 원인이며, 관리하지 않으면 200K 토큰 컨텍스트 창이 점점 채워지게 됩니다. DeepWiki
관련 없는 작업은 무조건 새 대화로
# Claude Code에서
/clear # 현재 세션 초기화
/compact # 대화 요약으로 컨텍스트 압축 (~50% 절감)
/cost # 현재 토큰 사용량 확인
파일은 필요한 부분만 붙여넣기
# ❌ 500줄 전체 파일 붙여넣기
with open("app.py") as f:
code = f.read() # 500줄 = ~3,000 토큰 낭비
# ✅ 필요한 함수만 추출
# "calculate_cost 함수(라인 42-67)의 버그를 수정해주세요"
💡 핵심 기법 5 — Token-Efficient Tool Use (API 고급)
API를 직접 사용하는 개발자라면 이 기능이 특히 유용합니다.
Token-Efficient Tool Use 는 현재 Claude Sonnet 4.6과 Opus 4.6에서 사용 가능하며, 베타 헤더 token-efficient-tools-2025-02-19 를 추가하는 것만으로 즉시 적용됩니다. 에이전트 애플리케이션에서 이 최적화들을 조합하면 월 API 비용을 60~80% 줄일 수 있습니다. Claude Lab
# Token-Efficient Tool Use 활성화
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: token-efficient-tools-2025-02-19" \ # 이 한 줄!
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 1000,
"tools": [...],
"messages": [...]
}'
💡 핵심 기법 6 — Batch API 활용
급하지 않은 대량 작업은 Batch API를 사용하면 50% 할인이 적용됩니다.
import anthropic
client = anthropic.Anthropic()
# 대량 요청을 배치로 처리
batch_requests = [
{
"custom_id": f"request-{i}",
"params": {
"model": "claude-haiku-4-5-20251001",
"max_tokens": 100,
"messages": [{"role": "user", "content": f"텍스트 {i} 분류해줘"}]
}
}
for i in range(100)
]
# 배치 생성 (24시간 내 처리, 50% 할인)
batch = client.messages.batches.create(requests=batch_requests)
print(f"배치 ID: {batch.id}")
⚠️ 흔한 실수 & 주의사항
캐시를 깨뜨리는 행동들:
MCP 도구 추가, 시스템 프롬프트에 타임스탬프 삽입, 세션 중간에 모델 전환 — 이런 행동들은 전체 캐시를 무효화해 해당 요청의 비용을 5배 이상으로 만들 수 있습니다. Claude Code Camp
# ❌ 캐시 파괴 패턴
system_prompt = f"현재 시각: {datetime.now()}\n당신은 전문가입니다..."
# 매 요청마다 시간이 달라지므로 캐시 미스 발생
# ✅ 올바른 패턴
system_prompt = "당신은 전문가입니다..."
# 고정된 내용만 캐시 적용
MCP 서버 관리:
불필요한 MCP 서버는 비활성화하세요. 활성화된 MCP 서버마다 도구 정의가 시스템 프롬프트에 추가되어 컨텍스트 창을 소비합니다. ClaudeLog
✅ 정리 — 비용 절감 우선순위
실제 적용 순서로 정리하면 이렇습니다:
우선순위
기법
예상 절감
1순위
프롬프트 캐싱 적용
최대 90%
2순위
출력 길이 명시적 제한
30~40%
3순위
모델 라우팅 (Haiku/Sonnet/Opus)
40~70%
4순위
관련 없는 작업마다 새 대화 시작
20~30%
5순위
Batch API (급하지 않은 대량 작업)
50%
6순위
Token-Efficient Tool Use 헤더
추가 10~20%
이 중 프롬프트 캐싱 + 모델 라우팅만 제대로 적용해도 대부분의 케이스에서 비용을 절반 이하로 줄일 수 있습니다.
다음 단계로는 Anthropic 공식 Prompt Engineering 가이드와 Claude Code의 /compact, /cost 명령어 활용을 추천드립니다.