안녕하세요, 자바파커입니다.
developer는 1토큰입니다.개발자는 3토큰입니다.
같은 뜻인데 세 배입니다. 그리고 LLM API 요금은 글자 수가 아니라 토큰 수로 매겨집니다.
결론부터 말씀드리면 — 토큰은 글자도 단어도 아닙니다. 학습 데이터에 자주 나온 덩어리를 통째로 하나씩 번호 붙인 것이고, 그 학습 데이터가 영어 중심이었습니다. 그래서 영어는 단어 하나가 토큰 하나로 떨어지는데, 한글은 음절 단위로 잘게 쪼개집니다.
아래 숫자는 전부 OpenAI o200k_base(GPT-4o 계열)와 cl100k_base(GPT-4)로 직접 재서 넣었습니다. 재는 코드도 아래에 있습니다.
토큰은 글자가 아니다
먼저 눈으로 보는 게 빠릅니다. o200k_base 기준으로 이렇게 쪼개집니다.
"developer" → ["developer"] 1토큰
"개발자" → ["개", "발", "자"] 3토큰
"데이터베이스" → ["데", "이터", "베", "이스"] 4토큰
"인증" → ["인", "증"] 2토큰developer 는 9글자인데 1토큰이고, 개발자 는 3글자인데 3토큰입니다. 글자 수와 토큰 수는 아무 관계가 없습니다.
왜 이렇게 쪼개지나 — BPE
대부분의 LLM은 BPE(Byte Pair Encoding) 계열 토크나이저를 씁니다. 원리는 단순합니다.
- 학습 말뭉치를 바이트 단위로 잘게 쪼갠다
- 가장 자주 붙어 나오는 쌍을 찾아 하나로 합친다
- 원하는 어휘 크기가 될 때까지 2번을 반복한다
그러니까 자주 나온 덩어리일수록 통째로 하나의 토큰이 됩니다. developer 는 영어 말뭉치에 수백만 번 나오니 통째로 한 자리를 차지합니다. 반면 개발자 는 그만큼 나오지 않아 음절로 남습니다.
여기에 한글이 불리한 이유가 하나 더 있습니다. UTF-8에서 한글 한 글자는 3바이트입니다. 영어 알파벳은 1바이트고요. BPE는 바이트에서 출발하기 때문에, 어휘에 등재되지 못한 한글은 처음부터 세 배 무거운 상태에서 시작합니다.
실제로 얼마나 차이 나나
단어 하나만 보면 극적이지만, 실무에서 중요한 건 문장 단위입니다. 같은 지시문을 넣어 재 봤습니다.
EN Summarize the following document in three sentences.
Keep key terms as they are and do not omit any numbers.
KO 다음 문서를 세 문장으로 요약해 주세요.
핵심 용어는 그대로 두고, 숫자는 빠뜨리지 마세요.| 토크나이저 | 영어 | 한글 | 비율 |
|---|---|---|---|
o200k_base (GPT-4o 계열) |
23토큰 | 30토큰 | 1.30배 |
cl100k_base (GPT-4) |
23토큰 | 46토큰 | 2.00배 |
두 가지를 알 수 있습니다.
첫째, 단어 단위보다 문장 단위 차이가 작습니다. 3배가 아니라 1.3배입니다. 한글은 조사·어미가 붙는 대신 글자 수 자체가 적어서 어느 정도 상쇄됩니다. "한글은 토큰을 2~3배 먹는다"는 말이 흔히 도는데, 최신 토크나이저에서는 과장입니다.
둘째, 토크나이저 세대에 따라 크게 달라집니다. 같은 문장이 GPT-4 시절 46토큰에서 GPT-4o 계열 30토큰으로 줄었습니다. 한국어를 더 많이 학습해 어휘에 한글 덩어리가 늘었기 때문입니다. 모델을 바꾸면 코드 한 줄 안 고쳐도 요금이 내려갈 수 있습니다.
단어 단위로 보면 개선 폭이 더 뚜렷합니다.
| 단어 | cl100k_base |
o200k_base |
|---|---|---|
database / 데이터베이스 |
1 vs 6 | 1 vs 4 |
deploy / 배포 |
1 vs 5 | 1 vs 2 |
authentication / 인증 |
1 vs 3 | 1 vs 2 |
그래서 무엇이 달라지나
토큰 수는 세 가지를 동시에 정합니다.
① 요금. 입력·출력 모두 토큰 단위로 과금됩니다. 프롬프트를 1.3배 쓰면 요금도 1.3배입니다.
② 컨텍스트 한계. "200K 컨텍스트"는 글자 200,000자가 아니라 토큰 200,000개입니다. 한글 문서는 같은 분량이라도 더 빨리 한계에 닿습니다.
③ 속도. 출력은 토큰을 하나씩 생성합니다. 토큰이 많으면 그만큼 오래 걸립니다.
즉 "한글이라 요금이 더 나온다"는 체감은 사실입니다. 다만 그 배수가 흔히 말하는 것만큼 크지는 않고, 쓰는 모델에 따라 달라집니다.
직접 재는 법
추측하지 마시고 재세요. 몇 줄이면 됩니다.
npm i js-tiktokenimport { Tiktoken } from "js-tiktoken/lite"
const res = await fetch("https://tiktoken.pages.dev/js/o200k_base.json")
const enc = new Tiktoken(await res.json())
const text = "다음 문서를 세 문장으로 요약해 주세요."
const ids = enc.encode(text)
console.log(ids.length) // 토큰 수
console.log(ids.map(i => enc.decode([i]))) // 어떻게 쪼개졌는지두 번째 줄이 중요합니다. 어떻게 쪼개졌는지 눈으로 보면 프롬프트에서 어느 부분이 비싼지 바로 보입니다.
파이썬이면 pip install tiktoken 후 tiktoken.get_encoding("o200k_base") 입니다.
주의 — 이 숫자가 모든 모델에 통하지는 않습니다
Claude와 Gemini는 토크나이저를 공개하지 않습니다. 위 숫자는 OpenAI 계열 기준이고, 다른 모델에서는 값이 다릅니다.
- Claude: Anthropic API의 토큰 카운트 엔드포인트로 실제 값을 조회할 수 있습니다. 추정 라이브러리는 오차가 큽니다.
- Gemini: SDK의
count_tokens를 씁니다.
원리는 같습니다. BPE 계열이고, 학습 말뭉치에 자주 나온 덩어리일수록 적은 토큰을 씁니다. 배수만 다릅니다.
자주 묻는 질문 (FAQ)
Q. 그럼 프롬프트를 영어로 쓰는 게 이득인가요? A. 토큰만 보면 그렇지만, 답변 품질과 함께 봐야 합니다. 한국어 답변이 필요하면 출력은 어차피 한글 토큰입니다. 그리고 최신 토크나이저에서 차이가 1.3배 수준이라, 영어로 바꾸느라 지시가 부정확해지면 재시도 비용이 더 큽니다. 반복 호출되는 시스템 프롬프트처럼 고정된 긴 지시문만 영어로 두는 절충이 현실적입니다.
Q. 토큰을 줄이는 가장 효과적인 방법은 뭔가요? A. 문장을 다듬는 것보다 같은 내용을 반복해서 보내지 않는 것이 훨씬 큽니다. 프롬프트 캐싱, 컨텍스트 정리, 불필요한 파일 첨부 제거 순으로 효과가 큽니다. 구체적인 방법은 아래 시리즈에 정리해 뒀습니다.
Q. 코드는 토큰을 얼마나 먹나요? A. 코드는 영어 기반이라 자연어 한글보다 유리하지만, 들여쓰기·중괄호·세미콜론이 전부 토큰입니다. 미니파이하지 않은 JSON이나 깊게 중첩된 코드를 통째로 붙이면 생각보다 비쌉니다.
정리
- 토큰은 글자도 단어도 아니다. 학습 말뭉치에 자주 나온 덩어리다.
developer1토큰 vs개발자3토큰 — 단어 단위 차이가 가장 크다.- 문장 단위로는 1.3배(
o200k_base). 흔히 말하는 2~3배는 구형 토크나이저 기준이다. - 토큰 수가 요금·컨텍스트 한계·속도를 동시에 정한다.
- Claude·Gemini는 토크나이저가 비공개다. 추측하지 말고 API로 재라.
이제 "왜 이렇게 비싼가"를 알았으니, 줄이는 방법은 시리즈로 정리해 뒀습니다.
- Claude Code 토큰 절약 [초급편] — 지금 바로 줄이는 5가지
- Claude Code 토큰 절약 [중급편] — 설정과 워크플로우 최적화 7가지
- Claude Code 토큰 절약 [고급편] — 자동화와 아키텍처 레벨 최적화
내 데이터를 붙이는 쪽이 궁금하시면 RAG란? 도 같이 보시면 좋습니다.