0Pricing
AI Engineering Academy · 강의

토큰이란 무엇인가

tiktoken 라이브러리로 실제 텍스트를 토큰화하고, 단어, 구두점, 공백이 서로 다른 모델에서 토큰 시퀀스로 어떻게 변환되는지 알아봅니다.

토큰이란 무엇인가은(는) CoddyKit의 무료 AI Engineering Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Engineering Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Engineering Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

LLM은 단어가 아니라 토큰을 처리합니다

LLM에 텍스트를 보내면 모델은 문자나 단어를 보는 것이 아니라 토큰을 봅니다. 토큰은 모델의 어휘가 하나의 정수 ID로 매핑하는 텍스트 조각입니다. 토크나이저에 따라 토큰은 전체 단어, 단어의 일부, 구두점 또는 공백일 수 있습니다.

토큰을 이해하는 것은 실무적으로 중요합니다. OpenAI의 가격은 토큰 단위로 책정되고, 문맥 창도 토큰으로 측정되며, 최대 응답 길이는 max_tokens로 제어되기 때문입니다. 비용과 동작에서 발생하는 예기치 않은 문제는 거의 항상 텍스트가 토큰화되는 방식을 잘못 이해한 데서 비롯됩니다.

토큰화 작동 방식: BPE

GPT 모델은 Byte Pair Encoding(BPE) 토큰화를 사용합니다. BPE는 개별 바이트로 이루어진 어휘에서 시작하여 원하는 어휘 크기에 도달할 때까지 가장 자주 인접하는 쌍을 반복적으로 병합합니다. OpenAI의 GPT 모델은 약 100,000개의 토큰으로 이루어진 어휘를 사용합니다.

그 결과 흔한 단어는 하나의 토큰이 되지만(hello는 하나의 토큰), 드물거나 새로 만든 단어는 여러 하위 단어 토큰으로 분할됩니다(subaqueous는 sub, aque, ous라는 세 토큰이 될 수 있습니다). 이를 통해 모델은 한 번도 본 적 없는 단어라도 익숙한 더 작은 조각을 조합하여 모든 텍스트를 처리할 수 있습니다.

tiktoken으로 토큰 수 세기

OpenAI는 API를 호출하지 않고 로컬에서 텍스트를 토큰화할 수 있도록 tiktoken 라이브러리를 제공합니다. 요청을 보내기 전에 토큰 수를 세어 비용을 추정하고 문맥 창의 범위 안에 있는지 확인하려면 이 기능이 필수적입니다.

import tiktoken

# Get the encoding for a specific model
enc = tiktoken.encoding_for_model('gpt-4o')

text = 'Hello! How many tokens does this sentence use?'
tokens = enc.encode(text)

print(f'Text: {text}')
print(f'Token count: {len(tokens)}')
print(f'Token IDs: {tokens}')

# You can also decode tokens back to text
decoded = enc.decode(tokens)
print(f'Decoded: {decoded}')

# Inspect individual token strings
for token_id in tokens:
    token_str = enc.decode([token_id])
    print(f'  Token {token_id}: "{token_str}"')

실제 토큰 수

유용한 대략적인 기준은 다음과 같습니다. 토큰 1개 ≈ 영어 텍스트 4자, 또는 약 0.75단어입니다. 따라서 토큰 1,000개는 대략 750단어 또는 텍스트 3~4페이지에 해당합니다. 그러나 이 비율은 크게 달라질 수 있습니다.

  • 흔한 영어 단어: 각각 약 1토큰
  • 흔하지 않은 기술 용어: 각각 2~4토큰
  • 숫자: 토큰당 숫자 1개인 경우가 많음(따라서 '12345'는 5토큰)
  • 코드: 편차가 크지만 Python은 일반적으로 기호당 약 1~2토큰으로 효율적임
  • 라틴 문자가 아닌 문자 체계(중국어, 아랍어): 문자당 1토큰인 경우가 많아 영어보다 단어당 비용이 훨씬 높음

콘텐츠 유형별 토큰화

tiktoken을 사용하여 콘텐츠 유형에 따라 토큰 수가 얼마나 크게 달라지는지 살펴보겠습니다.

import tiktoken

enc = tiktoken.encoding_for_model('gpt-4o')

