LLM의 토큰이 대체 뭔가요?

by 멘토사피엔스

왜 '토큰'이라는 말이 자꾸 나올까?


"ChatGPT가 제가 한 말을 알아듣고 이렇게 대답하는 게 정말 신기해요!" 아마 많은 분들이 이렇게 생각하실 겁니다. 우리가 컴퓨터에 타이핑한 한글 문장, 영어 문장이 어떻게 인공지능의 머릿속으로 들어가고, 또 그 안에서 무슨 일이 벌어지는 걸까요? 이 질문의 핵심에는 바로 '토큰(Token)'이라는 개념이 숨어있습니다.


ChatGPT를 사용하다 보면 가끔 "토큰 수를 초과했습니다"라는 메시지를 보거나, API를 사용할 때 '토큰'이라는 단위로 비용이 계산된다는 이야기를 들어봤을 겁니다. 이 '토큰'이라는 단어는 일상에서 잘 쓰지 않는 말이라 생소하게 느껴집니다. 하지만 이 토큰을 이해하는 것이 ChatGPT를 비롯한 거대 언어 모델(LLM)의 작동 원리를 파악하는 첫걸음이 됩니다.


그렇다면 이 '토큰'이 왜 그렇게 중요할까요? 바로 다음과 같은 이유들 때문입니다.

비용과 직결되는 '토큰 수': 마치 휴대폰 요금이 데이터 사용량에 따라 달라지듯, ChatGPT 같은 LLM은 주고받는 텍스트의 '토큰 수'에 따라 비용이 달라집니다. 그래서 토큰을 이해하면 불필요한 비용 낭비를 줄일 수 있습니다.

AI의 '기억력'과 연결되는 '토큰': AI가 대화의 맥락을 얼마나 길게 기억할 수 있는지도 토큰 수와 밀접하게 관련되어 있습니다. AI가 한 번에 처리하고 기억할 수 있는 토큰 수에는 한계가 있기 때문입니다. 이 한계를 '컨텍스트 윈도(Context Window)'라고 부르는데, 뒤에서 더 자세히 설명해 드리겠습니다.

성능을 좌우하는 '토큰'의 이해: 효과적으로 질문하고 정확한 답변을 얻기 위해서도 토큰의 역할은 중요합니다. 우리가 어떤 방식으로 프롬프트(질문)를 구성하느냐에 따라 AI가 더 잘 이해하고, 더 나은 결과물을 만들어낼 수 있기 때문입니다.


결국 토큰은 AI가 언어를 이해하고 처리하는 가장 기본적인 단위입니다. 우리가 말을 할 때 '단어'나 '음절'을 사용하는 것처럼, AI는 '토큰'을 사용해서 문장을 쪼개고 이해합니다. 지금부터 이 토큰이 무엇인지, 그리고 AI가 어떻게 토큰을 활용하는지 함께 자세히 파헤쳐 보겠습니다.


단어와 토큰의 차이


우리는 평소에 문장을 '단어'들로 이루어져 있다고 생각합니다. 그런데 AI, 특히 ChatGPT 같은 거대 언어 모델(LLM)은 단어를 그대로 이해하는 게 아닙니다. AI는 우리가 쓴 문장을 자신만의 '언어'인 '토큰(Token)'으로 바꿔서 이해합니다. 그렇다면 우리가 아는 '단어', '글자(문자)'와 '토큰'은 대체 뭐가 다를까요?


단어 vs. 문자 vs. 토큰

글자(문자): 언어의 가장 작은 조각이죠. '한', '글', '토', '큰' 같이 하나하나의 글자를 말합니다.

단어: 글자들이 모여 의미를 이루는 단위예요. '사과', '바나나', '사랑한다' 같은 것들입니다. 우리는 주로 단어 단위로 생각하고 말합니다.

토큰: 이게 바로 AI가 언어를 처리하는 기본 단위입니다. 토큰은 단어가 될 수도 있고, 단어의 일부분이 될 수도 있고, 심지어는 기호나 특수문자가 될 수도 있습니다. AI는 복잡한 문장을 효율적으로 처리하고 이해하기 위해 이 '토큰'으로 잘게 쪼개는 과정을 거칩니다.


Q. "ChatGPT는 정말 똑똑해요"가 몇 개의 토큰으로 바뀔까?

그럼 우리가 자주 쓰는 문장은 몇 개의 토큰으로 쪼개질까요? 아주 간단한 예를 들어보겠습니다.


"ChatGPT는 정말 똑똑해요"


