← posts/b.log()

blog92@web:~$ cat posts/ai-04-tokens-and-pricing.md

AI6 min read

AI 완전 정복 4편 — 토큰의 모든 것: 쓰임과 과금

비용은 "내가 보낸 토큰(입력) + 모델이 만든 토큰(출력)"으로 매겨지고, 출력이 입력보다 5배 비싸다. 대화형 도구는 매 턴마다 이전 대화 전체를 다시 보내므로, 대화가 길어질수록 비용은 가파르게 늘고, 프롬프트 캐싱이 그 비용을 크게 줄인다.

한 줄 요약: 비용은 "내가 보낸 토큰(입력) + 모델이 만든 토큰(출력)"으로 매겨지고, 출력이 입력보다 5배 비싸다. 대화형 도구는 매 턴마다 이전 대화 전체를 다시 보내므로, 대화가 길어질수록 비용은 가파르게 늘고, 프롬프트 캐싱이 그 비용을 크게 줄인다.

토큰이란 무엇인가

토큰은 모델이 텍스트를 처리하는 최소 단위입니다. 단어 하나일 수도, 단어 조각일 수도, 공백이나 기호 하나일 수도 있습니다. 대부분의 모델은 BPE(Byte Pair Encoding) 계열의 방식으로 토큰 사전을 만듭니다.

  1. 처음에는 바이트(글자) 하나하나를 토큰으로 시작한다.
  2. 학습 데이터에서 가장 자주 붙어 나오는 두 토큰을 하나로 합친다.
  3. 사전 크기(수만~수십만)에 도달할 때까지 반복한다.

그 결과 자주 쓰이는 문자열은 토큰 하나가 되고, 드문 문자열은 여러 조각으로 쪼개집니다. function, return, const처럼 코드에 흔한 키워드는 보통 토큰 하나이고, UserOrderHistoryExportService 같은 긴 사내 식별자는 여러 개로 쪼개집니다.

알아두면 쓸모 있는 토큰 감각

  • 영어: 대략 4글자 ≈ 1토큰, 단어 100개 ≈ 130토큰 정도가 오래된 경험칙입니다.
  • 한국어: 같은 내용을 영어보다 더 많은 토큰으로 표현하는 경우가 많습니다. 학습 데이터에서 영어가 훨씬 많아 영어 문자열이 더 크게 묶였기 때문입니다. 정확한 비율은 모델마다 다르니 아래 실습처럼 직접 세어 보는 것이 가장 정확합니다.
  • 코드: 들여쓰기 공백, 줄바꿈, 괄호도 모두 토큰입니다. minified JSON보다 pretty-print된 JSON이 더 많은 토큰을 씁니다.
  • 모델마다 토크나이저가 다르다: Anthropic 문서에 따르면 Claude 4.7 이후 모델은 새 토크나이저를 쓰며, 같은 텍스트에서 이전 모델보다 약 30% 더 많은 토큰이 나옵니다. 모델을 바꾸면 같은 프롬프트도 토큰 수가 달라집니다.

무엇이 입력 토큰인가: 보이지 않는 것까지

채팅창에 한 줄을 입력해도, 모델에 들어가는 입력은 훨씬 큽니다. 한 번의 요청에는 보통 다음이 모두 들어갑니다.

구성 요소설명규모 감
시스템 프롬프트도구가 미리 넣는 지시문, 규칙 파일(CLAUDE.md 등)수천~수만
도구 정의에이전트가 쓸 수 있는 도구의 이름·설명·스키마도구당 수백~수천
대화 기록이전의 모든 질문과 답변턴마다 누적
도구 실행 결과읽은 파일 내용, 터미널 출력, 검색 결과파일 하나에 수천~수만
이번 질문사용자가 방금 입력한 내용보통 가장 작음

가장 중요한 사실은 이것입니다. API는 상태가 없습니다(stateless). 모델은 이전 턴을 기억하지 못하므로, 10번째 턴에서는 1~9번째 턴의 내용을 통째로 다시 보냅니다. 대화가 길어질수록 턴 하나의 비용이 커지는 이유입니다.

요금은 어떻게 매겨지나

요금은 백만 토큰(MTok)당 달러로 표시합니다. 아래는 Anthropic 공식 가격표 기준 2026년 10월 현재 주요 모델의 가격입니다.

모델입력 ($/MTok)출력 ($/MTok)캐시 읽기 ($/MTok)용도
Claude Fable 5.110500.25고난도 추론, 장시간 에이전트 작업
Claude Opus 5.54200.20장시간 에이전트 코딩
Claude Sonnet 5.52100.10속도와 성능의 균형
Claude Haiku 5.5 (프롬프트 10만 토큰 이하)0.100.500.01대량 분류·추출·라우팅

