1. 컴퓨터는 문자를 그대로 이해하지 못한다
문자 → 인코딩 → 토큰화 → 토큰 → 임베딩 벡터 → 문맥 계산 → 다음 토큰 예측 → 문장 생성
사람은 안녕하세요, Hello, 고양이 같은 문자를 보면 바로 의미를 떠올릴 수 있다. 하지만 컴퓨터는 문자를 문자 그대로 이해하지 못한다.
컴퓨터가 직접 처리할 수 있는 것은 결국 숫자다. 그래서 우리가 입력한 문장은 먼저 컴퓨터가 읽을 수 있는 숫자 형태로 바뀌어야 한다.
예를 들어 Hello, World!라는 문장도 컴퓨터 내부에서는 다음처럼 표현될 수 있다.
문자열: Hello, World!
URL Encoding: Hello%2C%20World%21
Base64: SGVsbG8sIFdvcmxkIQ==
UTF-8: 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
즉, LLM이 문장을 이해하는 과정도 처음부터 “문자의 의미를 바로 이해하는 것”이 아니다. 먼저 문자를 숫자로 바꾸고, 그 숫자들을 모델이 처리할 수 있는 형태로 변환하는 과정에서 시작된다.
2. Character Encoding이란?
Character Encoding은 문자를 컴퓨터가 저장하고 처리할 수 있는 숫자 형태로 바꾸는 규칙이다.
예를 들어 사람에게는 A가 그냥 알파벳 A지만, 컴퓨터는 이것을 특정한 숫자 코드로 저장한다. 가, 나, 다 같은 한글도 마찬가지다. 컴퓨터가 한글을 처리하려면 한글 문자도 숫자로 대응되어 있어야 한다.
대표적인 인코딩 방식에는 다음이 있다.
UTF-8
URL Encoding
Base64
ASCII
Unicode
여기서 특히 중요한 것은 UTF-8이다. UTF-8은 전 세계의 다양한 문자를 표현할 수 있는 문자 인코딩 방식이고, 웹과 데이터 처리에서 매우 많이 사용된다.
예를 들어 안녕하세요라는 문장이 있다면, 컴퓨터는 이것을 우리가 보는 글자 그대로 저장하는 것이 아니다. 각 글자에 대응되는 숫자 코드로 변환해서 저장하고 처리한다.
이 단계는 LLM만의 특별한 과정이라기보다는, 컴퓨터가 텍스트를 다루기 위한 가장 기본적인 출발점이다.
3. Token이란?
이제 문자가 숫자로 바뀌었다고 해서 LLM이 바로 문장 전체를 한 번에 이해하는 것은 아니다.
LLM은 텍스트를 토큰(Token)이라는 단위로 나누어 처리한다.
토큰은 자연어 처리에서 텍스트를 구성하고 분석하는 기본 단위다. 토큰은 단어, 마침표, 기호 등 다양한 요소가 될 수 있는 텍스트 처리 단위라고 이해하면 된다.
예를 들어 다음 문장을 보자.
I love cats.
이 문장은 모델에 따라 다음처럼 토큰화될 수 있다.
I / love / cats / .
그런데 토큰은 항상 “단어 하나”와 정확히 일치하지 않는다. 어떤 경우에는 단어보다 작게 쪼개질 수도 있고, 어떤 경우에는 기호나 공백까지 하나의 토큰으로 처리될 수도 있다.
예를 들어 이런 식이다.
unbelievable
→ un / believable
안녕하세요
→ 안 / 녕 / 하 / 세 / 요
물론 실제 토큰화 결과는 사용하는 모델과 토크나이저에 따라 달라진다.
토큰이라는 단위로 텍스트를 읽고 생성한다.
4. Tokenization이란?
Tokenization은 문장을 토큰 단위로 쪼개는 과정이다.
즉, 사용자가 입력한 문장을 모델이 처리할 수 있는 작은 조각들로 분해하는 과정이다.
사람이 보기에는 다음 문장이 하나의 자연스러운 문장이다.
오늘 날씨가 정말 좋습니다.
하지만 LLM은 이 문장을 그대로 한 번에 처리하지 않고, 내부적으로 여러 토큰으로 나눈다.
예상해보면 이런 식으로 나뉠 수 있다.
오늘 / 날씨 / 가 / 정말 / 좋 / 습니다 / .
또는 모델에 따라 더 작게 나뉠 수도 있다.
오 / 늘 / 날 / 씨 / 가 / 정말 / 좋 / 습 / 니다 / .
이처럼 토큰화 결과는 모델마다 다를 수 있다. LLM마다 토큰화 알고리즘과 토큰 사전이 다르기 때문에 같은 문장이라도 토큰 수가 달라질 수 있다.
그래서 같은 문장을 넣어도 어떤 모델에서는 10토큰, 다른 모델에서는 8토큰이 될 수 있다.
Tokenizer = 토큰화를 수행하는 도구
5. 한국어 토큰화가 중요한 이유
한국어는 영어보다 토큰화가 복잡할 수 있다.
영어는 단어 사이가 공백으로 비교적 명확하게 구분된다.
I love cats.
→ I / love / cats / .
그런데 한국어는 조사, 어미, 접사가 단어에 붙는다.
나는 고양이를 좋아합니다.
여기서 나는은 나 + 는, 고양이를은 고양이 + 를, 좋아합니다는 좋아하 + ㅂ니다처럼 분석할 수 있다.
한국어는 이런 특성 때문에 하나의 어절이 여러 토큰으로 나뉠 수 있다. 한글은 교착어 특성상 어절을 세분하여 토큰화하거나, 경우에 따라 음절 단위로 토큰화될 수 있다.
예를 들어 다음 두 문장을 비교해볼 수 있다.
오늘 날씨가 정말 좋습니다.
It is a beautiful day.
사람이 보기에는 한국어 문장이 더 짧아 보일 수도 있다. 하지만 LLM 내부에서는 한국어 문장이 더 많은 토큰으로 쪼개질 수 있다.
1. 처리해야 할 양이 많아지고
2. 비용이 증가할 수 있고
3. 응답 속도가 느려질 수 있고
4. 한 번에 넣을 수 있는 문서 길이가 줄어들 수 있다.
그래서 한국어로 LLM 서비스를 만들 때는 토큰 수를 꼭 신경 써야 한다.
6. Embedding이란?
토큰화된 텍스트는 이제 모델이 처리할 수 있는 숫자 형태로 바뀌어야 한다. 이때 중요한 개념이 임베딩(Embedding)이다.
Embedding은 텍스트의 의미를 숫자 벡터로 표현하는 방식이다.
예를 들어 다음과 같이 표현할 수 있다.
고양이 → [0.3, 0.8, -0.5, ...]
강아지 → [0.31, 0.79, -0.4, ...]
자동차 → [-0.7, 0.1, -0.4, ...]
이 숫자 배열을 벡터라고 부른다.
여기서 중요한 점은 단순히 문자 자체를 숫자로 바꾸는 것이 아니라, 의미를 담은 숫자 표현으로 바꾼다는 것이다.
문자 인코딩은 문자를 저장하기 위한 숫자 변환에 가깝다.
문자 인코딩:
문자 → 저장 가능한 숫자
반면 임베딩은 의미를 계산하기 위한 숫자 변환에 가깝다.
임베딩:
문장 또는 단어 → 의미를 담은 벡터
쉽게 말해, 단어와 문장의 의미 관계를 숫자로 계산할 수 있게 만드는 과정이다.
7. 의미가 비슷하면 벡터도 가까워진다
임베딩을 이해할 때 가장 중요한 직관은 이것이다.
예를 들어 고양이와 강아지는 둘 다 동물이고, 반려동물이라는 공통점이 있다. 그래서 임베딩 벡터도 서로 비슷한 방향이나 위치를 가질 가능성이 높다.
반면 자동차는 동물이 아니라 교통수단이다. 그래서 고양이, 강아지와는 벡터 공간에서 더 멀리 떨어질 수 있다.
고양이 ↔ 강아지: 의미가 비슷함 → 벡터가 가까움
고양이 ↔ 자동차: 의미가 다름 → 벡터가 멀어짐
이 개념은 나중에 RAG를 공부할 때 매우 중요하다.
RAG에서는 사용자의 질문과 문서를 각각 임베딩 벡터로 바꾼 뒤, 서로 의미적으로 가까운 문서를 찾아서 LLM에게 같이 전달한다.
예를 들어 사용자가 이렇게 물었다고 하자.
환불은 어떻게 받을 수 있나요?
문서에 정확히 환불이라는 단어가 없더라도, 반품 후 결제 취소 절차라는 문서가 의미적으로 비슷하다면 검색될 수 있다.
이게 바로 임베딩 기반 검색, 즉 벡터 검색의 핵심이다.
8. GPT는 다음 토큰을 예측한다
GPT가 문장을 생성하는 방식은 생각보다 단순한 구조에서 출발한다.
GPT는 한 번에 완성된 문장을 통째로 만들어내는 것이 아니라, 이전 토큰들을 보고 다음에 올 토큰을 하나씩 예측한다.
LLM은 이전에 생성된 단어 또는 토큰들에 따라 다음 단어를 예측해 텍스트를 단계적으로 생성한다. 이때 가능한 단어들에 확률을 할당하고, 그 확률에 따라 다음 토큰을 선택한다.
예를 들어 다음 문장이 있다고 하자.
오늘 날씨가
모델은 다음에 올 수 있는 토큰 후보들을 확률로 계산한다.
좋다: 40%
맑다: 25%
춥다: 15%
흐리다: 10%
기타: 10%
그다음 확률이 높은 토큰 중 하나를 선택한다.
오늘 날씨가 좋다
그리고 다시 이어서 다음 토큰을 예측한다.
오늘 날씨가 좋다 → .
오늘 날씨가 좋다.
즉 GPT의 생성 방식은 다음과 같이 볼 수 있다.
이전 토큰들 확인
→ 다음 토큰 후보별 확률 계산
→ 하나의 토큰 선택
→ 선택한 토큰을 문장에 추가
→ 다시 다음 토큰 예측
→ 반복
문맥을 보고 다음 토큰을 예측하는 모델이다.
물론 실제 내부 구조는 Transformer, Attention, Softmax 등 복잡한 계산으로 이루어져 있다. 하지만 기본적인 생성 원리는 다음 토큰 예측으로 이해할 수 있다.
9. 토큰 수가 비용, 속도, 길이에 미치는 영향
토큰은 단순한 이론 개념이 아니라 실제 서비스 비용과 성능에 직접 영향을 준다.
LLM 사용량은 보통 토큰 단위로 계산된다. 즉, 입력으로 보낸 토큰과 모델이 출력한 토큰이 모두 비용에 영향을 준다.
입력 토큰 = 사용자가 보낸 질문, 문서, 시스템 메시지 등
출력 토큰 = 모델이 생성한 답변
예를 들어 긴 문서를 통째로 프롬프트에 넣으면 입력 토큰이 많아진다. 답변을 길게 생성하게 하면 출력 토큰이 많아진다.
1. 비용 증가
2. 응답 속도 저하
3. 한 번에 넣을 수 있는 문서 길이 제한
4. 답변이 중간에 끊길 가능성
특히 max_tokens 설정은 모델이 생성할 수 있는 최대 토큰 수를 제한한다. max_tokens는 생성되는 토큰의 최대 개수를 제한하고, 너무 긴 답변이 나오지 않도록 제어하는 데 사용된다.
예를 들어 max_tokens를 너무 작게 설정하면 답변이 이렇게 끊길 수 있다.
RAG는 Retrieval-Augmented Generation의 약자로, 외부 문서를 검색하여...
반대로 너무 크게 설정하면 불필요하게 긴 답변이 생성되어 비용이 늘어날 수 있다.
충분히 답변할 만큼은 크게,
불필요하게 길어지지 않을 만큼은 작게.
10. 정리 표: Encoding / Token / Tokenization / Embedding
| 개념 | 한 줄 정의 | 역할 | 예시 | 왜 중요한가 |
|---|---|---|---|---|
| Character Encoding | 문자를 컴퓨터가 처리할 수 있는 숫자 형태로 바꾸는 규칙 | 문자를 저장하고 전달할 수 있게 만든다 | UTF-8, URL Encoding, Base64 | 컴퓨터가 텍스트를 다루기 위한 가장 기본 단계 |
| Token | LLM이 텍스트를 처리하는 기본 단위 | 문장을 모델이 읽을 수 있는 작은 조각으로 나눈 결과 | 단어, 조사, 기호, 하위 단어 | 토큰 수가 비용, 속도, 입력 길이, 출력 길이에 직접 영향을 준다 |
| Tokenization | 문장을 토큰 단위로 쪼개는 과정 | 텍스트를 모델 입력 단위로 분해한다 | “오늘 날씨가 좋다” → “오늘 / 날씨 / 가 / 좋 / 다” | 모델마다 토큰화 방식이 달라 같은 문장도 토큰 수가 달라질 수 있다 |
| Embedding | 텍스트의 의미를 숫자 벡터로 표현하는 방식 | 단어와 문장의 의미적 유사성을 계산할 수 있게 한다 | 고양이 → [0.3, 0.8, -0.5, ...] | RAG, 벡터 검색, 추천 시스템의 핵심 기반이 된다 |
마무리
이번 글에서는 LLM이 텍스트를 처리하는 기본 흐름을 정리했다.
처음에는 컴퓨터가 문자를 그대로 이해하지 못하기 때문에 문자를 숫자로 바꾸는 인코딩 과정이 필요하다. 그다음 LLM은 문장을 토큰이라는 단위로 나누고, 각 토큰을 모델이 계산할 수 있는 형태로 처리한다.
임베딩은 텍스트의 의미를 벡터로 표현하는 방식이며, 의미가 비슷한 단어와 문장은 벡터 공간에서도 가까워진다. 마지막으로 GPT는 이전 토큰들을 바탕으로 다음 토큰을 하나씩 예측하면서 문장을 생성한다.
문자 → 인코딩 → 토큰화 → 토큰 → 임베딩 → 다음 토큰 예측 → 문장 생성
'Azure OpenAI Engineering > LLM' 카테고리의 다른 글
| [ Azure OpenAI #6 ] 기본 실습: 리소스 생성부터 Playground, API, SDK 호출까지 (0) | 2026.06.17 |
|---|---|
| [Azure OpenAI #5] Azure OpenAI Service 전체 구조 이해하기: 리소스, 모델, 배포, Endpoint (1) | 2026.06.17 |
| [Azure OpenAI #4] Transformer와 GPT 구조 : 왜 문맥을 이해할 수 있을까? (0) | 2026.06.17 |
| [Azure OpenAI #2] GPT 이름 뜯어보기: Generative, Pre-trained, Transformer (0) | 2026.06.17 |
| [Azure OpenAI #1] 생성형 AI란 무엇인가? GPT는 왜 특별할까? (0) | 2026.06.17 |