이 문장을 우리 눈에는 3개의 단어('ChatGPT', '정말', '똑똑해요')로 보입니다. 하지만 AI는 이 문장을 다음과 같이 쪼갤 수 있습니다.

"Chat"

"G"

"PT"

"는"

"정말"

"똑똑"

"해요"


어떤가요? 놀랍게도 7개의 토큰으로 쪼개졌습니다. 'ChatGPT'는 세 조각으로, '똑똑해요'는 두 조각으로 나뉜 걸 볼 수 있습니다. 이렇게 토큰은 우리가 생각하는 '단어'와는 다르게 쪼개질 수 있습니다.


실제 예시로 보는 토큰화(Tokenization) 과정


AI가 이렇게 문장을 토큰으로 쪼개는 과정을 '토큰화(Tokenization)'라고 부릅니다. 마치 김밥을 먹기 좋게 자르거나, 블록 장난감의 부품들을 분류하는 과정과 비슷하다고 할 수 있습니다.


예시 1: 영어 문장

"Hello, world!"

토큰화 결과: "Hello", ",", " world", "!" (4개 토큰)

'world' 앞에 공백이 붙어 있는 것이 보이시나요? AI는 띄어쓰기도 중요한 정보로 인식해서 토큰에 포함시키는 경우가 많습니다.


예시 2: 복잡한 단어

"unbelievable" (믿을 수 없는)

토큰화 결과: "un", "believe", "able" (3개 토큰)


이 단어는 'un(부정)', 'believe(믿다)', 'able(~할 수 있는)' 이라는 의미 있는 조각들로 나뉘어지기도 합니다. 이렇게 쪼개면 AI는 'un-'이 붙으면 부정적인 의미라는 것을 쉽게 학습할 수 있습니다.


이처럼 토큰화는 AI가 언어의 복잡한 규칙과 의미를 효율적으로 파악할 수 있도록 돕는 첫 단계이자 가장 기본적인 과정입니다.


왜 굳이 쪼개서 쓰는 걸까?


"단어를 그냥 단어대로 이해하면 되지, 왜 굳이 '토큰'으로 잘게 쪼개는 걸까?" 이런 궁금증이 생길 수 있습니다. AI가 굳이 토큰으로 언어를 쪼개서 처리하는 데는 아주 중요한 이유들이 있습니다.


인간의 언어는 유연하고 모호하다 → AI는 구조적으로 이해가 필요


우리가 쓰는 말은 정말 유연하고 때로는 모호합니다. 같은 단어라도 문맥에 따라 의미가 달라지고, 띄어쓰기가 없어도 의미를 유추할 수 있습니다. 예를 들어, "밤 까 먹어"라는 문장에서 '밤'이 '밤나무 열매'인지 '저녁 시간'인지 우리는 맥락을 보고 쉽게 알 수 있지만, AI에게는 이게 쉽지 않습니다.


AI는 우리처럼 직관적으로 언어를 이해하지 못합니다. 대신 구조적이고 규칙적인 방식으로 언어를 처리해야 합니다. 토큰화는 이런 복잡하고 모호한 인간의 언어를 AI가 이해할 수 있는 명확하고 통일된 최소 단위로 바꿔주는 역할을 합니다.


"같은 단어"를 통일하고, "비슷한 표현"을 비교하기 쉽게


세상에는 정말 많은 단어가 있고, 같은 의미라도 다양하게 표현될 수 있습니다. 예를 들어 'running', 'ran', 'runs'는 모두 '달리다'라는 의미를 가지고 있습니다. AI에게 이 모든 단어를 개별적으로 가르치려면 너무 많은 시간과 데이터가 필요할 겁니다.


토큰화를 통해 AI는

'같은 의미'를 가진 단어의 조각들을 통일해서 효율적으로 배울 수 있습니다. 예를 들어, 'running'과 'ran'에서 공통된 어근인 'run'을 하나의 토큰으로 인식하고, 뒤에 붙은 '-ing'나 '-an' 같은 접미사를 다른 토큰으로 분리해서 더 효과적으로 의미를 학습하게 됩니다.

'비슷한 표현'들 사이의 관계를 쉽게 비교할 수 있게 됩니다. "달려가는 중"과 "달리고 있다" 같은 문장들이 토큰화되면, 공통된 핵심 토큰들을 통해 AI가 이 문장들이 비슷한 의미를 가진다고 파악하기 쉬워집니다.


토큰화 덕분에 가능한 압축, 일반화, 확장