표에서 읽어야 할 패턴은 네 가지입니다.

  1. 출력은 입력의 5배. 입력은 한 번에 병렬로 처리되지만, 출력은 토큰을 하나씩 순서대로 생성하기 때문입니다(1편의 자기회귀). "설명 없이 코드만", "바뀐 부분만 diff로"가 비용을 줄이는 이유입니다.
  2. 생각(thinking) 토큰은 출력 요금. 화면에 요약만 보이더라도 모델이 생성한 추론 토큰은 출력으로 과금됩니다.
  3. 캐시 읽기는 입력의 2.5~10%. Sonnet 5.5와 Opus 5.5는 캐시 히트가 기본 입력가의 5%, Fable 5.1은 2.5%입니다. 대신 캐시에 처음 쓸 때는 5분 캐시 기준 입력가의 1.25배, 1시간 캐시는 2배를 냅니다.
  4. 배치 API는 50% 할인. 즉시 응답이 필요 없는 대량 작업(테스트 생성, 문서화)은 입력·출력 모두 반값이고, 캐싱 할인과 중복 적용됩니다.

그 밖의 세부 사항도 있습니다. Claude 4.6 이후 모델(Haiku 5.5 제외)은 100만 토큰 컨텍스트 전체를 같은 토큰 단가로 쓸 수 있고, Haiku 5.5는 프롬프트가 10만 토큰을 넘으면 단가가 5배가 됩니다. 도구를 정의하면 5.5 계열 모델 기준 약 286토큰의 시스템 프롬프트가 자동으로 추가되고, 웹 검색은 1,000회당 10달러가 별도입니다.

실제 비용 계산: 10턴 코딩 대화

Sonnet 5.5로 버그를 잡는 10턴 대화를 가정해 봅시다. 시스템 프롬프트가 3,000토큰이고, 턴마다 사용자가 코드 포함 2,000토큰을 보내고 모델이 500토큰을 답합니다. k번째 턴의 입력은 이전 기록을 모두 포함하므로 다음과 같습니다.

text
k번째 턴 입력 = 3,000 + 2,500 × (k − 1) + 2,000

1턴은 5,000토큰이지만 10턴은 27,500토큰입니다. 10턴 입력을 모두 더하면 약 162,500토큰으로, 실제로 사용자가 새로 쓴 양(2만 토큰)의 8배가 넘습니다.

시나리오입력 비용출력 비용 (5,000토큰)합계 (근사)
캐싱 없음162,500 × $2 = $0.325$0.05$0.38
캐싱 사용 (이전 기록 약 13.5만 토큰이 캐시 히트, 새 내용 약 2.75만 토큰은 캐시 쓰기)$0.0135 + $0.069 ≈ $0.08$0.05$0.13

같은 대화가 캐싱 하나로 약 3분의 1이 됩니다. 대화가 길어질수록, 그리고 시스템 프롬프트가 클수록 차이는 더 커집니다. Claude Code 같은 에이전트 도구가 캐싱을 적극적으로 쓰는 이유입니다.

구독제와 API는 무엇이 다른가

Claude Pro/Max 같은 구독제는 토큰당 과금 대신 일정 시간 단위의 사용량 한도를 줍니다. 하지만 내부에서는 역시 토큰을 소비하므로, 위의 원리가 그대로 적용됩니다. 긴 대화, 큰 파일 첨부, 큰 모델, 긴 생각이 한도를 빨리 소진시킵니다. "대화가 길어지면 새 대화로 시작하라"는 조언은 비용과 품질 모두에 도움이 됩니다(5편).

코딩 실습 (20분): 토큰 직접 세기

Anthropic SDK의 토큰 카운팅 API로 같은 내용을 여러 형태로 세어 봅니다. 카운팅 자체는 무료입니다.

python
# pip install anthropic   (ANTHROPIC_API_KEY 환경변수 필요)
import json, anthropic
 
client = anthropic.Anthropic()
 
def count(text: str) -> int:
    r = client.messages.count_tokens(
        model="claude-sonnet-5-5",
        messages=[{"role": "user", "content": text}],
    )
    return r.input_tokens
 
data = {"id": 1, "name": "Sample Item", "progress": 0.75, "tags": ["alpha", "beta"]}
samples = {
    "영어 문장": "Fix the null pointer bug in the login handler.",
    "한국어 문장": "로그인 핸들러의 널 포인터 버그를 고쳐줘.",
    "JSON (pretty)": json.dumps(data, indent=2),
    "JSON (minified)": json.dumps(data, separators=(",", ":")),
}
for label, text in samples.items():
    print(f"{label:16} {len(text):4}자  → {count(text)} tokens")

결과로 확인할 것: (1) 같은 뜻의 한국어와 영어의 토큰 차이, (2) pretty와 minified JSON의 차이. 실제 API 응답의 usage 필드(input_tokens, output_tokens, cache_read_input_tokens, cache_creation_input_tokens)도 출력해 보면, 위 비용 계산을 내 데이터로 다시 해 볼 수 있습니다.

정리

  • 토큰 = BPE로 만든 텍스트 조각. 언어·형식·모델에 따라 같은 내용도 토큰 수가 다르다.
  • 입력에는 시스템 프롬프트, 도구 정의, 대화 기록, 파일 내용까지 모두 포함된다.
  • 출력(생각 포함)은 입력의 5배. 캐싱과 배치가 비용을 크게 줄인다.

다음 편: 100만 토큰까지 넣을 수 있다면 다 넣으면 될까요? 컨텍스트 윈도우의 함정과 생성 파라미터를 다룹니다.

출처: Anthropic — Pricing (2026-10-13 확인)

COMMENTS (…)

댓글을 불러오는 중이에요.

NEW COMMENT0 / 1000
⌘↵ 전송

blog92@web:~$ cd ..