본문 바로가기

AI,도구

[AI] 한글과 영어의 토큰 수 비교: 글자가 짧아도 토큰은 많을 수 있어요

반응형
한글과 영어 문장의 토큰 수를 tiktoken으로 직접 세어 비교해요. 

 


ChatGPT 생성 이미지

 


 

혹시 한글로 쓴 문장이 영어보다 글자 수는 더 짧은데, AI 사용량은 오히려 더 많이 잡혀서 고개를 갸웃한 적 있으세요?

ChatGPT나 Claude 같은 AI 서비스는 문장을 글자 단위가 아니라 토큰이라는 조각 단위로 읽고, 길이 제한과 사용량도 이 토큰으로 계산해요. 그래서 한글과 영어의 토큰 수를 비교해 보면 글자가 적은 문장이 언제나 적은 토큰으로 표현되는 것은 아니라는 점을 직접 확인할 수 있어요.

 

이 글의 숫자는 2026년 기준 tiktoken 0.14.0에서 측정한 결과예요. 코드를 처음 만져보는 분도 앞 글에서 설치한 환경 그대로 따라올 수 있으니 걱정하지 않으셔도 돼요.

 

이 글에서 알아볼 내용은 '글자 수와 토큰 수가 다른 이유', '한글과 영어 토큰 수를 비교하는 방법', 'ticktoken으로 비교표 만드는 법', 빈 문장에서 생기는 오류를 고치는 법 입니다.

 

한글·영어 토큰 수 비교하는 방법: 먼저 알아둘 네 가지 기준

 

글자가 짧아도 토큰은 많을 수 있어요

 

이걸 알아야 하는 이유는 AI가 한 번에 받을 수 있는 양과 요금이 글자가 아니라 토큰으로 정해지기 때문이에요.

문장을 토큰으로 나누는 프로그램을 토크나이저(tokenizer)라고 하는데, 쉽게 말하면 문장을 조각으로 자르는 가위예요.

 

이 가위는 자주 본 글자 묶음은 크게 한 조각으로, 덜 익숙한 글자는 잘게 여러 조각으로 잘라요.

도장에 비유하면 영어 "Hello"는 도장 하나로 한 번에 찍히지만, 한글 "안"은 도장 두 개를 나눠 찍어야 완성되는 셈이에요.

 

실제로 이번 실습에서 쓰는 설정에서는 "Hello"가 토큰 1개, "안"이 토큰 2개로 나뉘어요. 그래서 글자 수만 보고 AI 입력도 짧다고 결론 내리면 안 되고, 글자 수와 토큰 수를 표에 따로 적어야 해요.

 

같은 뜻이라도 표현이 달라지면 결과가 달라져요

 

영어와 한국어로 비슷한 뜻을 적어도 단어 선택과 문장 길이는 달라질 수 있어요.

존댓말, 생략된 주어, 쉼표 위치 같은 차이도 토큰 수에 영향을 줘요.

 

번역한 문장 한 쌍을 비교하면 언어 차이와 표현 차이가 함께 섞여서 측정되는 거예요.

발 크기가 다른 두 사람의 신발 사이즈만 보고 나라별 차이라고 결론 내리기 어려운 것과 비슷해요. 그래서 이번 실습은 두 예문의 결과를 관찰하는 데까지만 범위를 정해요.

 

공백과 문장부호도 입력의 일부예요

 

사람 눈에는 문장 끝 공백 하나가 거의 보이지 않아요. 하지만 토크나이저에게는 공백 하나도 엄연히 다른 입력이에요.

줄바꿈, 따옴표, 숫자, 특수문자도 모두 비교 조건에 들어가요.

 

인터넷에서 복사한 문장에는 눈에 안 보이는 공백이 섞여 있을 때도 있어서 결과가 달라질 수 있어요. 그래서 원문을 그대로 보관하고 어떤 인코딩을 썼는지 함께 적어두는 편이 좋아요.

 

인코딩(encoding)은 쉽게 말하면 "어떤 가위 규칙으로 잘랐는지"를 가리키는 이름이고, 이 글에서는 cl100k_base라는 인코딩을 사용해요.

 

비율은 관찰값이지 공식이 아니에요

 

글자 수를 토큰 수로 나누면 토큰 하나에 글자가 평균 몇 개 들어갔는지 계산할 수 있어요.

이 글에서는 이 숫자를 "토큰당 글자 수"라고 부를게요.

 

아침에 한 번 잰 체온이 그날 상태를 알려줄 뿐 1년 내내 같은 값은 아니듯, 이 비율도 그 문장에만 해당하는 값이에요.

또 빈 문장은 토큰 수가 0이라서 그대로 나누면 오류가 나요.

비율만 남기기보다 원래 글자 수와 토큰 수를 함께 적어두면 나중에 해석하기 쉬워요.

 

tiktoken으로 한글·영어 토큰 비교표 만드는 법

 

 

앞 글에서 설치한 Python과 tiktoken을 그대로 사용해요.

목표는 "한글이 무조건 불리하다"는 결론이 아니라, 직접 센 결과를 조건과 함께 남기는 거예요.

 

그리고 여기서 빈 문장을 넣었다가 빨간 오류 메시지를 보고 당황하는 분들이 꽤 많아요. 저도 처음엔 여기서 멈칫했거든요. 그래서 그 오류를 일부러 한 번 내보고 고치는 순서로 진행할게요.

 

