본문 바로가기
카테고리 없음

토큰이란 무엇인가 AI가 글을 조각내는 방식, 개발자가 직접 겪은 충격적인 진실

by BOOST YOUR INFORMATION 2026. 5. 11.

토큰이란 무엇인가 AI가 글을 조각내는 방식, 개발자가 직접 겪은 충격적인 진실 참조 이미지
토큰이란 무엇인가 AI가 글을 조각내는 방식

 

토큰이란 무엇인가 - AI가 글을 조각내는 방식, 20년차 개발자가 직접 겪은 충격적인 진실

AI에게 글을 보내는 순간, 그 글은 우리가 보는 형태 그대로 전달되지 않는다. AI는 텍스트를 "토큰"이라는 최소 단위로 분해한 뒤에야 비로소 이해한다. 토큰은 단어 전체가 될 수도 있고, 단어의 일부 조각이 될 수도 있으며, 공백 하나, 특수문자 하나가 독립된 토큰이 되기도 한다. 이 사실을 20년 가까이 소프트웨어를 만들어온 내가 처음 제대로 이해한 건 API 요금 청구서를 보고 나서였다.

토큰, 레고 블록인가 아니면 퍼즐 조각인가

처음에 토큰을 들었을 때 나는 단어랑 같은 거 아니냐고 생각했다. 완전히 틀렸다. 토큰은 레고 블록에 가깝다. 레고로 집을 만들 때 창문 하나가 통짜 한 덩어리가 아니라 여러 블록의 조합인 것처럼, AI는 텍스트를 통짜로 처리하지 않는다. "unfortunately"라는 단어는 영어에서 "un", "for", "tun", "ately" 이런 식으로 쪼개질 수 있다. 실제로 OpenAI의 tiktoken 라이브러리로 직접 확인해보면 예상과 전혀 다른 결과가 나온다.

현장에서 이 개념을 처음 접한 건 GPT API를 연동하는 프로젝트였다. 입력 텍스트 길이를 글자 수로만 계산하다가 토큰 한도를 초과해서 오류가 터졌다. 그때서야 "아, 글자 수랑 토큰 수는 다른 거구나"를 몸으로 배웠다. 문서를 미리 읽었으면 쉽게 피할 수 있는 실수였는데, 경험으로 배우는 건 항상 비용이 따른다.

장점은 이 토큰 시스템 덕분에 AI가 전혀 본 적 없는 단어도 어느 정도 처리할 수 있다는 점이다. 조각들의 조합으로 새로운 단어를 추론하기 때문이다. 단점은 직관과 다르게 작동하기 때문에 초반에 예상치 못한 오류를 만나기 쉽다는 점이다.

tiktoken으로 직접 토큰을 확인하는 코드다.

import tiktoken

enc = tiktoken.encoding_for_model("gpt-4")

text = "unfortunately this is a token test"
tokens = enc.encode(text)

print("토큰 수:", len(tokens))
print("토큰 목록:", [enc.decode([t]) for t in tokens])

공백도 토큰이다, 눈에 안 보이는 비용

이건 진짜로 충격이었다. 공백, 줄바꿈, 특수문자가 전부 토큰을 소비한다. 마치 택배 요금을 계산할 때 박스 무게만 보는 게 아니라 완충재, 테이프, 포장지까지 무게에 포함되는 것과 같다. 내가 보내는 텍스트 안의 들여쓰기, 빈 줄, 마크다운 기호 전부가 토큰을 잡아먹는다.

실무에서 이게 문제가 된 건 시스템 프롬프트를 예쁘게 포맷팅해서 넣었을 때다. 가독성을 위해 줄바꿈과 들여쓰기를 넣었더니 실제 내용보다 포맷팅에 쓰이는 토큰이 더 많은 상황이 생겼다. 그냥 한 줄로 쭉 쓰는 게 비용 면에서는 훨씬 나았다. 아름다운 코드가 비싼 코드가 되는 순간이었다.

장점은 의식적으로 토큰을 관리하면 API 비용을 10~30%까지 줄일 수 있다는 것이다. 단점은 사람이 읽기 편한 포맷과 AI에게 경제적인 포맷이 다르다는 데서 오는 불편함이다.

BPE 알고리즘, AI가 글을 쪼개는 방식

토큰을 만드는 핵심 방식은 BPE, Byte Pair Encoding이다. 처음에 이걸 들었을 때 암호화 기술인가 싶었는데 전혀 아니다. 원래 데이터 압축 알고리즘이었던 걸 NLP에 적용한 것이다. 원리는 간단하다. 가장 자주 같이 등장하는 문자 쌍을 찾아서 하나의 토큰으로 합치는 걸 반복한다. 마치 자주 쓰는 단어 조합을 사전에 올리는 것처럼.