토큰화는 AI가 언어를 더 똑똑하게 다룰 수 있도록 다음 세 가지 장점을 제공합니다.

압축 (Compression): 모든 단어를 통째로 저장하는 대신, 자주 나오는 단어의 조각(토큰)들을 효율적으로 조합해서 언어를 표현합니다. 이는 AI 모델의 크기를 줄이고 처리 속도를 높이는 데 도움이 됩니다.

일반화 (Generalization): AI가 새로운 단어나 이전에 보지 못했던 표현을 만나도 당황하지 않습니다. 이미 알고 있는 토큰들의 조합으로 새로운 단어나 문장의 의미를 유추할 수 있기 때문입니다. 예를 들어 'unbelievable' 같은 단어를 보지 못했더라도, 'un'과 'believe'와 'able' 토큰을 알고 있다면 의미를 짐작할 수 있습니다.

확장 (Scalability): 전 세계의 수많은 언어와 새로운 표현들이 계속 생겨나도, 토큰화 덕분에 AI는 유연하게 새로운 지식을 추가하고 기존 지식을 확장해나갈 수 있습니다.


결론적으로, 토큰화는 AI가 복잡한 인간의 언어를 효율적이고 체계적으로 이해하며, 더 빠르고 정확하게 학습하고 새로운 상황에 유연하게 대응할 수 있도록 돕는 AI 언어 처리의 핵심 전략이라고 할 수 있습니다.


토큰을 쪼개는 원리


이제 '토큰'이 무엇이고 왜 필요한지 알았으니, AI가 실제로 어떻게 문장을 토큰으로 쪼개는지 궁금하시리라 생각합니다. 여러 가지 방법이 있지만, ChatGPT를 포함한 GPT 계열의 AI 모델들이 주로 사용하는 아주 똑똑한 방법이 있습니다. 바로 BPE(Byte Pair Encoding)라는 방식입니다.


BPE: 자주 나오는 단어 조각을 재활용하는 똑똑한 압축법


BPE는 이름처럼 '바이트' 단위에서 시작하지만, 쉽게 말해 가장 자주 함께 나타나는 문자 덩어리들을 하나의 새로운 토큰으로 합쳐나가는 방식입니다. 마치 레고 블록을 만들 때, 사람들이 자주 쓰는 모양을 미리 만들어두었다가 조립할 때 쓰는 것과 비슷합니다.


간단한 원리는 이렇습니다.

처음에는 모든 글자(또는 바이트)를 개별적인 토큰으로 시작합니다. 예를 들어, "banana"라는 단어는 ['b', 'a', 'n', 'a', 'n', 'a'] 이렇게 쪼개질 것입니다.

데이터에서 가장 많이 등장하는 '두 개의 짝'을 찾아서 하나로 합칩니다. 만약 'an'이 가장 많이 나온다면, 이걸 새로운 토큰 'an'으로 만드는 겁니다. 그럼 "banana"는 ['b', 'an', 'an', 'a']가 됩니다.

이 과정을 반복해서 가장 효율적인 토큰 묶음을 만들어 나갑니다. 'an'이 또 합쳐져 'ana'가 될 수도 있고, 'ban'이 될 수도 있는 식입니다.


이런 방식으로 BPE는 AI가 학습하는 방대한 텍스트 데이터에서 가장 효율적인 '단어 조각'들을 찾아내고, 그것들을 토큰으로 정의합니다.


"단어의 일부"도 의미가 될 수 있는 이유


BPE 방식의 가장 큰 특징이자 장점은 단어의 '일부'가 독립적인 토큰이 될 수 있다는 겁니다. 이게 왜 중요할까요?

효율적인 압축: 영어의 'un-', 're-', '-ing', '-tion' 같은 접두사나 접미사는 수많은 단어에 공통적으로 붙어서 사용됩니다. 'unbelievable'을 통째로 하나의 토큰으로 만드는 것보다, 'un', 'believe', 'able' 세 개의 토큰으로 쪼개면 훨씬 효율적입니다. 'un' 토큰은 'unhappy', 'unlucky' 등 다른 단어에도 재활용할 수 있기 때문입니다.

새로운 단어 유추: AI가 'unbelievable'이라는 단어를 한 번도 본 적이 없더라도, 이미 'un', 'believe', 'able'이라는 토큰들의 의미를 알고 있다면, 이들을 조합해서 새로운 단어의 의미를 유추할 수 있게 됩니다. 이는 AI가 세상의 모든 단어를 다 외우지 않고도 언어를 이해하고 생성할 수 있게 만드는 핵심적인 능력입니다.

