LLM API 비용 최적화 실전 가이드: 90% 절감하는 6가지 방법
프롬프트 캐싱, 모델 라우팅, 배치 API, 컨텍스트 다이어트까지. 실제 측정 가능한 LLM 비용 절감 전략을 코드와 함께 정리했습니다.
AI 기능을 프로덕션에 올린 뒤 가장 먼저 마주하는 현실은 청구서입니다. 개발 중엔 몇 달러였던 API 비용이 사용자가 늘면 순식간에 수천 달러가 됩니다.
다행히 LLM 비용은 구조적으로 줄일 여지가 큽니다. 이 글에서는 실제로 효과가 검증된 6가지 방법을, 기대 절감폭과 함께 정리했습니다.
먼저: 어디서 돈이 새는지 측정하라
최적화 전에 측정이 먼저입니다. 대부분의 팀이 "비용이 많이 나온다"고만 알지, 어느 기능이 얼마를 쓰는지 모릅니다.
// 모든 LLM 호출에 메타데이터를 붙여 추적
const response = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages,
metadata: { user_id: userId },
});
// 토큰 사용량 기록
logUsage({
feature: "summarize", // 어떤 기능인지
inputTokens: response.usage.input_tokens,
outputTokens: response.usage.output_tokens,
cachedTokens: response.usage.cache_read_input_tokens ?? 0,
});
기능별로 비용을 나눠보면 대개 상위 2~3개 기능이 전체 비용의 80%를 차지합니다. 거기부터 손대면 됩니다.
1. 프롬프트 캐싱 — 가장 효과 큰 한 방
시스템 프롬프트, 문서, 예시처럼 매 요청마다 반복되는 긴 컨텍스트가 있다면 프롬프트 캐싱이 가장 확실한 절감 수단입니다. 캐시된 토큰은 일반 입력 토큰보다 훨씬 저렴하게 청구됩니다.
const response = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
system: [
{
type: "text",
text: LONG_SYSTEM_PROMPT + COMPANY_DOCS, // 반복되는 큰 덩어리
cache_control: { type: "ephemeral" }, // 여기까지 캐싱
},
],
messages, // 매번 바뀌는 부분은 캐시 경계 뒤에
});
핵심 원칙: 캐시는 프롬프트 앞부분부터 순서대로 적용됩니다. 따라서 고정된 내용을 앞에, 변하는 내용을 뒤에 배치해야 합니다. 순서가 뒤바뀌면 캐시가 전혀 히트하지 않습니다.
실전 팁: 캐시 히트율을 반드시 모니터링하세요.
cache_read_input_tokens가 0에 가깝다면
프롬프트 앞부분이 매 요청마다 미묘하게 바뀌고 있다는 뜻입니다
(타임스탬프, 랜덤 ID 등이 흔한 범인입니다).
2. 모델 라우팅 — 모든 작업에 최고 모델이 필요하진 않다
가장 흔한 낭비는 단순 작업에 최상위 모델을 쓰는 것입니다. 분류, 태깅, 짧은 요약 같은 작업은 작고 저렴한 모델로도 충분합니다.
function pickModel(task) {
switch (task.type) {
case "classify": // 단순 분류
case "extract": // 정형 추출
return "claude-haiku-4-5"; // 저렴·빠름
case "summarize":
case "chat":
return "claude-sonnet-5"; // 균형
case "complex_reasoning": // 복잡한 분석·코딩
return "claude-opus-4-8"; // 최고 성능
}
}
주의: 벤치마크만 보고 결정하지 말고, 자사 실제 태스크로 품질을 검증하세요. "작은 모델로 내려도 품질이 유지되는 지점"을 찾는 것이 핵심입니다. 정답 세트 50~100개만 만들어도 충분히 판단할 수 있습니다.
3. 배치 API — 급하지 않으면 절반 가격
실시간 응답이 필요 없는 작업이라면 배치 API를 쓰세요. 야간 처리, 대량 분류, 데이터 마이그레이션 같은 작업이 해당합니다. 일반적으로 동기 호출 대비 약 50% 저렴합니다.
- 적합: 리포트 생성, 대량 태깅, 임베딩 사전계산, 야간 배치
- 부적합: 채팅, 실시간 검색, 사용자 대기 화면
4. 컨텍스트 다이어트 — 안 보내면 안 낸다
가장 저렴한 토큰은 아예 보내지 않은 토큰입니다. 의외로 많은 팀이 필요 없는 데이터를 습관적으로 프롬프트에 넣습니다.
- 전체 대화 히스토리를 매번 전송 → 최근 N턴만, 그 이전은 요약으로 압축
- DB 레코드를 원시 JSON째로 첨부 → 필요한 필드만 추출
- 문서 전체를 첨부 → RAG로 관련 청크만 검색해 전달
- 장황한 few-shot 예시 → 꼭 필요한 2~3개로 줄이고 효과 측정
// 대화가 길어지면 오래된 부분을 요약으로 대체
function buildMessages(history) {
if (history.length <= 10) return history;
const summary = summarizeOldTurns(history.slice(0, -10)); // 1회만 요약해 캐싱
return [
{ role: "user", content: `[이전 대화 요약]\n${summary}` },
...history.slice(-10),
];
}
5. 출력 토큰 제어 — 출력이 입력보다 비싸다
대부분의 모델에서 출력 토큰 단가가 입력보다 몇 배 비쌉니다.
그런데 많은 팀이 max_tokens를 습관적으로 크게 잡아둡니다.
- 실제 필요한 만큼만
max_tokens설정 - 프롬프트에 "3문장 이내로 답하라"처럼 길이를 명시
- 정형 데이터가 필요하면 구조화 출력을 써서 장황한 설명 제거
"친절하게 설명해줘"라는 지시 하나가 출력 토큰을 3배로 늘릴 수 있다는 점을 기억하세요.
6. 캐시 가능한 요청은 앱 레벨에서도 캐싱
같은 질문이 반복된다면 LLM을 아예 호출하지 않는 것이 최선입니다. FAQ, 상품 설명 생성, 정적 콘텐츠 요약 등이 대상입니다.
const key = hash(prompt + model);
const cached = await redis.get(key);
if (cached) return cached; // LLM 호출 0원
const result = await callLLM(prompt);
await redis.set(key, result, { EX: 86400 }); // 24시간 캐싱
return result;
정리: 어디서부터 손댈까
| 방법 | 난이도 | 기대 효과 |
|---|---|---|
| 프롬프트 캐싱 | 낮음 | 매우 큼 (반복 컨텍스트가 클수록) |
| 앱 레벨 캐싱 | 낮음 | 큼 (중복 요청이 많다면) |
| 출력 토큰 제어 | 낮음 | 중간 |
| 컨텍스트 다이어트 | 중간 | 큼 |
| 모델 라우팅 | 중간 | 매우 큼 |
| 배치 API | 중간 | 큼 (비실시간 작업 한정) |
추천 순서: 측정 → 프롬프트 캐싱 → 앱 캐싱 → 모델 라우팅 → 컨텍스트 다이어트. 대부분의 팀은 앞의 세 가지만으로도 비용을 절반 이하로 줄입니다.
가장 중요한 원칙: 비용 최적화는 품질과의 트레이드오프입니다. 모델을 낮추거나 컨텍스트를 줄일 때는 반드시 품질 회귀 테스트를 함께 돌리세요. 돈을 아끼려다 제품을 망치는 것이 가장 비싼 실수입니다.
※ 모델별 정확한 단가와 기능 지원 여부는 각 제공사의 공식 가격 페이지를 확인하시기 바랍니다. 위 코드는 Anthropic API 기준 예시입니다.
참고 자료
- Anthropic Claude 공식 문서 — 프롬프트 캐싱, 배치 API, 모델별 가격 등 이 글의 코드 예시가 기반한 공식 레퍼런스
- OpenAI Platform 공식 문서 — OpenAI API 사용 팀을 위한 캐싱·배치·가격 관련 공식 문서 채널
- Anthropic 공식 뉴스룸 — 모델 출시·가격 변경 등 비용 구조에 영향을 주는 공지를 확인할 수 있는 채널
관련 스토리
MCP 서버 직접 만들기: Claude에 사내 도구 연결하는 실전 가이드
MCP(Model Context Protocol)로 사내 DB·API를 Claude에 연결하는 방법. TypeScript SDK로 서버 구축, 도구 정의, Claude Desktop 연동, 보안 주의사항까지 실전 코드로 정리.
AI를 활용한 코드 리뷰 자동화 가이드
GitHub Actions + GPT-5.5/Claude로 코드 리뷰 자동화. Python/TypeScript 구현, PR 자동 코멘트, 비용 최적화 전략까지.
Firebase Cloud Functions로 서버리스 백엔드 구축하기
서버리스 아키텍처 입문. Express 블로그 API, 인증 미들웨어, Firestore 트리거, 스케줄 함수, 이미지 최적화까지 완전 가이드.
Comments