Eazler AI Lab AI Engineering Journal
본문으로 건너뛰기
엔지니어링◷ 13분 읽기

한국어 본문은 토큰이 늘지 않았습니다 — 토크나이저 교체 후 비용, 테스트 텍스트 10종 측정

토크나이저 교체 후 비용 — 테스트 텍스트 10종 직접 측정

목차

토큰은 모델이 글을 처리하는 단위이고, 토크나이저는 글을 토큰으로 자르는 규칙입니다. 요금이 토큰 단위로 매겨지므로 이 규칙이 바뀌면 같은 글의 청구 토큰 수가 바뀝니다. 개발사 문서는 Claude Opus 4.7에서 토크나이저가 바뀌어 같은 글이 더 많은 토큰이 된다고 적고 있습니다. 그런데 적힌 값이 한 곳은 "약 30%", 다른 곳은 "1배에서 1.35배"입니다. 하한이 1배라는 것은 내용에 따라 토큰이 전혀 늘지 않는 경우가 있다는 뜻입니다. 내가 실제로 보내는 입력이 얼마나 늘어나는지는 문서만으로 알 수 없습니다. 그래서 직접 셌습니다. 측정용 텍스트 묶음 10종을 만들었습니다 — 한국어 산문, 한국어 UI 문자열, 고객 문의, 마크다운, 영어 산문, TypeScript 코드, JSON 로그 등입니다. 이것을 구 토크나이저 모델 3개와 신 토크나이저 모델 4개로 각각 세고, 본문과 무관하게 매번 더해지는 고정량을 걷어내 본문만의 토큰 수를 구했습니다. 결과는 한쪽으로 몰렸습니다 — 순수 한국어 테스트 텍스트 네 종은 모두 정확히 1.000배로 한 토큰도 늘지 않았고, ASCII로만 이루어진 세 종은 1.227배(코드)·1.309배(영어 산문)·1.420배(JSON 로그)였습니다. 이 차이를 공식 단가에 곱하면 같은 모델 교체가 한국어 본문에서는 입력 비용 33.3% 인하, JSON 로그에서는 5.3% 인하로 달라집니다. Opus 4.6과 Opus 5는 입력 단가가 100만 토큰당 $5로 같은데도, 같은 글의 입력 비용이 한국어 본문에서는 그대로이고 JSON 로그에서는 42.0% 오릅니다. 측정에 쓴 스크립트와 테스트 텍스트 구성을 9장에 함께 싣습니다.

범위: Claude 공식 가격·토큰 카운팅·모델 개요·Opus 5 마이그레이션 문서 + 자체 토큰 카운팅 측정원문 확인: 2026-09-21

핵심 요약

1.000배
순수 한국어 테스트 텍스트 4종의 토큰 증가
한 토큰도 늘지 않음
1.42배
JSON 로그의 토큰 증가
문서가 적은 상한 1.35배를 넘음
0% ~ +42.0%
Opus 4.6 → Opus 5에서 내용에 따라 달라진 입력 비용
입력 단가는 $5로 동일 · 파생값
가장 중요한 결론: 단가표의 인하율은 입력의 모양에 따라 다르게 실현됩니다. 측정한 한국어 본문 네 종에서는 토큰 수가 그대로여서 Sonnet 4.6 → Sonnet 5 교체가 문자 그대로 33.3% 인하였고, 같은 교체가 JSON 로그에서는 5.3% 인하에 그쳤습니다. 반대로 입력 단가가 같은 Opus 4.6 → Opus 5는 한국어에서 변화가 없고 JSON 로그에서 42.0% 인상입니다. 내 입력의 한글 비중을 모르면 어느 쪽인지 알 수 없습니다. 재는 데 드는 비용은 0입니다.

4.7에서 토크나이저가 바뀌었습니다

토크나이저는 글자를 모델이 처리하는 단위인 토큰으로 자르는 규칙입니다. 요금이 토큰 단위로 매겨지므로, 같은 글이라도 자르는 규칙이 바뀌면 청구되는 토큰 수가 바뀝니다.

Claude Opus 4.7에서 새 토크나이저가 들어갔고, 그 이후 모델이 같은 것을 씁니다. 경계는 모델 이름이 아니라 4.7입니다 — 이름만 보면 Sonnet 4.6과 Sonnet 5가 한 줄로 보이지만 토크나이저는 서로 다릅니다.

