~ / posts / developer
💻 개발자

한국어 LLM 토큰 비용 비교, 토크나이저별 1,000자 토큰 수와 세는 법

한국어 서비스에 LLM을 붙이면서 "글자 수에 얼마를 곱하면 토큰 수가 나오느냐"를 찾고 계신가요? 결론부터 말하면 그런 고정 계수는 없어요. 같은 한국어 1,112자를 11개 토크나이저로 직접 재 보니 적게는 592토큰, 많게는 1,966토큰이었어요. GPT-2 어휘를 빼고 요즘 쓰이는 토크나이저만 봐도 1,000자당 532~1,055토큰으로 두 배 가까이 벌어져서, 비용 추정과 길이 제한은 반드시 쓰려는 모델의 토크나이저나 그 회사의 토큰 세기 API로 계산해야 해요.

토크나이저 원리는 알고 있다고 보고, 이 글은 고를 때 필요한 숫자만 다뤄요. 토크나이저별 실측, 공식 단가로 낸 비용, 토큰 세는 방법별 정확도를 나란히 놓았어요.

광고

한국어 토큰 수, 토크나이저마다 얼마나 다른가

예문은 이 글을 위해 직접 쓴 한국어 네 편이에요. 생활 안내 설명문 305자, 이모티콘 섞인 구어체 고객 문의 209자, 명령어·환경 변수가 섞인 배포 문서 321자, 매출·비율이 이어지는 실적 요약 274자, 합쳐서 1,112자(UTF-8 2,356바이트)예요. tiktoken 0.14.0과 허깅페이스 tokenizers 0.23.3으로 각 모델 저장소의 tokenizer.json을 불러 특수 토큰 없이 쟀어요(2026-10-25).

토크나이저어휘 크기설명문구어체기술 문서숫자전체 1,112자1,000자당
gpt250,2576444514584101,9661,768
cl100k_base100,277315195213247970872
o200k_base200,019196114148177635571
Qwen2.5·Qwen3151,665228136167220751675
DeepSeek-V3128,815228152174188743668
EXAONE 3.5102,40014496146203592532
Mistral Nemo131,072165112150203631567
Kanana 1.5128,259200114154177645580
SOLAR 10.7B32,0003802342642951,1731,055

gpt-oss-20b는 o200k_base와, Qwen3는 Qwen2.5와 결과가 같았어요.

한국어 1,000자를 넣었을 때 토큰 수 (직접 쓴 예문 1,112자)
EXAONE 3.5EXAONE 3.5 · 532토큰532토큰Mistral NemoMistral Nemo · 567토큰567토큰o200k_baseo200k_base · 571토큰571토큰Kanana 1.5Kanana 1.5 · 580토큰580토큰DeepSeek-V3DeepSeek-V3 · 668토큰668토큰Qwen2.5Qwen2.5 · 675토큰675토큰cl100k_basecl100k_base · 872토큰872토큰SOLAR 10.7BSOLAR 10.7B · 1,055토큰1,055토큰gpt2gpt2 · 1,768토큰1,768토큰

예문 네 편을 합친 값이에요. 글 종류에 따라 같은 토크나이저 안에서도 1,000자당 토큰 수가 수십 % 달라져요.

단위: 토큰 · 자료: tiktoken 0.14.0 · tokenizers 0.23.3 로 직접 측정 (2026-10-25)
표로 보기
구분1,000자당 토큰
EXAONE 3.5532
Mistral Nemo567
o200k_base571
Kanana 1.5580
DeepSeek-V3668
Qwen2.5675
cl100k_base872
SOLAR 10.7B1,055
gpt21,768

글자 수와 UTF-8 바이트는 글자 수 · 바이트 계산기로 볼 수 있고, 한글이 3바이트인 이유는 한글 한 글자 몇 바이트?에 정리해 두었어요.

설명문과 같은 내용의 영어 문단(569자)도 쟀어요. 영어는 거의 모든 토크나이저에서 120~126토큰이었어요.

같은 내용일 때 한국어 토큰이 영어의 몇 배인가
0123456EXAONE 3.5 · 한국어 ÷ 영어 1.2배1.2EXAONE 3.5Mistral Nemo · 한국어 ÷ 영어 1.3배1.3Mistral Nemoo200k_base · 한국어 ÷ 영어 1.6배1.6o200k_baseKanana 1.5 · 한국어 ÷ 영어 1.6배1.6Kanana 1.5Qwen2.5 · 한국어 ÷ 영어 1.9배1.9Qwen2.5DeepSeek-V3 · 한국어 ÷ 영어 1.9배1.9DeepSeek-V3cl100k_base · 한국어 ÷ 영어 2.6배2.6cl100k_baseSOLAR 10.7B · 한국어 ÷ 영어 2.9배2.9SOLAR 10.7Bgpt2 · 한국어 ÷ 영어 5.3배5.3gpt2