examples = {
    'English sentence': 'The quick brown fox jumps over the lazy dog.',
    'Number sequence': '1234567890',
    'Python code': 'def fibonacci(n):\n    if n <= 1:\n        return n\n    return fibonacci(n-1) + fibonacci(n-2)',
    'Technical jargon': 'autoregressive transformers tokenization subword BPE',
    'URL': 'https://api.openai.com/v1/chat/completions',
    'Chinese text': '大型语言模型使用令牌处理文本',
}

for label, text in examples.items():
    count = len(enc.encode(text))
    ratio = len(text) / count
    print(f'{label}: {count} tokens ({ratio:.1f} chars/token)')

채팅 메시지의 토큰화 방식

채팅 API 호출의 전체 토큰 수에는 메시지의 텍스트 내용뿐 아니라 채팅 템플릿이 추가하는 형식 지정 오버헤드도 포함됩니다. 각 메시지에는 역할 레이블과 구분자를 위한 추가 토큰이 몇 개씩 있습니다. OpenAI의 문서에는 다음과 같은 공식이 제시되어 있습니다.

  • 각 메시지는 형식 지정 오버헤드로 약 4토큰을 추가함
  • 모든 응답은 어시스턴트 역할을 준비하기 위한 추가 토큰 3개로 시작함

짧은 대화에서는 이 오버헤드가 무시할 만하지만, 긴 대화를 관리하는 시스템에서는 누적됩니다. tiktoken 라이브러리는 전체 메시지 배열의 토큰 수를 올바르게 계산하는 도우미 함수를 제공합니다.

import tiktoken

def count_messages_tokens(messages, model='gpt-4o'):
    enc = tiktoken.encoding_for_model(model)
    # 4 tokens per message (role + content structure), 3 for reply priming
    total = 3
    for msg in messages:
        total += 4
        for key, value in msg.items():
            total += len(enc.encode(str(value)))
    return total

messages = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    {'role': 'user', 'content': 'What is the capital of France?'},
    {'role': 'assistant', 'content': 'The capital of France is Paris.'},
    {'role': 'user', 'content': 'And what is the population?'},
]

print(f'Total tokens: {count_messages_tokens(messages)}')

모델별 토큰 제한

각 모델에는 토큰으로 측정되는 최대 문맥 창이 있습니다. 2025년 기준 대표적인 제한은 다음과 같습니다.

  • gpt-4o: 문맥 128,000토큰, 출력 최대 16,384토큰
  • gpt-4o-mini: 문맥 128,000토큰, 출력 최대 16,384토큰
  • Claude 3.5 Sonnet: 문맥 200,000토큰
  • Gemini 1.5 Pro: 문맥 1,000,000토큰

입력 토큰과 출력 토큰의 합은 문맥 창을 초과해서는 안 됩니다. 이를 초과하면 context_length_exceeded 오류가 발생합니다. 긴 문서에 대한 요청을 보내기 전에는 항상 토큰 수를 확인하십시오.

토큰과 가격

OpenAI는 입력 토큰(보내는 프롬프트)과 출력 토큰(받는 응답)에 각각 요금을 부과합니다. 출력 토큰은 순차적으로 생성해야 하므로 일반적으로 입력 토큰보다 3~4배 비쌉니다. 2025년 초 기준으로 gpt-4o-mini의 예시 가격은 입력 토큰 100만 개당 약 $0.15, 출력 토큰 100만 개당 약 $0.60입니다.

이는 토큰 2,000개인 프롬프트와 토큰 500개인 응답의 요청 비용이 대략 ($0.15 × 2/1000 + $0.60 × 0.5/1000) = $0.00060이라는 뜻입니다. 하루 10,000건의 요청을 처리하면 하루 $6로, 감당할 수 있는 수준이지만 사용량에 따라 증가합니다. 운영 규모에서는 캐싱, 모델 라우팅, 토큰 최소화가 모두 중요해집니다.

의미를 잃지 않고 토큰 수 줄이기

프롬프트가 짧을수록 비용이 줄고 모델의 응답을 위한 공간이 늘어납니다. 일반적인 토큰 감소 기법은 다음과 같습니다.

  • 중복 지시 제거: 'Please be so kind as to...' → 'Please...'
  • 예시 압축: 퓨샷 예시마다 필요한 최소한의 단어만 사용
  • 구조화된 프롬프트에서 필드 이름 축약: 'Question:'과 'Answer:' 대신 'Q:'와 'A:' 사용
  • 구조화된 문맥에는 산문 대신 JSON 사용: 같은 데이터를 산문으로 설명하는 것보다 JSON이 토큰 효율이 높음