토크나이저해당 모델같은 글을 세면
4.7 이전Sonnet 4.6, Opus 4.6, Sonnet 4.5, Haiku 4.5, Haiku 3.5기준
4.7에서 도입된 것Opus 4.7, Opus 4.8, Opus 5, Sonnet 5, Fable 5, Fable 5.1, Mythos 5, Mythos 5.1더 많거나 같음

Fable 5.1, Mythos 5.1, Fable 5, Mythos 5는 Opus 4.7에서 도입된 토크나이저를 공유합니다. 개발사 문서에 "A prompt counts the same on all four"라고 적혀 있습니다.

왜 지금 문제가 되는가. 단가는 내려가는 쪽으로 움직였습니다. Sonnet 4.6은 입력 100만 토큰당 $3였고 Sonnet 5는 $2입니다. 표만 보면 33% 인하입니다. 그런데 Sonnet 5는 같은 글을 더 많은 토큰으로 셉니다. 인하폭이 줄거나, 모델에 따라서는 사라집니다.

개발사 수치가 세 개이고 서로 다릅니다

배수를 찾아보면 공식 문서 안에서만 세 가지 표현이 나옵니다. 셋이 같은 값을 가리키지 않습니다.

어디에 적혀 있나표현배수로 옮기면
가격 문서, 토큰 카운팅 문서"approximately 30 percent more tokens for the same text"1.30배
모델 개요의 컨텍스트 항목100만 토큰에 들어가는 분량이 신 토크나이저에서 약 55.5만 단어, 이전 토크나이저에서는 약 75만 단어1.351배
Opus 5 마이그레이션 가이드"may use roughly 1x to 1.35x as many tokens … (up to ~35% more, varying by content)"1~1.35배

셋은 서로 모순되지 않습니다. 앞의 둘은 대표값 하나를 적은 것이고, 세 번째만 범위와 조건을 적었습니다. 쓸모가 가장 큰 것은 세 번째입니다 — 하한이 1배라고 밝혀 두었기 때문입니다. 내용에 따라 전혀 늘지 않는 경우가 있다는 뜻입니다.

"30%" 하나로는 양쪽 다 틀릴 수 있습니다. 뒤에서 보겠지만 이 글의 측정에서 한국어 본문은 1배였고 JSON 로그는 1.42배로 문서의 상한마저 넘었습니다. 30%를 그대로 적용하면 한쪽은 과장이고 다른 쪽은 과소평가입니다. 내가 실제로 보내는 입력이 어느 쪽인지는 문서가 알려 주지 않습니다. 그래서 개발사도 재라고 적었습니다 — "Recount prompts against the model you plan to use rather than reusing counts measured against earlier models."

모델 개요의 1.351배는 이 글이 문서의 단어 수(75만 → 55.5만)에서 계산한 파생값입니다. 같은 문서의 Haiku 4.5 항목(200K 토큰 ≈ 15만 단어)과 맞으므로 문서 안에서는 일관됩니다.

직접 세어 봤습니다

개발사가 지정한 절차를 그대로 따랐습니다 — 같은 요청을 지금 쓰는 모델과 옮겨 갈 모델로 한 번씩 세어 input_tokens를 비교하는 것입니다. 토큰 카운팅은 과금되지 않습니다.

고정 오버헤드를 먼저 걷어냈습니다

count_tokens가 돌려주는 값에는 본문 외에 모델마다 다른 고정량이 섞여 있습니다. 문서도 "개발사가 시스템 최적화를 위해 더한 토큰이 포함될 수 있고 그 부분은 청구되지 않는다"고 적고 있습니다. 실제로 한 글자짜리 메시지를 세어 보니 모델별로 6에서 11까지 달랐습니다. 이 값을 그대로 두면 짧은 텍스트일수록 배수가 1에 가깝게 왜곡됩니다.

그래서 같은 글을 1회 넣은 요청과 5회 넣은 요청을 각각 세고 차이를 4로 나누었습니다. 고정량은 두 요청에 똑같이 들어가므로 뺄셈에서 사라집니다. 아래 표의 값은 전부 이렇게 구한 사본 1개당 순수 토큰 수입니다.