불규칙한 단어 처리: 스펠링이 틀린 단어나, 처음 보는 복잡한 고유명사도 BPE는 아는 토큰 조각들로 쪼개서 처리할 수 있습니다. 예를 들어, 'Supercalifragilisticexpialidocious' 같은 긴 단어도 AI는 이미 학습된 작은 토큰들의 조합으로 이해할 수 있습니다.


결론적으로 BPE는 AI가 언어를 '음절'이나 '어근' 같은 의미 있는 작은 단위로 쪼개서 이해하고, 이를 통해 효율적으로 학습하며, 새로운 단어나 표현에도 유연하게 대처할 수 있도록 돕는 매우 똑똑한 토큰화 방식입니다.


모델이 토큰으로 '이해'하는 방식


이제 AI가 문장을 '토큰'으로 쪼갠다는 걸 알았으니, 다음 질문은 "그럼 AI는 그 토큰들을 어떻게 이해하고 처리하는 걸까?"입니다.. AI가 토큰으로 언어를 이해하는 과정은 우리가 생각하는 것보다 훨씬 더 수학적이고 계산적입니다.


토큰 → 숫자 벡터 → 수학 연산


AI는 우리가 사용하는 글자나 단어처럼 생긴 토큰을 직접 이해하지 못해요. 대신, 이 토큰들을 '숫자'로 바꿔서 이해합니다.

토큰을 숫자로 변환 (임베딩): AI는 모든 토큰에 고유한 숫자를 부여합니다. 예를 들어, '사과'라는 토큰은 123, '바나나'는 456 같은 식으로요. 하지만 단순히 숫자를 부여하는 것만으로는 부족합니다. AI는 더 나아가 각 토큰을 여러 개의 숫자로 이루어진 '숫자 벡터'로 변환합니다.

숫자 벡터의 의미: 이 숫자 벡터는 마치 토큰의 '특징 지도' 같다고 생각하면 됩니다. 예를 들어, '사과'와 '바나나'처럼 비슷한 과일 토큰들은 숫자 벡터 공간에서 서로 가까운 위치에 놓이게 됩니다. 반대로 '사과'와 '자동차'처럼 의미가 다른 토큰들은 멀리 떨어져 있을 겁니다. 이 숫자 벡터 덕분에 AI는 토큰들 간의 의미적 관계를 파악할 수 있습니다.

수학 연산: 모든 토큰이 숫자로 바뀌었으니, 이제 AI는 이 숫자들을 가지고 복잡한 수학 연산을 수행합니다. 우리가 덧셈, 뺄셈을 하듯이, AI는 엄청나게 많은 벡터 연산을 통해 문장의 의미를 분석하고 다음 올 단어를 예측하게 됩니다.


토큰의 나열을 보고 다음 토큰을 예측


ChatGPT 같은 LLM(거대 언어 모델)이 대화를 이어가는 방식은 기본적으로 '다음 토큰 예측'입니다.

우리가 "안녕하세요, 오늘 날씨가" 라고 입력하면, AI는 지금까지의 토큰 나열("안녕하세요", ",", " 오늘", " 날씨", "가")을 보고 **'그 다음에 어떤 토큰이 올 확률이 가장 높을까?'**를 계산합니다.

이 계산 결과 '어떨'이라는 토큰이 올 확률이 높다고 판단하면, 이어서 '어떨'을 생성하고, 다시 "안녕하세요, 오늘 날씨가 어떨"이라는 새로운 토열 나열을 가지고 '까요'를 예측하는 식입니다.

이런 과정을 반복해서 문장 전체를 완성해 나가게 됩니다. AI가 단순히 단어를 예측하는 것이 아니라, 가장 자연스럽고 문맥에 맞는 '다음 토큰'을 찾아 연결하는 방식으로 대화를 만들어 가는 겁니다.


맥락 이해의 최소 단위가 토큰이라는 의미


결국, AI에게 언어의 의미를 이해하는 가장 기본적인 단위이자, 대화의 '맥락(Context)'을 파악하는 최소 단위가 바로 이 토큰입니다. AI는 토큰 하나하나의 의미를 파악하고, 토큰들이 배열된 순서와 관계를 통해 문장의 전체적인 의미를 유추합니다.


토큰 수가 많아지면 어떤 문제가 생길까?


AI가 언어를 토큰으로 이해한다는 것을 알았으니, 이제 왜 '토큰 수'가 중요한지 이야기해 볼 차례입니다. AI와 대화할 때 입력하는 텍스트의 토큰 수가 너무 많아지면 여러 가지 문제가 발생할 수 있습니다.