번역문 한 쌍으로 잰 값이라 글마다 달라져요. 자기 데이터의 한·영 쌍으로 다시 재 보세요.

단위: 배 · 자료: 직접 쓴 한국어 설명문 305자와 같은 내용의 영어 569자로 측정 (2026-10-25)
표로 보기
구분한국어 ÷ 영어
EXAONE 3.51.2
Mistral Nemo1.3
o200k_base1.6
Kanana 1.51.6
Qwen2.51.9
DeepSeek-V31.9
cl100k_base2.6
SOLAR 10.7B2.9
gpt25.3

o200k_base에서 한국어 프롬프트는 같은 영어보다 약 1.6배 비싸요. 지시문만 영어로 바꾸면 토큰은 줄지만 답변 품질이 달라질 수 있어서, 평가 세트로 두 버전을 비교한 뒤 정해요.

한국어 작업 비용 계산 — 모델 단가 × 토큰 수

모델10만 건 비용출력이 차지하는 비중
gpt-5-nano약 22.3달러62%
gpt-5-mini약 111.4달러62%
gpt-4.1-mini약 123.4달러44%
gpt-5.4-mini약 282.8달러55%
gpt-5.4약 942.8달러55%
한국어 입력 3,000자·출력 600자 작업 10만 건 비용
gpt-5-nanogpt-5-nano · 22.3달러22.3달러gpt-5-minigpt-5-mini · 111달러111달러gpt-4.1-minigpt-4.1-mini · 123달러123달러gpt-5.4-minigpt-5.4-mini · 283달러283달러gpt-5.4gpt-5.4 · 943달러943달러

추론 모델의 내부 추론 토큰은 출력으로 청구되지만 이 계산에는 넣지 않았어요. 추론량이 많으면 실제 비용은 더 커져요.

단위: 달러 · 자료: OpenAI 가격표 Standard 단가(2026-10-25 확인) × o200k_base 실측 1,000자당 571토큰으로 직접 계산
표로 보기
구분10만 건 비용
gpt-5-nano22.3
gpt-5-mini111
gpt-4.1-mini123
gpt-5.4-mini283
gpt-5.4943

토큰 단가만 나란히 놓고 회사끼리 비교하면 틀려요. Anthropic 토큰 세기 문서는 Claude Opus 4.7부터 새 토크나이저를 써서 같은 입력이 이전 모델보다 약 30% 많은 토큰이 된다고 적어요. 단가 × 내 데이터로 잰 토큰 수를 모델마다 따로 계산해요.

컨텍스트 창과 응답 시간 — 토큰 수가 바꾸는 것

128,000토큰 창을 예로 들면, 실측 비율로 들어가는 한국어는 EXAONE 3.5 약 24만 자, o200k_base 약 22.4만 자, Qwen2.5 약 19만 자, cl100k_base 약 14.7만 자, SOLAR 10.7B 약 12.1만 자, gpt2 약 7.2만 자예요. 같은 "128K"라도 세 배 넘게 차이 나니 RAG 검색 결과를 몇 개 붙일지, 대화 기록을 어디서 자를지는 토큰으로 계산해요.

응답 시간도 출력 토큰 수에 비례해요. 600자 답변은 o200k_base 계열에서 343토큰, cl100k_base 계열에서 523토큰이라 토큰당 속도가 같다면 52% 더 걸려요. 직접 서빙하며 디코딩을 빠르게 하는 방법은 투기적 디코딩 방식별 속도·비용 비교에 있어요.

토큰 세는 방법 고르기 — 로컬 토크나이저 vs 제공사 API

이미 보낸 요청의 실제 값이 필요한지, 견적·자르기면 되는지, 모델을 직접 서빙하는지, 텍스트만 쓰는 OpenAI 요청인지를 차례로 물어 응답 usage, 로컬 토크나이저, tokenizer.json, tiktoken과 여유분, 제공사 토큰 세기 API 중 하나를 고르는 순서도
위에서부터 묻고 처음 '예'가 나오는 칸의 방법을 써요
방법정확도비용·속도쓰는 곳
로컬 tiktoken (OpenAI 계열)본문만, 형식·도구 토큰 빠짐무료, 네트워크 없음견적, 문서 자르기, 대량 전처리
로컬 tokenizer.json (공개 가중치 모델)서빙하는 모델과 같은 파일이면 정확무료, tiktoken보다 느림자체 서빙 모델의 한도 계산
제공사 토큰 세기 API형식·도구·이미지까지 포함호출 1번(네트워크 왕복)보내기 직전 한도 판정
응답의 usage실제 청구 값추가 비용 없음, 사후청구 대조, 모니터링, 견적 보정