이 방법이 확인해 주는 것과 아닌 것. 테스트 텍스트마다 따로 보면, 구 토크나이저 모델 3종(Haiku 4.5·Sonnet 4.6·Opus 4.6)이 모두 같은 토큰 수를 돌려주었습니다. 신 토크나이저 모델 4종(Opus 4.7·Sonnet 5·Opus 5·Fable 5.1)도 마찬가지였습니다. 10종 전부에서 그랬습니다. 문서가 "같은 토크나이저를 공유하므로 프롬프트가 동일하게 계산된다"고 적은 것과 일치하며, 값이 토크나이저 외의 요인으로 흔들리지 않았다는 것까지는 말해 줍니다. 다만 이 결과가 뺄셈 방식 자체의 정확성을 증명하지는 않습니다. 이렇게 구한 값은 엄밀히 말하면 같은 글을 한 번 더 이어 붙일 때 늘어나는 토큰 수의 평균이고, 글과 글이 맞닿는 자리에서 생기는 차이까지 걷어냈다고 보장할 수는 없습니다. 아래의 배수와 비용은 모두 이 값들의 비로 계산했습니다. 분자와 분모를 같은 방식으로 구했으므로 편차가 서로 상쇄되는 쪽이라고 보지만, 얼마나 남는지는 확인하지 않았습니다.

테스트 텍스트 10종의 측정값

테스트 텍스트글자ASCII 비중구 토크나이저신 토크나이저배수
한국어 긴 산문4393.3%4594591.000
한국어 기술 산문2058.3%2242241.000
한국어 UI 문자열15612.8%1611611.000
한국어 고객 문의 로그14117.7%1411411.000
한국어 마크다운 문서22545.8%1841891.027
한국어+영어 용어 혼용28057.3%1852021.092
한국어+코드 혼합36485.8%1752021.154
코드만 (TypeScript)559100%1852271.227
영어 기술 산문386100%971271.309
JSON 로그479100%1622301.420

ASCII 비중은 공백을 뺀 글자 중 ASCII 문자의 비율입니다. 토큰 수는 사본 1개당 순수 값이며, 구 토크나이저 열은 Haiku 4.5·Sonnet 4.6·Opus 4.6에서, 신 토크나이저 열은 Opus 4.7·Sonnet 5·Opus 5·Fable 5.1에서 각각 같은 값이 나왔습니다. 측정일 2026-09-21.

배수는 한글 비중이 낮을수록 높았습니다

표를 배수 순으로 정렬하면 ASCII 비중도 함께 올라갑니다. 테스트 텍스트 10종에서 두 값의 상관계수는 0.899였습니다. 한글로만 이루어진 네 종은 예외 없이 1.000이고, ASCII로만 이루어진 세 종은 예외 없이 1.2를 넘었습니다.

다만 ASCII 비중만으로 배수가 정해지지는 않습니다. ASCII 100%인 세 테스트 텍스트가 1.227·1.309·1.420으로 서로 달랐습니다. 측정한 범위에서는 한글 비중이 높을수록 배수가 낮았지만, ASCII 안에서 무엇이 배수를 가르는지는 이 측정으로 알 수 없습니다. 상관계수 0.899도 표본 10개에서 나온 값이라 방향을 보여 줄 뿐 계수를 예측에 쓸 수준은 아닙니다. 한글 비중으로 배수를 계산하지 마세요 — 자기 입력을 직접 세는 쪽이 항상 정확합니다.

덤으로 확인된 것 — 한국어는 글자당 토큰이 많습니다

한국어는 글자 하나가 거의 토큰 하나입니다. 측정한 한국어 긴 산문은 두 토크나이저 모두에서 439자에 459토큰이었습니다. 영어 산문은 386자에 구 토크나이저 97토큰, 신 토크나이저 127토큰이었습니다. 글자 하나당 토큰 수로 옮기면 이렇습니다(파생값).

토크나이저한국어 긴 산문영어 기술 산문한국어가 영어의
구1.046 토큰/글자0.251 토큰/글자4.16배
신1.046 토큰/글자0.329 토큰/글자3.18배

글자 수 기준으로 한국어가 영어보다 훨씬 많은 토큰을 쓴다는 사실은 그대로입니다. 다만 이번 변경으로 그 격차는 4.16배에서 3.18배로 좁혀졌습니다 — 한국어가 좋아져서가 아니라 영어 쪽 토큰이 늘었기 때문입니다.

두 테스트 텍스트는 내용이 다르므로 같은 정보량을 견준 것이 아닙니다. 글자 수당 토큰 수를 견준 값이며, 이 표만으로 한국어 서비스의 토큰 비용이 항상 더 높다고 말할 수는 없습니다.