컨텍스트 윈도(Context Window) 한계

우리가 대화할 때 앞서 나눈 이야기들을 기억하고 다음 대화에 활용하듯이, AI도 이전에 주고받은 내용을 기억하며 대화를 이어갑니다. AI가 한 번에 기억하고 처리할 수 있는 토큰의 최대 개수를 '컨텍스트 윈도(Context Window)'라고 부릅니다. 마치 사람의 작업 기억 공간처럼, AI가 동시에 집중하고 이해할 수 있는 정보의 양에 한계가 있는 것입니다.


예를 들어, 어떤 LLM 모델의 컨텍스트 윈도가 4,000토큰이라면, AI는 내가 입력한 질문(프롬프트)과 자신이 생성할 답변을 포함해서 총 4,000토큰까지만 한 번에 보고 이해할 수 있다는 뜻입니다.


토큰 수 초과 시 발생하는 현상들


만약 우리가 입력하는 텍스트의 토큰 수가 이 '컨텍스트 윈도'를 넘어서면 어떤 일이 벌어질까요?

프롬프트 잘림 (Truncation): AI는 컨텍스트 윈도 한계에 맞춰 가장 오래된 대화나 입력의 시작 부분을 잘라내 버릴 수 있습니다. 중요한 정보가 대화 초반에 있었다면, AI는 그 부분을 '기억하지 못하게' 되는 겁니다.

핵심 정보 누락: 텍스트가 잘리지 않더라도, AI가 처리해야 할 토큰이 너무 많아지면 중요한 정보나 세부 사항을 놓치고 대답할 확률이 높아집니다. 마치 너무 많은 글을 한 번에 읽으려다 핵심 내용을 파악하지 못하는 것과 같습니다.

답변의 일관성 저하: 대화의 맥락이 제대로 유지되지 않으니, AI의 답변이 이전에 했던 이야기와 모순되거나 뜬금없어질 수 있습니다. 일관성 없는 대화가 이어질 수 있습니다.

예상치 못한 과금 증가: 특히 LLM API를 사용하는 경우, 입력하는 토큰 수가 많아질수록 사용 요금이 눈덩이처럼 불어날 수 있습니다. AI와의 대화는 '입력 토큰'과 '출력 토큰' 모두 비용으로 계산되기 때문입니다.


요약, 문서 분할 시 토큰 수 고려가 필요한 이유


이러한 문제들 때문에, LLM을 활용하여 긴 문서나 대화를 요약하거나 처리할 때는 토큰 수를 반드시 고려해야 합니다.

긴 문서 요약: 문서 전체를 한 번에 AI에게 넣어주면 컨텍스트 윈도를 초과하여 중요한 내용이 잘리거나, AI가 핵심을 제대로 파악하지 못할 수 있습니다. 이럴 때는 문서를 여러 부분으로 나누어 AI에게 전달하고, 각 부분의 요약을 받은 다음 다시 합치는 등의 전략이 필요합니다.

문서 분할(Chunking): 방대한 데이터를 LLM에 효과적으로 입력하기 위해 문서를 적절한 토큰 크기의 '덩어리(Chunk)'로 나누는 작업이 중요합니다. 이렇게 나누어진 덩어리들을 AI가 순차적으로 처리하거나, 필요한 덩어리만 선택적으로 활용하도록 만드는 것입니다.


결론적으로, 토큰 수를 이해하고 관리하는 것은 AI와의 효율적인 소통뿐만 아니라, 예상치 못한 문제와 비용 낭비를 막는 데 매우 중요합니다.


LLM과 잘 대화하려면 토큰을 이해하자


이제 토큰이 AI의 언어 처리 기본 단위이자, AI의 '기억력'과도 밀접하게 관련되어 있다는 사실을 알게 되었습니다. 그렇다면 이 토큰에 대한 이해를 바탕으로 ChatGPT 같은 LLM과 더 똑똑하게 대화하고, 더 좋은 답변을 얻으려면 어떻게 해야 할까요?


'좋은 프롬프트'란 무엇일까?

먼저 좋은 프롬프트는 단순히 짧거나 긴 것을 넘어, AI가 사용자의 의도를 명확하게 이해하고, 원하는 형식과 내용으로 최적의 답변을 생성하도록 유도하는 프롬프트입니다. 이는 다음과 같은 특징을 가집니다.

명확성 (Clarity): AI가 무엇을 해야 하는지 애매함 없이 분명하게 지시합니다.