로컬 계산이 빠뜨리는 형식 토큰은 OpenAI 쿡북의 tiktoken 토큰 세기 예제 기준으로 gpt-4o 계열에서 메시지마다 3토큰, 답변 시작에 3토큰이에요. 긴 대화와 도구 많은 에이전트에서는 쌓여요.

세는 속도는 걱정하지 않아도 돼요. M1 맥북에서 예문을 이어 붙인 4.7MB를 인코딩하니 tiktoken(o200k_base)이 3.6MB/s, tokenizers(Qwen2.5)가 0.6MB/s였어요. 한국어 3,000자(약 6.4KB)면 느린 쪽도 11ms예요. tiktoken 저장소는 비교 대상보다 3~6배 빠르다고 적는데, 이 측정에서는 약 6배였어요.

자기 데이터로 1,000자당 토큰과 예상 비용을 뽑는 스크립트예요.

# pip install tiktoken tokenizers huggingface_hub
import tiktoken
from huggingface_hub import hf_hub_download
from tokenizers import Tokenizer

def counter(name):
    if "/" not in name:                              # tiktoken 인코딩 이름
        enc = tiktoken.get_encoding(name)
        return lambda s: len(enc.encode(s, disallowed_special=()))
    tok = Tokenizer.from_file(hf_hub_download(name, "tokenizer.json"))
    return lambda s: len(tok.encode(s, add_special_tokens=False).ids)

samples = [line for line in open("my_prompts.txt", encoding="utf-8") if line.strip()]
chars = sum(len(s) for s in samples)

for name in ["o200k_base", "cl100k_base", "Qwen/Qwen2.5-7B-Instruct"]:
    n = sum(map(counter(name), samples))
    per_1000 = n / chars * 1000
    # 입력 3,000자 · 출력 600자, 100만 토큰당 입력 0.25 / 출력 2.00달러 예시
    cost = (3000 * per_1000 / 1000 * 0.25 + 600 * per_1000 / 1000 * 2.00) / 1e6
    print(f"{name:28s} 1,000자당 {per_1000:6.0f}토큰 · 1건 {cost:.6f}달러")

disallowed_special=()은 사용자 텍스트 속 특수 토큰 문자열을 에러 없이 평범한 글자로 세게 해요.

품질과 어휘 크기 — 토큰을 아끼면 잃는 것

숫자를 어떻게 자르는지 봐요. "신규 가입자 45,113명, 매출 1284억 원"을 넣어 보면 o200k_base는 45·,·113, 128·4처럼 최대 세 자리씩 묶었어요. EXAONE 3.5·Qwen2.5·Mistral Nemo는 4·5·,·1·1·3처럼 숫자를 한 자리씩 끊었어요. 숫자 글에서 토큰은 늘지만 자릿값이 일정해지는 설계라, 숫자가 중요한 서비스는 토큰 수보다 정답률을 먼저 재요.

토큰 경계가 바이트 중간에 걸리기도 해요. cl100k_base는 같은 문장에서 규·매·억을 바이트 조각 둘로 나눴어요. 토큰 수로 잘라 디코딩하면 마지막 글자가 깨질 수 있어서, 끝의 불완전한 바이트를 버리는 처리가 필요해요. 글자별 UTF-8 바이트는 유니코드 변환기로 볼 수 있어요.

직접 토크나이저를 만든다면 어휘 크기는 메모리와 맞바꿔요. 임베딩 행렬은 어휘 수 × 은닉 차원이라, 은닉 차원 4,096이면 어휘 3.2만 개가 약 1.3억, 20만 개가 약 8.2억 파라미터(bf16 1.64GB)예요. 입출력 행렬을 따로 두면 두 배라서 80억 모델의 약 20%가 임베딩이 돼요. 반대로 어휘 3.2만 개 SOLAR 10.7B는 한국어에 o200k_base의 1.85배 토큰을 써서, 추론마다 긴 시퀀스 비용을 내요. 어휘 10.2만 개로 가장 적은 토큰을 쓴 EXAONE 3.5를 보면, 어휘를 키우기보다 학습 말뭉치의 한국어 비중을 확보하는 쪽이 효율적이에요. 학습은 허깅페이스 Tokenizers 문서의 트레이너로 해요.

상황별 추천 — 무엇으로 세고 무엇을 고를까