단가에 곱하면 순서가 바뀝니다

실측 토큰 수에 2026-09-21 공식 단가를 곱하면, 같은 모델 교체가 내용에 따라 다른 결과를 냅니다. 아래 값은 같은 글을 보낼 때의 입력 비용 변화이며 이 글이 계산한 파생값입니다.

테스트 텍스트Sonnet 4.6 → Sonnet 5
$3 → $2
Opus 4.6 → Opus 5
$5 → $5
Haiku 4.5 → Sonnet 5
$1 → $2
한국어 긴 산문-33.3%0.0%+100.0%
한국어 기술 산문-33.3%0.0%+100.0%
한국어 UI 문자열-33.3%0.0%+100.0%
한국어 고객 문의 로그-33.3%0.0%+100.0%
한국어 마크다운 문서-31.5%+2.7%+105.4%
한국어+영어 용어 혼용-27.2%+9.2%+118.4%
한국어+코드 혼합-23.0%+15.4%+130.9%
코드만 (TypeScript)-18.2%+22.7%+145.4%
영어 기술 산문-12.7%+30.9%+161.9%
JSON 로그-5.3%+42.0%+184.0%

음수는 같은 글을 보낼 때 더 싸졌다는 뜻입니다. 출력 토큰과 캐시는 빼고 입력만 계산했습니다.

읽는 법

  • Sonnet 4.6 → Sonnet 5는 단가가 $3에서 $2로 33.3% 내렸습니다. 측정한 한국어 본문 네 종에서는 그 인하가 그대로 실현됐습니다. JSON 로그에서는 5.3%만 남았습니다.
  • Opus 4.6 → Opus 5는 입력 단가가 $5로 같습니다. 단가표만 보면 비용이 그대로여야 하는데, 한국어는 실제로 그대로이고 JSON 로그는 42.0% 오릅니다. 단가가 바뀌지 않은 교체에서 비용이 오를 수 있다는 것이 이 표에서 가장 주의할 부분입니다.
  • Haiku 4.5 → Sonnet 5는 단가가 두 배지만 실제 부담은 두 배에서 시작해 최대 2.84배까지 갑니다.
같은 토크나이저끼리 비교할 때는 이 표가 필요 없습니다. 배수를 곱해야 하는 것은 4.7 경계를 넘을 때뿐입니다. Sonnet 5와 Opus 5를 견주거나 Fable 5와 Fable 5.1을 견줄 때는 토큰 수가 같으므로 단가를 그대로 비교하면 됩니다.

캐시 읽기 배수도 모델마다 다릅니다

프롬프트 캐싱은 여러 요청에 반복되는 프롬프트 앞부분의 처리 결과를 저장해 두고 재사용하는 기능입니다. 저장하는 쪽을 캐시 쓰기, 저장해 둔 것을 재사용하는 쪽을 캐시 읽기라고 합니다. 오랫동안 캐시 읽기 단가는 어느 모델에서나 기본 입력 단가의 0.1배였습니다. 지금은 아닙니다.

연산대부분의 모델Fable 5.1 · Mythos 5.1
5분 캐시 쓰기1.25배1.25배
1시간 캐시 쓰기2배2배
캐시 읽기0.1배0.025배

Fable 5.1의 기본 입력이 100만 토큰당 $10이므로 캐시 읽기는 $0.25입니다. 같은 세대인 Fable 5는 $1이었으니, 읽기만 놓고 보면 4분의 1입니다. 긴 시스템 프롬프트를 여러 번 재사용하는 에이전트 작업에서는 이 항목이 청구서의 대부분을 차지할 수 있습니다.

여기서는 토큰 수 배수를 곱할 필요가 없습니다. Fable 5와 Fable 5.1은 같은 토크나이저를 쓰므로 토큰 수가 같습니다. 배수가 필요한 것은 4.7 이전 모델과 이후 모델을 견줄 때뿐입니다.

사고 토큰이 출력에 붙습니다

입력만 바뀐 것이 아닙니다. Opus 5와 Sonnet 5는 thinking 항목을 지정하지 않고 보낸 요청도 적응형 사고로 실행됩니다. 적응형 사고는 모델이 요청에 맞춰 추론에 들일 분량을 스스로 조절하는 방식입니다. 이전 세대에서는 같은 요청이 추론 단계 없이 실행됐습니다.

