본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

Tokenizer의 함정: 한국어와 코드

~22 min · multilingual, code, gotcha

Level 0Window Watcher
0 XP0/50 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

같은 뜻인데 값이 딴판

CJK — 한국어, 일본어, 중국어 — 는 같은 내용을 담는 데 영어보다 token을 2-3배 먹어. 이유는 시시해. BPE tokenizer 대부분이 영어 위주 corpus에서 학습돼서, CJK 글자는 훨씬 잘게 부서지거든. 한글 한 글자가 2-4 token으로 쪼개지기도 해.

이중언어 서비스면 이 차이가 긴 session 내내 쌓여. 한국어 쓰는 사람이 똑같은 길이로 대화하고도 API 청구서를 2-3배 내는 거지. 그러니까 미리 예산을 그렇게 잡든가, tokenizer까지 반영한 가격 모형을 쓰든가 해야 해. 없는 셈 치는 게 흔하고 비싼 실수야.

코드도 비싸다

소스 코드는 산문보다 빽빽해. tokenizer 입장에서는 같은 이름이 두 번 나오는 걸 거의 못 봤거든. handleAuthenticationCallback 같은 함수 이름은 4-6 token으로 쪼개지고, 호출되는 자리마다 그게 그대로 반복돼. 길고 친절한 변수명은 등장하는 곳마다 예산을 태운다는 뜻이야.

실전에서는

비용이 중요하면 모형한테 보낼 코드는 짧고 흔한 이름을 써. userIdtheCurrentlyAuthenticatedUserIdentifier보다 훨씬 적게 쪼개지거든. 한꺼번에 올리기 전엔 쓸데없는 공백이랑 꼬리에 달린 주석을 정리하고. CJK 자료는 원문에 짧은 영어 요약을 붙여서 보내. 양쪽 전문을 다 보내는 것보다 나아.

CJK 함정: 영어 기준으로 token 예산 잡아놓고 그대로 한국어 워크플로를 돌리면, 눈에 보이는 길이의 1/3쯤에서 한도를 친다. 처음부터 그걸 계산에 넣어.

Code

CJK랑 영어 재보기·python
from tiktoken import encoding_for_model
enc = encoding_for_model("gpt-5")

en = "The model reads fragments."
ko = "모델은 조각으로 읽는다."

print(f"EN chars={len(en)} tokens={len(enc.encode(en))}")
print(f"KO chars={len(ko)} tokens={len(enc.encode(ko))}")
# KO often shows ~2-3x tokens per character vs EN.
이름 길이가 무는 값·python
import tiktoken
enc = tiktoken.encoding_for_model("gpt-5")
short = "userId"
long = "theCurrentlyAuthenticatedUserIdentifier"
for name in [short, long]:
    print(name, "->", len(enc.encode(name)), "tokens")

External links

Exercise

200단어짜리 영어 글이랑 그걸 옮긴 한국어 글을 골라봐. 둘 다 token을 세고, 글자당 token 비율을 내봐. 그 숫자로 실제 워크플로 하나에 CJK까지 계산에 넣은 예산을 잡아보고.
Hint
token당 4글자로 잡았는데 실제가 1.5글자면, 진짜 한도는 생각했던 것의 38%야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.