구체성 (Specificity): 필요한 정보, 제약 조건, 원하는 출력 형식 등을 상세하게 제공합니다.

관련성 (Relevance): 불필요한 정보 없이 오직 현재 작업에 필요한 내용만 포함합니다.

구조화 (Structure): 복잡한 요청의 경우, 목록, 예시, 역할 부여 등을 통해 AI가 정보를 처리하기 쉽게 만듭니다.


좋은 프롬프트는 "간결하되 필요한 정보는 모두 담고, 명확하게 지시하는 것"입니다. 무작정 짧게 줄이는 것이 능사가 아니며, 그렇다고 불필요한 내용까지 길게 늘어뜨리는 것도 좋지 않다는 의미입니다.


토큰을 이해하는 프롬프트 작성


AI의 '기억력' 한계 (컨텍스트 윈도)를 이해

AI는 한 번에 제한된 토큰 수(컨텍스트 윈도)만큼만 기억하고 처리할 수 있습니다. 아무리 좋은 정보라도 이 한계를 넘어서면 AI는 그 정보를 '잊어버립니다.' 이것이 '짧고 명확한 질문'이 필요한 이유입니다: 만약 질문이 너무 길고 장황하여 불필요한 토큰으로 가득 차 있다면, AI가 정작 중요한 핵심 정보를 놓치거나, 뒤로 갈수록 내용이 잘려나갈 수 있습니다. 특히 짧은 대화나 간단한 정보 요청 시에는 간결함이 곧 효율성과 직결됩니다.


'자세하고 구체적인 설명'은 '불필요한 토큰'이 아닐 수 있음

많은 분들이 "자세하게 설명하라"는 말을 들으면 무조건 길게 늘여 쓰는 것으로 오해하기도 합니다. 하지만 여기서 '자세하다'는 것은 AI가 혼란스러워할 만한 모호함을 제거하고, 정확한 의도를 전달하기 위한 구체적인 정보를 의미합니다. 이는 결과적으로 AI가 한 번의 상호작용으로 원하는 답변을 생성하게 하여, 총 토큰 사용량(입력 + 출력)을 줄이는 효과를 가져옵니다.


예시를 활용한 지시: 복잡한 답변 형식을 원할 때 "이렇게 해주세요"라고 긴 글로 설명하기보다 간단한 예시 하나를 보여주는 것이 훨씬 구체적이고 명확합니다. 예시는 언뜻 토큰을 늘리는 것처럼 보일 수 있지만, AI가 사용자의 의도를 정확히 파악하여 한 번에 올바른 결과를 내도록 유도하므로, 결과적으로 불필요한 대화 턴(Turn)을 줄여 전체 토큰 사용량을 절약하는 효과가 있습니다.

역할 부여, 제약 조건 명시: AI에게 특정 '역할'(예: "당신은 전문 마케터입니다.")을 부여하거나, '제약 조건'(예: "5문장 이내로 답변해 주세요.")을 명시하는 것은 AI의 행동 범위를 좁혀주어 더욱 집중적이고 관련성 높은 답변을 유도합니다. 이 역시 AI가 엉뚱한 답변을 내놓아 추가적인 질문을 통해 수정해야 하는 상황을 방지하여 총 토큰 사용량과 시간을 절약하는 방법입니다.


토큰을 이해하는 것은 '무조건 짧게' 쓰라는 의미가 아닙니다. AI의 작동 방식을 이해하여 제한된 토큰 예산 안에서 가장 효율적으로, 가장 필요한 정보를 담는 것이 핵심입니다.


프롬프트 작성 팁


다음은 토큰 효율성을 고려하면서도 좋은 프롬프트를 작성하는 구체적인 팁들입니다.


불필요한 미사여구 제거

존칭이나 과도한 수식어는 AI가 처리할 불필요한 토큰만 늘립니다. AI는 감정을 이해하지 못하므로, 공손한 표현보다는 명확한 지시가 중요합니다.

나쁜 예: "제가 지금 이 문서에 대해 궁금한 점이 있는데요, 혹시 이 긴 문서를 좀 더 짧게 요약해 주실 수 있으실까요? 그렇게 해주시면 정말 감사하겠습니다."

좋은 예: "다음 문서를 300자 이내로 요약해 줘."


핵심 키워드 및 구체적인 정보 위주로

길고 장황한 설명보다 핵심 단어나 개념, 그리고 필요한 세부 정보를 명확히 제시하는 것이 좋습니다. AI가 답변의 방향을 잡는 데 훨씬 도움이 됩니다.