사고 토큰은 모델이 답을 만들기 위해 내부적으로 추론하면서 쓰는 토큰입니다. 이 토큰은 응답에 돌려주지 않아도 출력 토큰으로 청구됩니다. 마이그레이션 가이드의 표현은 이렇습니다 — "although per-token pricing is unchanged, a workload that ran without thinking on Claude Opus 4.8 can produce more output tokens per request on Claude Opus 5."

출력 단가는 입력 단가의 다섯 배입니다. 사고가 켜지면서 늘어난 출력 비용이 입력 단가 인하로 아낀 금액보다 클 수 있습니다. 이 변화는 토크나이저와 무관하므로 따로 계산해야 합니다. 예전 동작으로 돌리려면 thinking: {type: "disabled"}를 넘기면 되지만, 문서는 이 경우 모델이 도구 호출을 평문으로 내보내거나 내부 태그를 노출하는 일이 가끔 있다고 적고 있습니다.

1M은 예전 1M이 아닙니다

입력 한도는 모델이 한 번에 받을 수 있는 토큰의 총량입니다. 숫자는 그대로 100만인데, 그 안에 들어가는 글의 양이 줄었습니다.

75만 단어
4.7 이전 토크나이저의 1M 토큰
개발사 문서의 근사치
55.5만 단어
신 토크나이저의 1M 토큰
개발사 문서의 근사치
약 26%
같은 한도에 들어가는 분량의 감소
위 두 값에서 이 글이 계산한 파생값

이 환산은 개발사가 단어 기준으로 적은 것이라 영어를 전제한 값으로 보입니다. 4장에서 측정한 한국어 본문 네 종은 토큰 수가 그대로였으므로, 그런 입력만 넣는 작업이라면 한도에 닿는 시점도 그대로일 것입니다. 토큰 수가 늘어나는 입력에서는 컨텍스트 압축이 더 일찍 돌고, 한 번에 넣을 수 있는 파일 수가 줄어듭니다. 컨텍스트 압축은 한도에 닿기 전에 대화를 줄여 자리를 확보하는 동작입니다. 문서도 출력 상한을 정하는 max_tokens에 여유를 더 두고, 압축이 시작되는 기준을 다시 잡으라고 적고 있습니다.

가격 쪽에서는 반대 방향의 변화도 있습니다. Claude 4.6 이후 모델은 100만 토큰 컨텍스트 전체를 기본 단가로 쓰고, 20만 토큰을 넘겨도 장문 할증이 붙지 않습니다.

오늘 할 수 있는 것

