(1/3) LLM API 비용 추적 — Claude·OpenAI·Gemini·Upstage 과금 구조와 usage 필드
- 과금 구조와 usage 필드 — 4사 가격표 한눈에 ← 지금 글
- 파이썬으로 4사 통합 비용 트래커 만들기
- 공식 비용 API 대사와 예산 알림 자동화
Summary
요즘 프로젝트 하나에 LLM API 를 하나만 쓰는 경우가 거의 없어요. 저도 코드 작업은 Claude, 가벼운 분류는 OpenAI 의 nano 모델, 대량 배치는 Gemini Flash, 문서 파싱은 Upstage Document Parse — 이렇게 섞어 쓰다 보니 어느 날 문득 “이번 달 LLM 에 총 얼마 썼지?”라는 질문에 바로 답을 못 하는 상태가 됐습니다. 청구서가 네 곳에 흩어져 있고, 단가 체계도 제각각이거든요.
이 3부작은 그 질문에 답하는 시스템을 만드는 과정이에요. 1편은 기초 체력인 과금 구조부터 잡습니다. 각 사가 무엇에 얼마를 물리는지, 그리고 매 호출 응답에 들어있는 usage 필드를 어떻게 읽는지 알아야 2편의 통합 트래커를 만들 수 있어요.
💡 이 글에서 다루는 것
- 토큰 과금의 3요소 — 입력 · 출력 · 캐시, 그리고 왜 출력이 5~6배 비싼지
- 2026년 7월 기준 4사 가격표 ($/1M 토큰)
- 캐시 할인 · 배치 할인 — 같은 모델도 절반 가격에 쓰는 법
- 프로바이더별 usage 필드 읽는 법 (필드명이 다 달라요)
- 비용 계산할 때 자주 밟는 함정 5가지
1. 토큰 과금의 3요소 — 입력, 출력, 캐시
네 회사 모두 과금의 기본 단위는 토큰이고, 크게 세 가지 미터가 돌아갑니다.
| 미터 | 언제 카운트되나 | 단가 수준 |
|---|---|---|
| 입력(input) | 프롬프트 전체 — 시스템 프롬프트, 대화 이력, 도구 정의 포함 | 기준 |
| 출력(output) | 모델이 생성한 모든 토큰 — thinking/추론 토큰 포함 | 입력의 5~6배 |
| 캐시(cached input) | 이전 요청과 겹치는 프롬프트 앞부분을 재사용 | 입력의 약 1/10 |
여기서 두 가지가 실전 비용을 좌우해요.
첫째, 출력 토큰이 압도적으로 비쌉니다. 4사 공통으로 출력 단가가 입력의 4~6배예요. 그래서 “프롬프트를 줄이자”보다 “출력을 짧게 받자”(max_tokens 상한, 간결한 응답 지시)가 절감 효과가 큰 경우가 많습니다.
둘째, 추론(thinking) 토큰도 출력으로 과금됩니다. Claude 의 adaptive thinking, OpenAI 의 reasoning, Gemini 의 thinking 모두 사용자에게 최종 답변으로 안 보여도 출력 토큰으로 청구돼요. 추론 강도를 올리면 답변 길이는 그대로인데 비용이 몇 배로 뛸 수 있는 이유입니다.
대화형 애플리케이션이라면 한 가지 더 — API 는 상태가 없어서 매 턴마다 대화 이력 전체를 다시 입력으로 보냅니다. 10턴째 대화의 입력 토큰은 1턴째의 10배 가까이 되고, 이걸 완화해주는 게 다음에 볼 캐시예요.
2. 2026년 7월 기준 4사 가격표
각 사 대표 모델의 1M(백만) 토큰당 미국 달러 가격이에요. 가격은 수시로 바뀌니 결제 전엔 공식 가격 페이지를 꼭 확인하세요.
Anthropic (Claude)
| 모델 | 입력 | 출력 |
|---|---|---|
| Claude Fable 5 | $10.00 | $50.00 |
| Claude Opus 4.8 | $5.00 | $25.00 |
| Claude Sonnet 4.6 | $3.00 | $15.00 |
| Claude Haiku 4.5 | $1.00 | $5.00 |
캐시는 읽기 0.1배 / 쓰기 1.25배(5분 TTL, 1시간 TTL 은 2배), 배치 API 는 50% 할인이에요. 최신 가격은 Anthropic 가격 페이지에서 확인할 수 있습니다.
OpenAI
| 모델 | 입력 | 캐시 입력 | 출력 |
|---|---|---|---|
| gpt-5.5 | $5.00 | $0.50 | $30.00 |
| gpt-5.4 | $2.50 | $0.25 | $15.00 |
| gpt-5.4-mini | $0.75 | $0.075 | $4.50 |
| gpt-5.4-nano | $0.20 | $0.02 | $1.25 |
Batch / Flex 처리는 50% 할인, Priority 처리는 2.5배 할증이에요. 최신 가격은 OpenAI 가격 페이지에서 확인하세요.
Google (Gemini)
| 모델 | 입력 | 출력 |
|---|---|---|
| Gemini 3.5 Flash | $1.50 | $9.00 |
| Gemini 3.1 Pro Preview | $2.00~$4.00 | $12.00~$18.00 |
| Gemini 2.5 Flash | $0.30 | $2.50 |
| Gemini 2.5 Flash-Lite | $0.10 | $0.40 |
Gemini 3.1 Pro 는 프롬프트가 20만 토큰을 넘으면 상위 단가 구간이 적용되는 이단 요금제예요. 무료 티어도 있는데, 무료 구간의 데이터는 제품 개선(학습)에 활용될 수 있다는 조건이 붙습니다. 업무 데이터라면 유료 티어를 쓰세요. 최신 가격은 Gemini API 가격 페이지에서 확인할 수 있어요.
Upstage (Solar)
| 상품 | 단가 |
|---|---|
| Solar Pro 3 / Pro 2 | 입력 $0.15 · 출력 $0.60 |
| Solar Pro 캐시 입력 | $0.015 |
| Embed | $0.10 |
| Document Parse | $0.01~$0.03 /페이지 |
| Document OCR | $0.0015 /페이지 |
| Information Extract | $0.04~$0.06 /페이지 |
Upstage 는 LLM(토큰 과금)과 Document AI(페이지 과금)가 섞여 있는 게 특징이에요. 문서 파이프라인 비용은 토큰이 아니라 페이지 수로 계산해야 합니다. 표기 가격은 VAT 별도예요. 최신 가격은 Upstage 가격 페이지에서 확인하세요.
✅ 단가 감각 하나만 챙겨가세요 — 같은 “한 번의 호출”이라도 Fable 5 와 Solar Pro 3 은 입력 기준 약 67배 차이가 납니다. 모델 선택이 곧 비용 설계예요.
3. 응답에서 토큰 읽기 — 프로바이더별 usage 필드
비용 추적의 원천 데이터는 매 호출 응답에 들어있는 사용량 필드예요. 문제는 네 회사가 필드명을 다 다르게 씁니다. 하나씩 실제로 찍어볼게요.
Anthropic — response.usage
import anthropic
client = anthropic.Anthropic() # ANTHROPIC_API_KEY 환경변수 사용
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[{"role": "user", "content": "토큰 과금을 한 문장으로 설명해줘."}],
)
print(response.usage)
Usage(input_tokens=23, output_tokens=61,
cache_creation_input_tokens=0, cache_read_input_tokens=0)
캐시 관련 토큰이 cache_creation_input_tokens(쓰기) 와 cache_read_input_tokens(읽기) 로 분리돼 있어요. 전체 프롬프트 크기 = 세 입력 필드의 합이라는 점을 기억해두세요. input_tokens 만 보면 캐시된 부분이 빠져서 실제보다 훨씬 작아 보입니다.
OpenAI — response.usage
from openai import OpenAI
client = OpenAI() # OPENAI_API_KEY 환경변수 사용
response = client.responses.create(
model="gpt-5.4-mini",
input="토큰 과금을 한 문장으로 설명해줘.",
)
print(response.usage)
ResponseUsage(input_tokens=18, output_tokens=54, total_tokens=72,
input_tokens_details=InputTokensDetails(cached_tokens=0))
Responses API 는 input_tokens / output_tokens, 예전 Chat Completions API 는 prompt_tokens / completion_tokens 라는 이름을 써요. 같은 회사인데 API 세대에 따라 필드명이 달라서, 2편에서 정규화 계층을 만들 때 둘 다 처리합니다. 캐시 히트는 input_tokens_details.cached_tokens 에 찍혀요.
Google — usage_metadata
from google import genai
client = genai.Client() # GEMINI_API_KEY 환경변수 사용
response = client.models.generate_content(
model="gemini-2.5-flash",
contents="토큰 과금을 한 문장으로 설명해줘.",
)
print(response.usage_metadata)
prompt_token_count: 12
candidates_token_count: 48
thoughts_token_count: 85
total_token_count: 145
Gemini 는 usage 가 아니라 usage_metadata 이고, 입력이 prompt_token_count, 출력이 candidates_token_count 예요. 눈에 띄는 건 thoughts_token_count — thinking 토큰이 별도 필드로 나오는데, 과금은 출력 단가로 됩니다. 위 예시라면 출력 과금 대상은 48 이 아니라 48 + 85 = 133 토큰이에요. 이걸 빼먹으면 Gemini 비용이 실제의 절반 이하로 집계되는 사고가 납니다.
Upstage — OpenAI 호환 usage
from openai import OpenAI
client = OpenAI(
api_key="<UPSTAGE_API_KEY>",
base_url="https://api.upstage.ai/v1",
)
response = client.chat.completions.create(
model="solar-pro3",
messages=[{"role": "user", "content": "토큰 과금을 한 문장으로 설명해줘."}],
)
print(response.usage)
CompletionUsage(prompt_tokens=21, completion_tokens=47, total_tokens=68)
Upstage 는 OpenAI 호환 API 라서 SDK 도 OpenAI 것을 그대로 쓰고, 필드도 Chat Completions 스타일(prompt_tokens / completion_tokens)이에요. 덕분에 통합 트래커 입장에선 “OpenAI 구형 스키마와 동일” 하게 취급하면 됩니다.
4. 네 가지 스키마, 한눈에 비교
2편에서 코드로 합치기 전에 표로 정리해두면 이렇습니다.
| 항목 | Anthropic | OpenAI (Responses) | Gemini | Upstage |
|---|---|---|---|---|
| 위치 | usage |
usage |
usage_metadata |
usage |
| 입력 | input_tokens |
input_tokens |
prompt_token_count |
prompt_tokens |
| 출력 | output_tokens |
output_tokens |
candidates_token_count |
completion_tokens |
| 캐시 읽기 | cache_read_input_tokens |
input_tokens_details.cached_tokens |
cached_content_token_count |
응답에 없음 |
| thinking | 출력에 포함 | 출력에 포함 | thoughts_token_count 별도 |
출력에 포함 |
같은 개념인데 이름이 네 벌이죠. 그래서 “프로바이더별 usage → 공통 스키마” 변환 함수가 통합 트래커의 첫 부품이 됩니다.
5. 비용 계산할 때 자주 밟는 함정
제가 직접 밟았거나 밟을 뻔했던 것들이에요.
⚠️ 함정 체크리스트
- 단위 혼동 — 가격표는 1M(백만) 토큰 기준인데 1K 기준으로 계산해서 1,000배 틀리는 실수. 계산식에 단위를 상수로 박아두세요.
- thinking 토큰 누락 — Gemini 는
thoughts_token_count를 출력에 더해야 하고, Claude·OpenAI 는 이미 출력에 포함돼 있어요. 이중가산도, 누락도 조심.- 캐시 토큰을 일반 입력 단가로 계산 — 캐시 읽기는 약 1/10 가격이에요. 캐시를 많이 쓰는 워크로드는 이걸 반영 안 하면 비용이 크게 과대집계됩니다. 반대로 캐시 쓰기(Anthropic 1.25배)는 할증이에요.
- 컨텍스트 구간별 단가 — Gemini 3.1 Pro 는 프롬프트 20만 토큰 초과분부터 단가가 올라가요. 장문 처리 파이프라인은 구간을 나눠 계산해야 합니다.
- 토큰이 아닌 과금 항목 — Upstage Document AI 는 페이지당, 웹 검색 같은 서버 도구는 호출당 과금이에요. usage 필드만 집계하면 이 비용이 통째로 빠집니다.
이 함정들 때문에라도 “응답 usage 로 계산한 값은 추정치“라는 감각이 중요해요. 정확한 금액은 각 사가 집계해주는 공식 비용 API·콘솔과 대사해야 하는데, 그건 3편에서 다룹니다.
6. 정리
- 과금 미터는 입력 · 출력 · 캐시 세 개, 출력이 입력의 5~6배
- thinking/추론 토큰도 출력 단가로 과금
- 4사 가격표 — Fable 5 $10/$50 부터 Solar Pro 3 $0.15/$0.60 까지 스펙트럼이 넓음
- usage 필드명은 4사 4색 — Anthropic
input_tokens, Geminiprompt_token_count, Upstage 는 OpenAI 호환 - Gemini 의
thoughts_token_count는 출력에 더해서 계산 - 응답 기반 계산은 추정치 — 공식 청구 데이터와 대사 필요
일단 오늘은 여기까지….. 다음 글에서는 이 네 가지 usage 스키마를 공통 스키마로 정규화하고, SQLite 에 쌓아서 일별 리포트까지 뽑는 파이썬 통합 비용 트래커를 만들어볼게요.