압축 전후에 tiktoken을 실행하여 실제로 토큰을 절약했는지 확인하십시오. 일부 '압축'은 뜻밖에 토큰 수를 늘리기도 합니다.

특수 토큰과 제어 토큰

텍스트 토큰 외에도 모델의 어휘에는 입력을 구조화하는 데 사용되는 특수 토큰이 포함되어 있습니다. 일반적인 예로는 문서의 끝을 표시하는 <|endoftext|>와 내부적으로 사용하는 ChatML 형식에서 채팅 메시지 구분자로 쓰이는 <|im_start|> 및 <|im_end|>가 있습니다.

OpenAI API를 사용할 때는 이러한 토큰을 직접 관리할 필요가 없습니다. SDK가 대신 처리하기 때문입니다. 하지만 이러한 토큰의 존재를 알면 '빈' 메시지가 포함된 요청도 때때로 토큰 몇 개를 소비하는 이유를 이해할 수 있습니다. 또한 사용자 입력을 정제하지 않은 상태에서 <|...|> 패턴을 포함한 원시 문자열을 직접 구성해서는 안 되는 이유이기도 합니다. 이러한 패턴이 모델의 입력 형식을 방해할 수 있기 때문입니다.

보내기 전에 항상 세기

이 레슨의 실질적인 핵심은 동적으로 조립되는 프롬프트가 포함된 요청을 보내기 전에 항상 토큰 수를 세라는 것입니다. tiktoken을 감싸는 작은 도우미 함수를 작성하고, 메시지 배열을 조립하는 지점에서 호출하십시오. 토큰 수를 기록하여 시간에 따른 변화를 모니터링할 수 있도록 하십시오.

RAG 시스템에서는 이것이 특히 중요합니다. 프롬프트에 삽입하는 검색된 청크의 크기가 크게 달라질 수 있으므로 전체 크기가 모델의 문맥 창 안에 유지되는지 확인해야 합니다. RAG 파이프라인 레슨에서 바로 이러한 토큰 인식형 문맥 조립을 구축해 보겠습니다.

import tiktoken

def token_count(text, model='gpt-4o'):
    enc = tiktoken.encoding_for_model(model)
    return len(enc.encode(text))

def safe_assemble_prompt(system, user_content, max_tokens=120000):
    combined = system + user_content
    count = token_count(combined)
    if count > max_tokens:
        raise ValueError(
            f'Prompt too long: {count} tokens (limit {max_tokens})'
        )
    return [{'role': 'system', 'content': system},
            {'role': 'user', 'content': user_content}]

빠른 확인

이 레슨에서 배운 AI 엔지니어링 개념을 확인해 보십시오.

레슨 요약

이 레슨에서는 LLM이 단어가 아니라 토큰으로 텍스트를 처리하며, 약 100,000개의 항목으로 이루어진 어휘와 BPE 토큰화를 사용한다는 점, tiktoken 라이브러리를 사용하면 API 호출 전에 로컬에서 토큰 수를 세어 비용을 추정하고 문맥 제한을 확인할 수 있다는 점, 그리고 가격은 토큰 단위로 책정되며 출력 토큰이 입력 토큰보다 훨씬 비싸다는 점을 배웠습니다. 다음으로 문맥 창이 무엇인지, 애플리케이션을 어떻게 제한하는지, 모델마다 어떻게 다른지 살펴보겠습니다.

자주 묻는 질문

“토큰이란 무엇인가” 강의는 무료인가요?

네 — “토큰이란 무엇인가” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Engineering Academy 강의 전체를 잠금 해제할 수 있습니다. AI Engineering Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“토큰이란 무엇인가”에서 뭘 배우나요?

tiktoken 라이브러리로 실제 텍스트를 토큰화하고, 단어, 구두점, 공백이 서로 다른 모델에서 토큰 시퀀스로 어떻게 변환되는지 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 AI Engineering Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AI Engineering Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AI Engineering Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“토큰이란 무엇인가” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AI Engineering Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AI Engineering Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 토큰이란 무엇인가
  2. 컨텍스트 윈도우: 크기와 의미
  3. API 비용 계산 및 예측
  4. 컨텍스트 한도 안에서 작업하는 전략
← AI Engineering Academy(으)로 돌아가기