이 방식 덕분에 자주 쓰이는 일반적인 단어는 하나의 토큰으로 처리되고, 드문 단어나 전문 용어는 여러 토큰으로 쪼개진다. 의학 용어나 법률 용어가 유독 토큰을 많이 잡아먹는 이유가 여기 있다. 실무에서 전문 분야 텍스트를 다룰 때 토큰 예산을 넉넉히 잡아야 하는 이유다.

현장에서 느낀 건, 전문 용어가 많은 기술 문서를 AI에 넣을 때 일반 텍스트보다 훨씬 많은 토큰이 소비된다는 점이다. 처음엔 이유를 몰라서 당황했는데 BPE를 이해하고 나서야 납득이 됐다.

토큰 수를 미리 예측하는 법

API를 쓰다 보면 요청 전에 토큰 수를 미리 알고 싶을 때가 많다. 비용 계산도 해야 하고, 컨텍스트 한도도 넘지 말아야 한다. 영어는 대략 4글자가 1토큰, 단어 기준으로는 0.75단어가 1토큰이라는 경험칙이 있다. 한국어는 다르다. 이건 다음 주제에서 다루겠지만 한국어는 같은 내용으로도 영어 대비 토큰이 훨씬 많이 나온다.

실무에서 나는 처리하기 전에 tiktoken으로 토큰 수를 미리 세는 유틸 함수를 만들어 두고 쓴다. 실제 API 호출 전에 로그로 남겨두면 나중에 비용 분석할 때 정말 유용하다.

import tiktoken

def count_tokens(text: str, model: str = "gpt-4") -> int:
    enc = tiktoken.encoding_for_model(model)
    return len(enc.encode(text))

def estimate_cost(input_text: str, output_tokens: int = 500, model: str = "gpt-4"):
    input_tokens = count_tokens(input_text, model)
    
    # gpt-4 기준 (달러)
    input_cost = input_tokens * 0.00003
    output_cost = output_tokens * 0.00006
    
    return {
        "input_tokens": input_tokens,
        "output_tokens": output_tokens,
        "total_tokens": input_tokens + output_tokens,
        "estimated_cost_usd": round(input_cost + output_cost, 6)
    }

sample_text = "안녕하세요. 오늘 날씨가 어떤가요? AI 토큰 테스트입니다."
result = estimate_cost(sample_text)
print(result)

개발자로서 토큰을 이해하기 전과 후

나는 꽤 오랫동안 토큰을 대충 이해한 채로 개발을 했다. "뭔가 글자 단위로 세는 거겠지" 하고 넘겼다. 그 댓가는 예상치 못한 API 오류와 뻥튀기된 비용 청구서였다. 특히 고객사 프로젝트에서 API 비용이 예상의 두 배로 나왔을 때 원인을 파악하는 데 하루를 쓴 기억이 있다. 결국 시스템 프롬프트에 집어넣은 예시 데이터가 토큰을 어마어마하게 소비하고 있었던 거였다.

토큰을 제대로 이해하고 나서 달라진 건 AI를 다루는 태도다. 전에는 프롬프트를 그냥 자연스럽게 글 쓰듯 넣었다. 지금은 토큰 효율을 항상 의식한다. 불필요한 반복 표현을 줄이고, 예시는 꼭 필요한 것만 넣고, 포맷팅은 최소화한다. 이 습관 하나로 동일한 기능을 비용의 60~70% 수준에서 구현할 수 있게 됐다.

토큰은 단순한 기술 개념이 아니다. AI를 실무에서 제대로 쓰려면 토큰이 어떻게 동작하는지, 무엇이 토큰을 소비하는지, 어떻게 하면 같은 결과를 더 적은 토큰으로 얻을 수 있는지를 몸에 익혀야 한다. 20년 가까이 코드를 짜면서 배운 교훈 중 하나는, 기본 개념을 제대로 이해한 사람이 결국 더 빠르고 더 싸게 문제를 해결한다는 것이다. AI 시대에 토큰이 바로 그런 기본 개념이다.

출처 및 참고 자료

  • OpenAI Tokenizer: https://platform.openai.com/tokenizer
  • tiktoken GitHub: https://github.com/openai/tiktoken
  • Anthropic 토큰 문서: https://docs.anthropic.com/ko/docs/about-claude/models
  • Hugging Face Tokenizers: https://huggingface.co/docs/tokenizers
  • BPE 논문 원본: https://arxiv.org/abs/1508.07909

소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 ⚡ 정보 부스터 🚀