순서대로 하면 30분 안에 끝납니다. 토큰 카운팅은 과금되지 않으므로 비용 걱정 없이 돌릴 수 있습니다.

  1. 내 프롬프트를 두 모델로 각각 세어 보세요. 개발사가 지정한 절차가 이것입니다 — 같은 요청을 지금 쓰는 모델과 옮겨 갈 모델로 한 번씩 세어 input_tokens를 비교합니다. 문서가 밝힌 범위는 1~1.35배이고 이 글의 측정은 1.000~1.420배였습니다. 어느 쪽이든 대표값을 가져다 쓰는 것보다 내 것을 재는 쪽이 정확합니다.
    curl -s https://api.anthropic.com/v1/messages/count_tokens \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -H "content-type: application/json" \
      -d '{"model":"claude-sonnet-4-6","messages":[{"role":"user","content":"내 실제 프롬프트"}]}'
    
    # 같은 내용을 옮겨 갈 모델로 한 번 더
    #   "model":"claude-sonnet-5"
    # 두 input_tokens 의 비가 내 작업 부하의 배수입니다
    한 문장이 아니라 실제로 보내는 프롬프트 전체로 재세요. 시스템 프롬프트, 도구 정의, 붙이는 파일까지 넣어야 실제 배수가 나옵니다.
  2. 짧은 프롬프트를 잰다면 고정 오버헤드를 걷어내세요. 위 응답에는 모델마다 다른 고정량(측정 당시 6~11)이 섞여 있어, 짧을수록 배수가 1에 가깝게 왜곡됩니다. 같은 글을 1회와 5회 넣어 차이를 4로 나누면 그 고정량이 상쇄됩니다. 이 글의 표는 전부 이렇게 구했습니다.
    #!/usr/bin/env python3
    import json, os, urllib.request
    
    KEY  = os.environ["ANTHROPIC_API_KEY"]
    PAIR = ("claude-sonnet-4-6", "claude-sonnet-5")   # (지금 쓰는 모델, 옮겨 갈 모델)
    TEXT = open("my_prompt.txt", encoding="utf-8").read()
    
    def count(model, text):
        req = urllib.request.Request(
            "https://api.anthropic.com/v1/messages/count_tokens",
            data=json.dumps({"model": model,
                             "messages": [{"role": "user", "content": text}]}).encode(),
            headers={"x-api-key": KEY,
                     "anthropic-version": "2023-06-01",
                     "content-type": "application/json"})
        with urllib.request.urlopen(req, timeout=45) as r:
            return json.load(r)["input_tokens"]
    
    def net(model, text):                      # 고정 오버헤드를 상쇄한 사본 1개당 토큰
        one  = count(model, text)
        five = count(model, "\n\n".join([text] * 5))
        return (five - one) / 4
    
    old, new = (net(m, TEXT) for m in PAIR)
    print(f"{PAIR[0]}: {old:.0f} 토큰")
    print(f"{PAIR[1]}: {new:.0f} 토큰")
    print(f"배수: {new/old:.3f}")
    이 글의 테스트 텍스트 10종은 4장 표에 이름·글자 수·ASCII 비중으로 구성을 적어 두었습니다. 같은 절차를 자기 프롬프트에 그대로 적용하면 됩니다.
  3. 비교하려는 두 모델이 4.7 경계를 넘는지 확인하세요. 같은 쪽에 있으면 토큰 수가 같으므로 단가를 그대로 비교해도 됩니다. 경계를 넘으면 단가에 배수를 곱한 뒤에 비교해야 합니다.
  4. 캐시 읽기 단가를 모델별로 다시 확인하세요. "입력의 10%"는 이제 전부에 통하는 규칙이 아닙니다. 캐시 읽기가 청구서의 큰 몫을 차지하는 작업이라면 이 항목만으로 모델 선택이 뒤집힐 수 있습니다.
  5. 사고가 켜지는지 확인하고 출력 토큰을 다시 재세요. 이전 세대에서 thinking 없이 돌던 요청이 5 세대에서는 사고와 함께 돕니다. 입력만 보고 계산하면 늘어난 출력을 놓칩니다.
  6. max_tokens와 컨텍스트 압축 기준을 다시 잡으세요. 앞 단계에서 잰 배수가 1보다 컸다면, 같은 100만 토큰에 들어가는 분량이 그만큼 줄어 예전 기준으로 잡아 둔 임계값이 더 일찍 걸립니다. 배수가 1이었다면 그대로 두어도 됩니다.
  7. 옛 모델로 재 둔 토큰 수를 근거로 만든 예산·한도는 버리세요. 문서가 명시적으로 경고하는 항목입니다. 다시 세는 데 드는 비용은 0입니다.

아직 결론이 아닌 것

  • 테스트 텍스트는 제가 만든 것이고 실제 작업 부하가 아닙니다. 10종 모두 141~559자로 짧고, 실제 서비스의 프롬프트는 시스템 프롬프트·도구 정의·첨부 파일이 섞여 구성이 다릅니다. 표의 배수를 그대로 쓰지 말고 §9의 절차로 자기 프롬프트를 재세요.
  • JSON 로그의 1.420배는 문서가 적은 상한 1.35배를 넘었습니다. 문서가 "roughly"와 "varying by content"라고 적었으므로 문서와 모순되지는 않지만, 1.35를 천장으로 삼고 예산을 잡으면 모자랄 수 있습니다. 왜 이 테스트 텍스트가 더 높았는지는 확인하지 못했습니다.
  • ASCII 비중과 배수의 상관계수 0.899는 표본 10개에서 나온 값입니다. 방향은 분명하지만 계수로 예측에 쓸 수준이 아닙니다. ASCII 100%인 세 테스트 텍스트가 1.227·1.309·1.420으로 서로 달랐다는 점이 그 한계를 그대로 보여 줍니다. 한글 비중이 배수를 결정한다고 말할 근거는 이 측정에 없습니다 — 함께 움직였다는 것까지가 확인된 것입니다.
  • count_tokens의 값은 개발사가 밝힌 대로 추정치입니다. 실제 요청에서 몇 토큰 차이가 날 수 있습니다. 다만 구 토크나이저 3종과 신 토크나이저 4종이 각각 완전히 같은 값을 냈으므로, 이 측정 안에서 값이 흔들리지는 않았습니다.
  • 출력 토큰은 재지 않았습니다. 사고가 기본으로 켜지면서 출력 토큰이 늘어난다는 7장의 내용은 개발사 문서를 옮긴 것이고 자체 측정이 아닙니다. 출력 단가가 입력의 다섯 배이므로, 실제 청구서에서는 이쪽이 더 크게 움직일 수 있습니다.
  • 고정량을 걷어낸 뺄셈에도 가정이 있습니다. 같은 글을 다섯 번 이어 붙이면 글과 글이 맞닿는 자리에서 토큰이 조금 달라질 수 있습니다. 한 글자 메시지로 잰 오버헤드(6~11)와 대조해 값이 일관되는 것은 확인했지만, 뺄셈이 오버헤드를 정확히 0으로 만들었다고 증명한 것은 아닙니다.
  • 다른 개발사 모델은 재지 않았습니다. OpenAI·Google의 토크나이저는 이 글의 범위 밖입니다. 그쪽에서도 같은 함정이 있는지는 확인하지 않았습니다.
  • 가격과 모델 사양은 2026-09-21 기준입니다. 이 항목들은 자주 바뀌므로 도입 시점에 공식 문서를 다시 확인하세요.