상황추천이유
OpenAI 모델 견적·문서 자르기tiktoken.encoding_for_model()무료·빠름, 본문 토큰은 정확
OpenAI 요청 직전 한도 판정responses/input_tokens형식·도구 토큰까지 포함
Claude 사용count_tokens API토크나이저 비공개, 무료로 셀 수 있음
공개 가중치 모델 직접 서빙서빙 중인 모델의 tokenizer.json같은 파일이면 결과가 같음
한국어 비중이 큰 대량 처리후보 모델 2~3개의 토큰 수를 내 데이터로 측정같은 글이 토크나이저마다 1.6배 넘게 차이
모델 업그레이드같은 요청을 새 모델로 다시 세기세대가 바뀌면 토크나이저가 바뀔 수 있음

LLM 응답을 JSON으로 받는다면 스키마 토큰과 재시도 비용도 함께 봐야 해요. 그 계산은 Structured Outputs vs JSON 모드 비용 비교에 정리해 두었어요.

도입 체크리스트

견적, 요청 처리, 운영 세 칸으로 나눠 실제 트래픽 샘플 측정·한영 배율·출력 비중, 모델 토크나이저로 자르기·형식 토큰 여유분·바이트 경계 처리·출력 상한, usage 기록·캐시 적중·모델 교체 시 재측정을 정리한 체크리스트
왼쪽 칸부터 차례로 확인해요
  1. 실제 트래픽 샘플로 1,000자당 토큰을 재요. 글 종류별로 나눠 재면 편차가 보여요.
  2. 출력 비중을 먼저 계산해요. max_output_tokens와 답변 길이 지시를 정해요.
  3. 자르기는 그 모델의 토크나이저로 해요. 잘린 끝의 불완전한 UTF-8 바이트는 버려요.
  4. 로컬 값에 여유분을 둬요. 형식·도구 토큰 몫을 남기고, 한도 근처면 제공사 API로 다시 세요.
  5. 시스템 프롬프트는 앞쪽에 고정해요. 날짜·사용자 이름 같은 바뀌는 값은 뒤로 보내야 캐시가 맞아요.
  6. usage를 기록해요. 입력·캐시·출력·추론 토큰을 남겨 견적과 청구를 대조해요.
  7. 모델을 바꿀 때마다 다시 재요. 같은 회사 모델도 세대가 바뀌면 30%씩 달라질 수 있어요.

자주 묻는 질문

한국어 1,000자는 몇 토큰인가요?

토크나이저마다 달라요. 직접 쓴 예문 기준으로 o200k_base(gpt-4o·gpt-4.1·gpt-5 계열) 약 571토큰, cl100k_base(gpt-4·gpt-3.5) 약 872토큰, EXAONE 3.5 약 532토큰, Qwen2.5 약 675토큰이었어요. 같은 토크나이저 안에서도 글 종류에 따라 460~650토큰을 오갔어요.

한국어가 영어보다 비싼 이유는 뭔가요?

어휘를 만들 때 한국어 데이터가 적으면 3바이트짜리 한글 음절이 한 토큰으로 묶이지 않아요. 같은 내용으로 재면 o200k_base에서 한국어가 영어의 1.62배, cl100k_base에서 2.60배 토큰을 썼어요. 토큰 단가는 언어와 상관없이 같아서 그 배율이 그대로 비용 차이가 돼요.

tiktoken으로 센 값과 청구된 토큰이 다른 이유는요?

tiktoken은 넘긴 텍스트만 세요. 실제 요청에는 메시지 형식 토큰, 도구 정의, 스키마, 이미지가 더해져요. 정확한 값이 필요하면 responses/input_tokens API나 응답의 usage를 써요.

Claude나 Gemini 토큰 수는 어떻게 미리 세나요?

Claude는 토크나이저가 공개돼 있지 않아서 count_tokens API를 써요. 무료예요. Gemini는 count_tokens 메서드를 써요. 둘 다 실제로 쓸 모델 이름을 넣어 세요.

정리

참고한 자료

#한국어 토큰 수#LLM 토큰 비용 계산#토크나이저 비교#tiktoken o200k_base#토큰 세기 API#한국어 컨텍스트 길이#어휘 크기 선택#프롬프트 비용 줄이기
← 이전 글Content-Encoding 압축 해제 보안, 압축 폭탄과 크기 제한 설정다음 글 →람다 콜드 스타트 줄이기, 프로비저닝된 동시성·SnapStart 고르는 법

더 둘러보기

💻 개발자 다른 도구

🔥 많이 찾는 도구

🔮 재미로 한 번 더

📝 읽어 볼 만한 글

글 전체 보기 →