나쁜 예: "대한민국에서 가장 높고 유명한 산에 대한 정보를 알려주세요. 그 산의 높이나 위치 같은 것도요. 역사나 생태계에 대해서도 이야기해 주시면 좋겠어요."

좋은 예: "대한민국 최고봉인 한라산의 높이, 위치, 그리고 주요 생태 특징에 대해 설명해 줘."


명령형 동사 사용: AI에게 명확한 '할 일'을 제시

AI에게 수행해야 할 행동을 모호하게 묻기보다 명확한 명령형으로 제시하세요.

나쁜 예: "이 글을 번역해 주시면 어떨까요? 영어로요."

좋은 예: "다음 글을 영어로 번역해."


예시를 활용한 지시: '말로 설명하기'보다 '보여주기'

복잡한 출력 형식이나 특정 스타일을 원할 때는 말로 길게 설명하는 것보다 1~2개의 간단한 예시를 들어주는 것이 훨씬 효과적이고 토큰 효율적입니다. AI가 패턴을 인식하게 됩니다.

나쁜 예: "숫자를 콤마로 구분하고 각각의 단위를 붙여서 표현해 주세요. 1000은 1,000원, 20000은 20,000원, 300000000은 300,000,000원과 같이요. 반드시 금액 단위도 붙여주세요."

좋은 예: "숫자를 다음 형식으로 변환해줘: 1000 -> 1,000원, 20000 -> 20,000원, 300000000 -> 300,000,000원."


Chain-of-Thought (사고 과정 명시)

AI가 복잡한 문제를 풀 때, 단순히 최종 답변만 요구하기보다 '단계별로 생각하게' 유도하는 프롬프트(Chain-of-Thought)는 언뜻 토큰을 늘리는 것처럼 보일 수 있습니다. 하지만 이는 AI가 추론 과정을 명확히 거치도록 하여 더 정확하고 논리적인 답변을 유도하고, 결과적으로 불필요한 오류나 재요청을 줄여 총 토큰 사용량을 최적화하는 데 도움을 줍니다.

예시: "이 문제를 해결하기 위해 어떤 단계를 거쳐야 하는지 먼저 설명한 후, 각 단계에 따라 답을 도출해 줘." 또는 "결론부터 말해줘. 그 다음 왜 그렇게 되는지 이유를 설명해."


이처럼 토큰에 대한 이해를 바탕으로 프롬프트를 작성하는 것은 AI와의 대화 효율성을 극대화하고, 더욱 만족스러운 결과물을 얻는 데 필수적입니다.


API 호출 시 토큰 수 계산 방법


ChatGPT와 같은 LLM API를 사용하여 프로그램을 만들 때는 토큰 수를 직접 계산해야 합니다. 대부분의 LLM 제공사(예: OpenAI)는 자신들의 토크나이저(Tokenizer, 토큰을 쪼개는 도구)를 웹 기반으로 제공하거나 개발자 도구(라이브러리)로 제공합니다.


온라인 토크나이저: OpenAI의 경우 Tokenizer 웹페이지에서 직접 텍스트를 입력하여 몇 개의 토큰으로 구성되는지 확인할 수 있습니다.

개발자 라이브러리: Python 등 프로그래밍 언어로 API를 호출할 때는 tiktoken 같은 라이브러리를 사용하여 텍스트의 토큰 수를 미리 계산할 수 있습니다. 이는 특히 대량의 텍스트를 처리하거나 비용을 예측해야 할 때 필수적입니다.


tiktoken 라이브러리 사용 시

스크린샷 2025-07-13 오후 8.28.11.png


토큰을 이해하고 이를 활용하여 프롬프트를 작성하는 습관은 AI와 더욱 효율적이고 경제적으로 소통하는 데 큰 도움이 될 것입니다.


Q. 어떻게 토큰 수 예측이 가능할까?

이 글을 잘 따라오셨다면 다음과 같은 질문이 생길 수 있습니다. BPE는 자주 등장하는 문자열 패턴을 하나의 토큰으로 묶어 나가면서 어휘(Vocabulary)를 학습하기 때문에, 토큰의 길이가 가변적일 수 있습니다. 그런데 어떻게 토큰 수를 예측할 수 있을까요?


핵심은 LLM 모델이 학습될 때 사용된 '토크나이저(Tokenizer)'가 이미 정해져 있고 고정되어 있다는 점입니다.


사전 학습 단계에서 토크나이저 어휘(Vocabulary)가 확정됨

