
한국어 토큰 효율 - 같은 말인데 왜 한국어가 2배 비싼가, 20년차 개발자의 비용 고통 기록
한국어로 AI API를 사용하면 영어로 같은 내용을 보낼 때보다 평균 2배에서 많게는 4배까지 토큰을 더 소비한다. 이것은 체감이 아니라 실측값이다. "안녕하세요"는 3토큰, "Hello"는 1토큰이다. 같은 의미인데 토큰은 세 배 차이가 난다. 한국어로 서비스를 만들 때 이 사실을 몰랐다면, 당신의 API 비용은 지금 필요 이상으로 나가고 있을 가능성이 높다.
한국어가 토큰을 더 먹는 이유, 된장찌개와 스테이크의 무게 차이
비유를 들자면 이렇다. 스테이크 한 덩어리는 그 자체로 접시에 올라간다. 된장찌개는 된장, 두부, 애호박, 버섯, 국물이 각각 따로 들어간다. 영어 단어는 라틴 알파벳 기반으로 토크나이저가 훈련할 때 충분한 데이터를 봤기 때문에 일반적인 단어가 하나의 토큰으로 압축된다. 한국어는 상대적으로 훈련 데이터가 적었고, 자모 조합 방식의 특성상 쪼개지는 단위가 훨씬 잘다.
한글은 초성, 중성, 종성이 합쳐진 구조다. 토크나이저 입장에서 이 조합의 경우의 수가 영어 알파벳 조합보다 훨씬 많다. 결국 자주 등장하는 영어 단어는 통째로 하나의 토큰이 되지만, 한국어 단어는 두세 조각으로 나뉘는 경우가 많다. 실측해보면 명확하게 드러난다.
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
english_text = "Hello, how are you today? I am a software developer with 20 years of experience."
korean_text = "안녕하세요, 오늘 어떻게 지내세요? 저는 20년 경력의 소프트웨어 개발자입니다."
eng_tokens = enc.encode(english_text)
kor_tokens = enc.encode(korean_text)
print(f"영어 텍스트: {len(english_text)}자, {len(eng_tokens)}토큰")
print(f"한국어 텍스트: {len(korean_text)}자, {len(kor_tokens)}토큰")
print(f"토큰 비율 (한/영): {len(kor_tokens) / len(eng_tokens):.2f}배")
실제로 돌려보면 한국어가 영어보다 1.5배에서 2배 이상 많은 토큰이 나온다. 글자 수가 비슷해도 토큰은 전혀 다르다.
실무에서 마주친 충격, 예산이 두 배로 터진 날
몇 년 전에 고객사용 AI 챗봇을 만들었다. 영어 버전으로 프로토타입을 만들고, 토큰 소비량 기반으로 월 비용을 추정해서 견적서를 냈다. 한국어 서비스로 론칭하고 첫 달 청구서가 나왔을 때 예상의 거의 두 배였다. 처음엔 버그를 의심했다. 로그를 뒤지고 나서야 원인을 찾았다. 한국어 입력 자체가 영어 대비 훨씬 많은 토큰을 쓰고 있었고, 한국어 시스템 프롬프트도 영어로 썼을 때보다 두 배 넘는 토큰이었다.
그날 이후 나는 모든 AI 프로젝트에서 한국어와 영어 토큰 소비를 반드시 사전에 측정한다. 견적 낼 때 한국어 프로젝트는 영어 기준 비용에 최소 1.5에서 2를 곱해서 넣는다.
장점이라면, 이 사실을 알고 나면 역으로 시스템 프롬프트를 영어로 작성하는 전략을 쓸 수 있다. 모델이 한국어 출력을 잘 해주는 한, 내부 지시사항은 영어로 쓰면 토큰을 아낄 수 있다. 단점은 지시사항의 의도가 번역 과정에서 미묘하게 달라질 수 있다는 것이다.
일본어, 중국어와의 비교, 아시아 언어의 공통 고통
한국어만의 문제가 아니다. 일본어, 중국어도 같은 상황이다. 이 언어들은 모두 라틴 알파벳 기반 언어보다 토큰 효율이 낮다. 다만 중국어 한자는 단어 단위 의미 밀도가 높아서 경우에 따라 한국어보다는 효율적일 때도 있다. 일본어는 히라가나, 가타카나, 한자가 섞이기 때문에 패턴이 더 복잡하다.
비유하자면 영어는 알파벳 26개짜리 레고 세트로 만들어진 언어고, 한국어는 블록 종류가 수백 가지인 레고 세트다. 조립할 수 있는 형태는 더 풍부하지만, 그 풍부함이 토크나이저 입장에서는 오히려 비효율로 이어진다.
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
texts = {
"영어": "Artificial intelligence is changing the world rapidly.",
"한국어": "인공지능이 세상을 빠르게 변화시키고 있습니다.",
"일본어": "人工知能は急速に世界を変えています。",
"중국어": "人工智能正在迅速改变世界。"
}
for lang, text in texts.items():
tokens = enc.encode(text)
print(f"{lang}: {len(text)}자 → {len(tokens)}토큰 (글자당 {len(tokens)/len(text):.2f} 토큰)")
한국어 서비스에서 토큰 효율 높이는 실전 전략
이 차이를 알고 난 후에 실무에서 내가 쓰는 전략들이 있다. 첫째, 시스템 프롬프트는 가능한 경우 영어로 작성한다. 모델 성능에 큰 차이가 없다면 지시사항만큼은 영어로 쓰는 게 비용 절감에 효과적이다. 둘째, 한국어 입력은 전처리 단계에서 불필요한 조사나 중복 표현을 정리한다. 특히 챗봇 입력처럼 구어체 텍스트는 맞춤법이 엉망이거나 중복이 많아서 토큰을 쓸데없이 더 쓰는 경우가 많다.
셋째, 출력 언어 제약을 걸 때는 한국어 출력 자체도 길이 제한을 함께 건다. 영어 출력 대비 같은 정보량이면 한국어 출력이 자동으로 토큰을 더 쓴다는 걸 감안해야 한다.
# 한국어 텍스트 전처리로 토큰 절약 예시
import re
import tiktoken
def preprocess_korean(text: str) -> str:
# 연속 공백 제거
text = re.sub(r'\s+', ' ', text)
# 반복 문장부호 정리
text = re.sub(r'[.!?]{2,}', '.', text)
# 앞뒤 공백 제거
text = text.strip()
return text
enc = tiktoken.get_encoding("cl100k_base")
original = "안녕하세요!!! 저는 소프트웨어 개발자입니다... 잘 부탁드립니다^^"
processed = preprocess_korean(original)
print(f"원본: '{original}' → {len(enc.encode(original))}토큰")
print(f"처리후: '{processed}' → {len(enc.encode(processed))}토큰")
한국어 토큰 비효율을 알기 전과 후
AI 개발 초기에 나는 이 차이를 전혀 몰랐다. 영어 기준으로 계획하고 한국어 서비스를 만들었다가 비용을 두 배로 냈다. 그 경험 이후 한국어 프로젝트를 시작할 때는 반드시 토큰 측정부터 한다. 테스트용 입력 100개를 뽑아서 평균 토큰 수를 재고, 그걸 기준으로 월간 예상 비용을 계산한다.
더 중요한 건 이 비효율이 반드시 나쁜 것만은 아니라는 점이다. 모델들이 한국어를 지원하는 이상 토큰 비효율은 감수해야 할 부분이다. 다만 그 비효율을 모른 채 개발하는 것과 알고 대응하는 것은 완전히 다른 결과를 낳는다. 나는 이제 한국어 프로젝트 견적서에 영어 대비 1.8배를 곱하는 걸 당연하게 생각한다. 이게 현실이고, 이 현실을 인정하고 시작하는 게 서비스를 제대로 만드는 출발점이다.
출처 및 참고 자료
- OpenAI 토크나이저 공식 도구: https://platform.openai.com/tokenizer
- tiktoken 라이브러리: https://github.com/openai/tiktoken
- BPE 토크나이제이션 연구: https://arxiv.org/abs/1508.07909
- 다국어 토큰 효율 분석: https://blog.openai.com/new-and-improved-embedding-model/
- Anthropic 다국어 지원 문서: https://docs.anthropic.com/ko/docs/about-claude