참고자료

1차 출처는 전부 2026-09-21에 직접 열어 확인했습니다. 가격·모델 사양·토크나이저는 자주 바뀌므로 확인 날짜를 함께 적습니다.

출처이 글이 가져온 것구분
Claude 가격 문서 (platform.claude.com/docs/en/about-claude/pricing)모델별 입력·출력·캐시 쓰기·캐시 읽기 단가, 캐시 배수 1.25배·2배·0.1배·0.025배, 새 토크나이저 약 30% 문구, 장문 할증 없음1차
토큰 카운팅 문서 (build-with-claude/token-counting)count_tokens가 넘긴 모델의 토크나이저로 센다는 규정, 같은 요청을 두 모델로 세어 비교하라는 절차, 무료·등급별 RPM, 옛 모델 수치를 재사용하지 말라는 경고1차
모델 개요 (models/overview)모델 ID, 모델별 단가, 1M 토큰의 단어 환산(현 55.5만 · 이전 75만), Haiku 4.5의 200K ≈ 15만 단어1차
Opus 5 마이그레이션 가이드 (models/opus-5/migration-guide)"roughly 1x to 1.35x" 범위와 "varying by content" 단서, 기본 사고 전환과 사고 토큰의 출력 청구, 자체 작업 부하로 비용을 다시 기준 잡으라는 권고1차
모델 ID·버전 문서 (models/model-ids-and-versions)4.6 세대 이후의 날짜 없는 ID 규칙 — 측정에 쓴 claude-sonnet-4-6·claude-opus-4-6의 정확한 표기1차
이 블로그, 프롬프트 캐싱은 좁게 잡을수록 유리했다캐시 구간을 넓게 잡을 때의 역효과. 그 글의 "읽기 0.1배"는 이 글의 확인에 따라 개정했습니다자체

이 글의 측정은 /v1/messages/count_tokens 응답의 input_tokens만 씁니다. 문서가 밝혔듯 이 값은 추정치이며, 실제 요청에서 몇 토큰 차이가 날 수 있습니다. 또한 개발사가 시스템 최적화를 위해 더한 토큰이 포함될 수 있고 그 부분은 청구되지 않습니다.

뉴스레터

매주 일요일, 그 주의 새 리포트를 보내 드립니다

한 주에 나온 리포트를 한 통에 모아 보내고, 새 글이 없는 주는 건너뜁니다. 리포트 소식 외에는 보내지 않습니다.

받은 주소는 새 리포트 알림에만 사용하며, 언제든 해지할 수 있습니다. 개인정보처리방침
발행처

Eazler AI Lab은 주식회사 이즐러가 발행하는 AI 엔지니어링 연구 노트입니다. 1차 자료를 원문으로 읽고, 확인하지 못한 것은 확인하지 못했다고 씁니다.

편집 기준 · 검증 방법론 →

새 리포트 요약은 Threads @eazler.inc에도 올립니다.

AI 에이전트 도입·자동화 구축 문의는 hello@eazler.com