작업 폴더에 compare_tokens.py 파일을 만들고 아래 코드를 저장해요. 영어 문장, 한글 문장, 빈 문장 세 개를 차례로 토큰으로 바꾸고 글자 수·토큰 수·토큰당 글자 수를 출력하는 코드예요.

 

import tiktoken

encoding = tiktoken.get_encoding("cl100k_base")
samples = [
    "Hello, how are you today?",
    "안녕하세요, 오늘 기분이 어때요?",
    "",
]

for text in samples:
    ids = encoding.encode(text, disallowed_special=())
    ratio = len(text) / len(ids)
    print(repr(text), len(text), len(ids), ratio)
    assert encoding.decode(ids) == text

 

 

 

터미널(Windows는 명령 프롬프트나 PowerShell, macOS는 터미널 앱)을 열고 파일이 있는 폴더에서 아래 명령을 실행해요. macOS에서 python이 없다고 나오면 python3으로 바꿔서 실행해요.

 

두 줄은 정상으로 출력되다가 세 번째 빈 문장에서 아래와 같은 오류가 나요.

 

 

원인은 빈 문장의 토큰 수가 0이라서 0으로 나누기를 시도했기 때문이에요.

수학에서도 0으로는 나눌 수 없듯이 Python도 여기서 멈춰요.

ratio 줄을 아래처럼 바꿔서 토큰이 하나라도 있을 때만 나누고, 없으면 None(값 없음)을 넣도록 고쳐요.

 

ratio = len(text) / len(ids) if ids else None

 

저장한 뒤 같은 명령으로 다시 실행해요. 이번에는 오류 없이 세 줄이 모두 출력되고, 빈 문장의 비율 자리에 None이 보이면 성공이에요.

 

 

결과를 아래 표에 옮겨 적어요. 두 문장의 뜻은 비슷하지만 표현까지 같은 것은 아니라는 점도 표 아래에 함께 적어두세요.

 

입력 글자 수 토큰 수 토큰당 글자 수 인코딩
영어 예문 "Hello, how are you today?" 25 7 약 3.57 cl100k_base
한글 예문 "안녕하세요, 오늘 기분이 어때요?" 18 18 1.00 cl100k_base

 

마지막으로 samples 안의 문장을 본인이 만든 짧은 문장 한 쌍으로 바꿔 다시 실행해요.

결과가 달라졌다면 입력 문장과 인코딩 이름을 함께 기록해 두세요.

 

이 표를 보고 "한국어는 항상 영어보다 이 비율만큼 비싸다"고 쓰면 실험 범위를 넘어서요.

실제 비용에는 요청 구성, AI가 돌려주는 답변 길이, 모델별 가격도 함께 영향을 줘요.

이 실습으로 확인한 것은 두 문장의 토큰화 결과이지 언어 전체의 비용 비교가 아니에요.

 


  • 한글은 항상 영어보다 토큰이 많이 필요한가요?
    • 모든 문장과 모든 토크나이저에 대해 단정할 수는 없어요.
    • 토크나이저가 무엇을 보고 학습했는지, 어떤 규칙으로 자르는지에 따라 결과가 달라지거든요.
    • 이번 두 예문에서는 한글 쪽 토큰이 더 많다는 차이가 관찰됐어요.
    • 다른 문장이나 다른 인코딩에서는 차이가 줄거나 달라질 수 있어요.
    • 실제로 AI에 넣을 문장 여러 개를 모아 같은 코드로 측정해 보는 것이 가장 정확해요.
  • 비용을 아끼려고 한국어를 전부 영어로 번역해야 하나요?
    • 토큰 수만 보고 결정하기는 어려워요.
    • 번역하는 과정 자체에 시간과 비용이 들고, 뜻이 미묘하게 달라질 수도 있어요.
    • 영어로 넣었더니 결과가 부정확해져서 다시 요청하게 되면 오히려 비용이 늘어나요. 그래서 품질과 비용을 같은 조건에서 함께 비교해 보는 것이 먼저예요.
    • 번역보다 먼저 반복되는 설명이나 중복 자료를 줄일 수 있는지 살펴보는 편이 효과가 확실해요.
  • 제 결과가 예제와 다른 숫자로 나오면 무엇을 확인하나요?
    • 먼저 입력 문장이 공백과 문장부호까지 예제와 똑같은지 확인해요.
    • 코드의 `get_encoding("cl100k_base")` 부분이 그대로인지도 봐요.
    • 터미널에서 `pip show tiktoken`을 실행하면 설치된 버전을 확인할 수 있으니 결과와 함께 적어두세요.
    • 다른 모델용 인코딩을 사용했다면 숫자가 다른 것이 자연스러운 결과예요.
    • 숫자를 맞추려고 입력을 고치기보다, 어떤 조건이 차이를 만들었는지 찾는 것이 더 중요해요.

한글·영어 토큰 수 비교 핵심 총정리

짧은 문장이 반드시 적은 토큰으로 나뉘는 것은 아니에요. 언어뿐 아니라 표현·공백·인코딩 조건을 함께 기록해요.

빈 문장처럼 토큰이 0개인 입력은 비율을 계산하지 않도록 처리해요. 예문 두 개의 결과를 언어 전체의 특성으로 일반화하지 않아요.

직접 코드를 돌려서 숫자를 확인해 보셨다면 이미 토큰을 제대로 다루기 시작하신 거예요. 이 글이 도움이 됐다면 북마크해두세요! 

반응형