LLM(예: GPT-3, GPT-4)은 방대한 텍스트 데이터로 사전 학습(Pre-training)될 때, 특정 토크나이저를 사용하여 모든 텍스트를 토큰으로 변환합니다. 이때 이 토크나이저가 어떤 문자열을 어떤 토큰으로 쪼갤지, 그리고 어떤 토큰들이 결합하여 새로운 토큰이 될지, 그 규칙과 '어휘 집합(Vocabulary)'이 확정됩니다. 이 어휘 집합에는 수만 개에서 수십만 개의 토큰(단어 조각, 단어, 특수문자 등)과 각각의 고유한 ID(숫자)가 포함됩니다.


배포된 모델은 고정된 토크나이저를 사용

OpenAI 같은 LLM 제공사가 API를 통해 모델을 배포할 때, 이 모델은 사전 학습 시 사용했던 동일한 토크나이저를 함께 제공합니다. 즉, 모델이 '이해하는 언어'의 규칙을 담은 토크나이저가 사용자에게도 제공되는 것입니다.


사용자도 동일한 토크나이저로 예측

따라서 개발자가 tiktoken과 같은 라이브러리(혹은 온라인 토크나이저)를 사용할 때, 이 도구들은 해당 LLM 모델이 사용하는 '정확히 그 토크나이저'의 어휘와 규칙을 복제하여 가지고 있습니다. 사용자가 tiktoken.encoding_for_model("gpt-4")처럼 특정 모델의 인코딩을 불러오는 것은, 바로 그 GPT-4가 사용하는 고정된 토크나이저 규칙을 가져온다는 의미입니다.


이 토크나이저를 사용하면, 어떤 텍스트를 입력하더라도 모델이 실제 내부적으로 처리할 때와 동일한 방식으로 토큰화될 것을 '예측'할 수 있습니다. 토큰의 길이가 가변적이라도, 그 가변성을 결정하는 규칙 자체가 이미 정해져 있기 때문에 예측이 가능한 것입니다.


마치며: 토큰은 'AI 언어의 음절' 같은 것


지금까지 AI, 특히 ChatGPT와 같은 거대 언어 모델(LLM)이 우리 인간의 언어를 어떻게 이해하고 처리하는지, 그 핵심 단위인 '토큰'에 대해 자세히 살펴보았습니다. 토큰은 마치 우리 언어의 '음절'과 같습니다. 우리가 '사-랑', '친-구'처럼 음절을 조합하여 단어를 만들고, 단어를 조합하여 문장을 만들듯이, AI는 '토큰'이라는 최소 단위를 조합하여 복잡한 문장의 의미를 파악하고 새로운 문장을 생성합니다.


자연어를 기계어로 바꾸는 첫 관문


AI 컴퓨터는 우리의 말을 직접적으로 이해할 수 없습니다. AI는 오직 '숫자'만을 이해합니다. 바로 이 지점에서 토큰은 인간의 '자연어'를 AI가 이해할 수 있는 '기계어(숫자)'로 바꾸는 첫 번째 관문이자 가장 중요한 다리 역할을 합니다.


모델의 눈으로 언어를 바라보는 시선


우리가 토큰을 이해하는 것은 단순히 AI 기술의 한 부분을 아는 것을 넘어섭니다. 이는 마치 AI 모델의 '눈'으로 언어를 바라보는 시선을 갖게 되는 것과 같습니다.

AI는 단어 하나하나보다는, 토큰이라는 조각들이 어떻게 연결되고 조합되는지를 통해 의미를 파악합니다.

우리가 간결하고 명확하게 질문할 때 AI가 더 잘 이해하는 이유도, 불필요한 토큰 낭비를 줄여 AI의 '기억력'을 핵심 정보로 채워주기 때문임을 알 수 있습니다.

긴 문서를 요약하거나 AI에게 특정 작업을 요청할 때, 토큰 수를 염두에 두는 것이 왜 중요한지도 이제는 명확하게 이해되실 겁니다.


AI는 우리 일상 깊숙이 들어와 우리와 대화하고, 정보를 찾아주고, 심지어 새로운 것을 창조하고 있습니다. 이러한 AI의 놀라운 능력 뒤에는 수많은 기술적 원리가 숨어 있으며, 그중 '토큰'은 AI가 언어라는 가장 복잡한 영역을 다룰 수 있도록 돕는 가장 기본적이면서도 강력한 도구입니다.


keyword
수, 토 연재
이전 10화LLM에서 사용하는 하이퍼 파라미터 이해하기