
같은 뜻의 문장을 한글과 영어로 넣어 보니, 요즘 모델이 쓰는 o200k_base 기준으로 한글이 영어보다 토큰이 1.3배에서 1.9배 많았어요. 대신 예전 GPT-4가 쓰던 cl100k_base보다는 한글 토큰이 최대 37% 줄었습니다.
API 요금과 컨텍스트 한도는 글자 수가 아니라 토큰 수로 계산돼요. 그래서 한글 프롬프트가 실제로 몇 토큰인지 궁금해서 OpenAI가 공개한 토크나이저로 직접 세어 봤습니다.
테스트 환경: macOS 26.6.2, Node v26.5.0, js-tiktoken 1.0.21 (2026년 10월 18일 실행)
실험 전에 세운 가설
OpenAI 도움말 문서 "What are tokens and how to count them?"에는 영어 기준으로 1토큰이 대략 4글자라고 나와 있어요. 같은 문서에서 다른 언어는 글자와 토큰의 관계가 다를 수 있다고 따로 적어 두었고요.
그래서 가설은 두 가지였어요. 한글은 영어보다 글자당 토큰이 많을 것이다. 그리고 새 인코딩(o200k_base)은 예전 인코딩(cl100k_base)보다 한글을 더 적은 토큰으로 자를 것이다.
어떤 모델이 어떤 인코딩을 쓰는지는 OpenAI tiktoken 저장소의 model.py에서 확인했어요(2026년 10월 18일 확인). gpt-5, gpt-4.1, gpt-4o, o1, o3는 o200k_base이고, gpt-4와 gpt-3.5-turbo는 cl100k_base로 적혀 있습니다.
이렇게 세어 봤어요
파이썬 tiktoken도 있지만 이번에는 같은 인코딩을 쓰는 자바스크립트 버전 js-tiktoken을 썼어요. 설치는 npm 한 줄이면 됩니다.
npm install js-tiktoken
비교할 문장은 짧은 것 한 쌍, 긴 것 한 쌍으로 골랐어요. en과 ko, en2와 ko2가 서로 같은 뜻입니다.
import { getEncoding } from 'js-tiktoken';
const o200k = getEncoding('o200k_base');
const cl100k = getEncoding('cl100k_base');
const samples = [
['en', 'Please summarize this meeting note in three bullet points.'],
['ko', '이 회의록을 세 줄로 요약해 주세요.'],
['en2', 'Please draft the quote for the client by next Monday, and include the amount with VAT.'],
['ko2', '다음 주 월요일까지 고객사에 보낼 견적서 초안을 작성해 주시고, 부가세 포함 금액도 함께 적어 주세요.'],
];
console.log('id chars o200k cl100k chars/token(o200k)');
for (const [k, s] of samples) {
const n = [...s].length, a = o200k.encode(s).length, b = cl100k.encode(s).length;
console.log(k.padEnd(4), String(n).padStart(5), String(a).padStart(6), String(b).padStart(7), (n / a).toFixed(1).padStart(10));
}
const w = '안녕하세요';
console.log('\n' + w + ' o200k:', o200k.encode(w).map(t => JSON.stringify(o200k.decode([t]))).join(' '));
console.log(w + ' cl100k:', cl100k.encode(w).length, 'tokens');
실행 결과 그대로
node count.mjs 로 실행한 출력이에요.
id chars o200k cl100k chars/token(o200k)
en 58 10 10 5.8
ko 20 13 17 1.5
en2 86 18 18 4.8
ko2 57 34 54 1.7
안녕하세요 o200k: "안" "녕하세요"
안녕하세요 cl100k: 5 tokens
| 문장 | 글자 수 | o200k_base | cl100k_base |
|---|---|---|---|
| 영어 짧은 문장 | 58 | 10 | 10 |
| 한글 짧은 문장 | 20 | 13 | 17 |
| 영어 긴 문장 | 86 | 18 | 18 |
| 한글 긴 문장 | 57 | 34 | 54 |
숫자가 말해 주는 것
첫 번째 가설은 맞았어요. 같은 뜻인데 한글은 짧은 문장에서 13토큰으로 영어 10토큰의 1.3배, 긴 문장에서는 34토큰으로 영어 18토큰의 약 1.9배였어요. 글자 수는 한글이 훨씬 적은데도 토큰은 더 많습니다.
글자당 토큰으로 보면 차이가 더 분명해요. 영어는 1토큰에 4.8에서 5.8글자가 들어갔고, 한글은 1.5에서 1.7글자였어요. 한글 1,000자짜리 문서를 넣으면 대략 600에서 670토큰으로 잡고 여유를 두는 게 안전합니다.
두 번째 가설도 맞았어요. 영어는 두 인코딩이 똑같았지만, 한글 긴 문장은 cl100k_base 54토큰에서 o200k_base 34토큰으로 20토큰 줄었어요. "안녕하세요"도 예전 인코딩은 5조각이었는데 새 인코딩은 "안"과 "녕하세요" 2조각으로 잘랐습니다.
내 프롬프트 토큰 줄이는 요령
한글 토큰이 아깝다고 영어로 바꿔 쓸 필요까지는 없어요. 대신 같은 내용을 여러 번 붙여 넣지 않기, 표나 로그는 필요한 줄만 넣기처럼 입력 자체를 줄이는 게 효과가 큽니다. 도움말 문서도 프롬프트를 줄이거나, 중복 문맥을 빼거나, 큰 입력은 나눠서 보내라고 안내하고 있어요.
그리고 이렇게 센 숫자는 순수 텍스트 기준이에요. 같은 문서에 따르면 실제 API 요청에는 메시지 구조, 도구, 이미지, 파일이 더해질 수 있어서 응답의 usage 값(input_tokens, output_tokens)으로 최종 확인하는 게 정확합니다.
Q. ChatGPT 화면에서도 토큰 수를 볼 수 있나요?
채팅 화면에는 따로 안 나와요. OpenAI 웹 Tokenizer 페이지에 붙여 넣거나, 위처럼 tiktoken으로 세면 됩니다.
Q. Claude나 Gemini도 같은 숫자인가요?
아니에요. 이 실험은 OpenAI 인코딩 기준이라 다른 회사 모델은 토큰 수가 다르게 나올 수 있어요.
관련 글: ChatGPT 대화 기록 내보내기(백업) 자주 묻는 질문 6가지
출처: OpenAI Help Center "What are tokens and how to count them?", OpenAI tiktoken GitHub 저장소 tiktoken/model.py (모두 2026년 10월 18일 확인), 토큰 수는 js-tiktoken 1.0.21로 직접 실행
댓글