AI 운영 경제학 (1/4) — 토큰 비용 구조와 실측 함정
"토큰 단가 × 사용량"으로 보면 단순하지만, 실제 청구서는 그 단순한 식과 매번 어긋난다. 어디서 어긋나는지가 운영의 출발점이다.
핵심 요약
- 토큰 비용 = (입력 × 입력 단가) + (출력 × 출력 단가) — 여기까지는 누구나 안다
- 실제로 어긋나는 5가지 함정: 캐시 쓰기 배수 / thinking 토큰 / 시스템 프롬프트 누출 / 도구 정의 비용 / multi-turn 누적
- 1차 자료: Anthropic / OpenAI 공식 가격·캐싱 docs, 자체 운영 측정값
- 청구서를 예측 가능하게 만드는 것이 모든 비용 절감의 전제 조건
1. 단순한 식과 실제의 괴리
LLM 비용을 한 줄로 적으면:
비용 = (입력 토큰 × 입력 단가) + (출력 토큰 × 출력 단가)
대부분의 비용 계산기는 여기까지만 보여 준다. 실제 운영하면 거의 항상 예측보다 더 든다. 차이는 다섯 군데에서 발생한다.
2. 함정 1 — 캐시 쓰기 배수
가장 자주 만나는 오해다. "캐시 적중하면 토큰 비용이 1/10이다"는 맞지만, 캐시 쓰기는 베이스보다 비싸다.
| 동작 | Anthropic 단가 배수 |
|---|---|
| 캐시 미스 (일반 입력) | 1.0× |
| 캐시 쓰기 (5분 TTL) | 1.25× |
| 캐시 쓰기 (1시간 TTL) | 2.0× |
| 캐시 적중 | 0.1× |
손익분기 계산: - 5분 캐시: 0.25× 추가 비용으로 → (1 − 0.1) = 0.9× 절감 가능. 2번 적중하면 본전. - 1시간 캐시: 1.0× 추가 비용으로 → 0.9× 절감. 약 2번 적중부터 이익이지만, 1.0× 추가 자체가 크기 때문에 적중률 검증 후 도입.
실측 함정: 캐시 쓰기 토큰을 베이스 입력과 같은 줄로 적어 두는 청구서 형식이 많아, 처음 보면 예상보다 입력 토큰이 많아 보인다. 사실은 1.25×~2× 배수가 적용된 것.
3. 함정 2 — Thinking 토큰
추론 모드(extended thinking, reasoning)는 모델이 답하기 전에 자기 자신에게 출력하는 토큰을 만든다. 이 토큰도 출력 단가가 청구된다.
- 사용자가 화면에서 보지 못하는 토큰이라도 청구서에는 잡힌다.
- 작업이 어려울수록 thinking 토큰이 지수적으로 늘어난다.
- 사용자가 thinking 옵션을 켰는지 모르는 채로 운영하면 청구서가 갑자기 부풀어 보인다.
측정 룰: API 응답에 usage.output_tokens와 usage.thinking_tokens가 분리되어 오는 경우, 후자를 따로 기록한다. 작업 종류별로 thinking이 정말 필요한지를 의사결정한다.
4. 함정 3 — 시스템 프롬프트 누출
같은 시스템 프롬프트를 모든 호출에 넣으면, 매 호출마다 그 토큰이 입력에 합산된다.
- 5K 토큰 시스템 프롬프트 + 100 호출/일 = 매일 50만 토큰의 베이스라인. 캐시되지 않으면 모두 풀 단가.
- 시스템 프롬프트가 길수록 작은 작업의 단가가 비대칭적으로 비싸진다. "분류 1건"이 시스템 프롬프트보다 100배 작은 작업이라면 비용의 99%는 시스템 프롬프트가 만든다.
완화: (a) 시스템 프롬프트 캐시. (b) 분류·요약 같은 작은 작업은 더 가벼운 시스템 프롬프트로 분리하거나 작은 모델로 라우팅.
5. 함정 4 — 도구 정의 비용
MCP 서버 / function calling을 쓰면 매 호출마다 도구 스키마가 입력에 들어간다. 도구가 많을수록 입력이 부풀어 오른다.
- 도구 50개 × 평균 100 토큰 = 매 호출당 5K 토큰의 고정 비용.
- 사용자는 그중 한두 개만 호출하지만, 모델이 전체 카탈로그를 봐야 무엇을 호출할지 결정한다.
- 캐시 적중이 가능하지만, 도구 카탈로그가 자주 바뀌면 캐시가 깨진다.
완화: 작업 종류별로 서브셋 카탈로그를 노출. 한 세션에서 불필요한 도구는 끄거나 별도 에이전트로 분리.
6. 함정 5 — Multi-turn 누적
대화형 / 에이전트형 호출은 매 턴마다 과거 메시지 전부를 다시 보낸다. 10턴 대화에서 첫 턴의 입력이 10번 청구된다.
- 캐시가 적중하지 않으면 N턴 대화의 입력 비용은 O(N²)로 증가한다.
- "왜 어제와 같은 작업인데 비용이 두 배지?"는 거의 항상 대화가 길어졌기 때문.
- 자동 압축(auto-compact)이 일어나면 압축 직전까지의 모든 토큰이 그날 비용에 잡힌 뒤 새 컨텍스트로 진입한다.
완화: 작업이 끝나면 새 세션. 길어지는 대화는 명시적으로 컨텍스트를 잘라 낸다.
7. 측정 — 어디서 보는가
Anthropic Console (Usage): 일·주·월별 토큰을 cache write / cache hit / regular input / output으로 분해해 준다. 가장 신뢰할 수 있는 단일 출처.
Claude Code /cost (CLI): 현재 세션의 토큰·비용 분해. 작업 끝나고 방금 한 일이 얼마였는지를 즉시 본다.
자체 라우터 로그: 멀티 프로바이더(라우팅)를 쓴다면 라우터에서 호출별 cost record를 남긴다. provider × model × task_type 단위로 일별 집계.
경험적 신호: - cache_hit_rate < 30% → 캐시 설정 재검토 (앞부분이 매번 바뀌고 있을 가능성). - thinking_token_share > 50% → thinking이 정말 필요한 작업인지 분류. - 작업당 평균 입력 > 평균 출력의 2배 → 시스템 프롬프트 / 도구 카탈로그 누출 의심.
8. 단위 경제학 — Task당 비용 분해
월별 총 비용은 의사결정에 도움이 안 된다. Task 단위로 나눠 본다.
| Task 종류 | 평균 입력 | 평균 출력 | 평균 비용 (Sonnet) | 비고 |
|---|---|---|---|---|
| 분류 / 라벨링 | 2K | 50 | 매우 낮음 | Haiku로 라우팅 권장 |
| 요약 (1K 글) | 5K | 300 | 낮음 | 시스템 프롬프트 캐시 후 더 낮음 |
| 코드 변경 (1 파일) | 15K | 1K | 中 | 캐시 적중 + 짧은 출력으로 30% 절감 |
| 멀티 에이전트 워크플로우 | 50K~ | 5K~ | 高 | 가장 큰 절감 여지 |
이 단위로 측정하면 어디에 캐싱·라우팅·짧은 출력을 적용할지가 보인다.
9. 한눈에 정리
| 함정 | 신호 | 1차 완화 |
|---|---|---|
| 캐시 쓰기 배수 | 입력 토큰이 예상보다 큼 | 적중률 측정 후 1시간 캐시 도입 결정 |
| Thinking 토큰 | 출력 토큰이 비대칭적으로 큼 | thinking 필요성 분류 |
| 시스템 프롬프트 누출 | 작은 작업의 단가가 큼 | 시스템 프롬프트 캐시 + 작업별 분리 |
| 도구 정의 비용 | 입력 baseline이 높음 | 서브셋 카탈로그 |
| Multi-turn 누적 | 같은 작업인데 N배 비용 | 세션 분리 + 컨텍스트 자르기 |
청구서가 예측 가능해진 다음 단계는 능동적 절감 — 시리즈 다음 편(2/4)의 모델 라우팅이다.
다음 편
다음 편(2/4)은 모델 라우팅 전략 — 비용·품질·지연 3축 의사결정이다. 단가 차이가 1/10인 모델 사이에서 어떤 작업을 어디로 보낼지를 결정하는 룰을 정리한다.
참고 자료
- Anthropic, Pricing — claude.com/pricing (2026-05-05 확인).
- Anthropic, Prompt Caching — docs.claude.com/en/docs/build-with-claude/prompt-caching (2026-05-05 확인).
- Anthropic, Extended Thinking — docs.claude.com/en/docs/build-with-claude/extended-thinking (2026-05-05 확인).
- OpenAI, Pricing — platform.openai.com/pricing (2026-05-05 확인).
이 글은 AI 운영 경제학 시리즈의 1/4 편입니다.
댓글
댓글 쓰기