02. LLM이 텍스트를 다루는 방식
- LLM을 "다음 토큰 예측기"로 보는 최소한의 직관을 얻는다
- 이 직관에서 거의 모든 프롬프트 기법이 왜 통하는지가 따라 나온다는 걸 안다
- 확률·컨텍스트 의존·attention 한계라는 세 가지 성질을 이해한다
이 장은 이 안내서에서 가장 "이론적인" 장입니다. 하지만 트랜스포머 수식을 외우자는 게 아닙니다. 이후 모든 기법의 근거가 되는 최소한의 직관 세 가지만 챙기면 됩니다. 코드는 전혀 없습니다.
한 줄 직관: LLM은 "다음에 올 말"을 예측하는 기계다
LLM(대규모 언어 모델)이 하는 일은, 지금까지 주어진 텍스트를 보고 그다음에 올 가장 그럴듯한 조각을 하나 내놓는 것입니다. 그리고 그 조각을 다시 입력에 붙여, 또 그다음 조각을 예측합니다. 이걸 끝날 때까지 반복합니다.
flowchart LR
in["입력 텍스트<br/>(프롬프트)"] --> m["모델"]
m --> p["다음 조각<br/>후보들의 확률 분포"]
p --> pick["하나 선택"]
pick --> append["입력 뒤에 붙임"]
append --> m
classDef inp fill:#fef9c3,stroke:#eab308,color:#713f12
classDef modelcls fill:#cffafe,stroke:#06b6d4,color:#164e63
classDef proc fill:#dbeafe,stroke:#3b82f6,color:#1e3a8a
class in inp
class m modelcls
class p,pick,append proc
이 단순한 그림에서 놀랍도록 많은 것이 따라 나옵니다. "이해"하거나 "생각"하는 별도의 단계가 있는 게 아니라, 그럴듯한 다음 말의 연쇄가 우리 눈에 답변으로 보이는 것입니다. 이 관점을 가지면 "왜 이 프롬프트가 통하지?"라는 질문에 스스로 답할 수 있게 됩니다.
📌 핵심: 모델은 당신의 의도를 읽는 게 아니라, 당신이 준 텍스트 다음에 올 법한 말을 잇습니다. 그러니 "다음에 올 말이 내가 원하는 것이 되도록" 입력을 깔아주는 것이 프롬프트 엔지니어링입니다.
성질 1: 토큰 — 모델은 글자도 단어도 아닌 "조각"으로 본다
위에서 "조각"이라고 부른 것의 정확한 이름은 토큰(token)입니다. 토큰은 대략 단어의 일부에서 한 단어 사이의 크기인데, 자주 쓰이는 짧은 단어는 한 토큰, 긴 단어나 드문 단어는 여러 토큰으로 쪼개집니다. 한국어는 영어보다 한 글자가 더 많은 토큰을 차지하는 경향이 있습니다.
왜 알아야 할까요? 두 가지 실용적 이유 때문입니다.
- 길이와 비용은 토큰으로 셉니다. 모델이 한 번에 볼 수 있는 양(컨텍스트 윈도우)도, 비용도 글자 수가 아니라 토큰 수 기준입니다. (3부·6부에서 자세히)
- 모델은 글자 단위 작업에 약할 수 있습니다. "이 문장에 'ㄹ'이 몇 개야?" 같은 질문에 틀리는 일이 있는데, 모델이 글자가 아니라 토큰으로 세상을 보기 때문입니다. 이건 모델이 멍청해서가 아니라 보는 단위가 다르기 때문입니다.
💡 팁: 글자·철자 단위의 정밀 작업(특정 글자 세기, 거꾸로 쓰기 등)은 모델에게 본질적으로 불리한 작업입니다. 꼭 필요하면 단계를 쪼개거나(2부 단계적 사고), 도구를 쓰게 하세요(5부).
성질 2: 확률 — 같은 프롬프트가 매번 같은 답을 주지 않는다
모델은 다음 토큰 하나를 딱 정해주는 게 아니라, 가능한 토큰들에 대한 확률 분포를 내놓습니다. "다음에 '바다'가 올 확률 30%, '하늘' 20%, …" 식입니다. 그중 하나를 골라야 하는데, 이때 약간의 무작위성이 개입합니다. 그래서 같은 프롬프트라도 답이 매번 조금씩 달라질 수 있습니다.
이 무작위성의 정도를 조절하는 손잡이가 흔히 temperature(온도)라 불리는 설정입니다. 낮으면 가장 확률 높은 토큰에 집중해 일관적·보수적이 되고, 높으면 다양하고 창의적이지만 들쭉날쭉해집니다.
⚠️ 흔한 실수·미신: "temperature를 0으로 하면 완전히 똑같은 답이 나온다"는 흔한 믿음은 항상 참은 아닙니다. 또한 최신 추론 모델 중에는 temperature를 기본값에서 바꾸지 말라고 명시적으로 권고하는 경우가 있습니다. 예를 들어 한 제공자는 자사 최신 모델군에서 temperature를 기본값(1.0)으로 유지하라고 강하게 권하며, 낮추면 복잡한 추론·수학 작업에서 루프나 성능 저하 같은 예기치 않은 동작이 생길 수 있다고 경고합니다. "낮은 temperature = 항상 더 정확"이 아니라는 뜻입니다.
🔧 개발자 노트: temperature, top-p, top-k는 토큰 선택 방식을 조절하는 파라미터입니다. 직관적으로 top-k는 "확률 상위 k개 후보 중에서만 고르기", top-p는 "누적 확률 p%까지의 후보 중에서 고르기"입니다. 다만 최신 모델군에서는 이 값들을 건드리지 말고 기본값을 쓰라는 가이드가 늘고 있으니, 바꾸기 전에 자신이 쓰는 모델의 공식 문서를 확인하세요.
🧪 직접 검증법: 좋아하는 모델에 똑같은 창작 프롬프트(예: "짧은 시 한 편")를 5번 넣어보세요. 답이 매번 다르다면 확률·무작위성을 눈으로 본 것입니다. 반대로 사실 질문("물의 끓는점은?")은 거의 늘 같게 나올 텐데, 정답 토큰의 확률이 압도적이기 때문입니다.
성질 3: 컨텍스트 의존 — 모델은 "지금 보이는 것"에만 반응한다
모델에게는 우리가 생각하는 의미의 장기 기억이 없습니다. 매 응답마다, 그 순간 입력으로 주어진 텍스트(컨텍스트)만이 모델이 가진 전부입니다. 앞 대화도, 시스템 설정도, 당신이 붙여넣은 자료도 전부 이 컨텍스트 안에 함께 들어가 경쟁합니다.
여기서 두 가지 중요한 결과가 나옵니다.
첫째, 컨텍스트에 없는 것은 모델에게 존재하지 않습니다. 당신 머릿속의 배경, 어제 한 대화(같은 창이 아니라면), 회사 내부 규칙은 명시적으로 넣지 않으면 모델이 알 수 없습니다. "당연히 알겠지"가 통하지 않는 이유입니다.
둘째, 컨텍스트에 넣은 것은 좋든 나쁘든 영향을 줍니다. 관련 자료를 넣으면 답이 좋아지지만, 무관하거나 모순된 내용을 함께 넣으면 모델이 거기에 휘둘립니다. 그래서 "무엇을 넣을까"만큼 "무엇을 뺄까"가 중요합니다. 이것이 컨텍스트 엔지니어링의 출발점입니다(3부).
[컨텍스트 의존의 두 얼굴] 좋은 면: 관련 자료를 주면 → 그걸 근거로 더 정확히 답함 나쁜 면: 무관/모순 자료를 주면 → 거기에 휘둘려 품질 저하
📌 핵심: 모델의 세계는 "지금 컨텍스트에 들어 있는 것"이 전부입니다. 넣은 것은 전부 영향을 주고, 안 넣은 것은 존재하지 않습니다.
attention은 무한하지 않다 — 길수록 무조건 좋은 게 아니다
모델이 컨텍스트를 처리할 때, 모든 부분에 똑같이 주의를 기울이지는 못합니다. 한 제공자의 표현을 빌리면, LLM에는 유한한 "attention 예산(attention budget)"이 있어서, 컨텍스트가 길어질수록 그 예산이 묽게 퍼집니다. 그래서 좋은 컨텍스트 설계란 "원하는 결과를 끌어낼, 고신호 토큰의 가장 작은 집합을 찾는 것"이라고 정리됩니다.
이와 관련해 자주 언급되는 현상이 "중간 소실(lost in the middle)"입니다. 긴 컨텍스트의 한가운데에 둔 정보는 처음이나 끝에 둔 정보보다 활용도가 떨어지는 경향이 관찰됩니다. 또 일부 연구·실무 보고는 추론 품질이 기술적 최대 길이보다 훨씬 못 미치는 지점(예: 수천 토큰 부근)부터 떨어지기 시작한다고 말합니다.
⚠️ 흔한 실수·미신: "컨텍스트 윈도우가 크니까 일단 다 넣고 보자"는 가장 흔한 함정입니다. 길이는 용량이지 효과가 아닙니다. 관련 없는 내용을 잔뜩 넣으면 attention이 분산되어 오히려 답이 나빠질 수 있습니다. 이 주제는 3부에서 본격적으로 다룹니다.
🧪 직접 검증법: 긴 문서 하나를 주고 "3번째 문단의 핵심을 말해줘"라고 물어보세요. 그다음 같은 문서에서 그 3번째 문단만 떼어내 같은 질문을 해보세요. 짧은 버전이 더 정확하다면, attention 분산과 중간 소실을 직접 본 것입니다.
직관에서 기법이 따라 나온다
이 장의 세 성질을 알면, 앞으로 배울 기법들이 왜 통하는지 스스로 추론할 수 있습니다. 미리 연결고리를 보여드립니다.
| 직관 | 여기서 따라 나오는 기법 |
|---|---|
| 모델은 다음 토큰을 잇는다 | 원하는 형식의 시작을 직접 깔아주기, 예시로 패턴 보여주기 |
| 답은 확률적이다 | 재현성이 필요하면 형식을 고정하고, 여러 번 돌려 검증(4부) |
| 컨텍스트가 전부다 | 배경·자료·제약을 명시적으로 넣기, 무관한 것 빼기(3부) |
| attention은 유한하다 | 짧고 고신호로, 중요한 것은 앞/뒤에 배치 |
즉, 기법을 외우기 전에 이 직관을 가지면, 처음 보는 상황에서도 "이 경우엔 무엇을 해야 할까"를 유도할 수 있게 됩니다. 그것이 템플릿을 베끼는 사람과 설계하는 사람의 차이입니다.
이 장에서 배운 것
- LLM은 주어진 텍스트 다음에 올 가장 그럴듯한 토큰을 반복 예측하는 기계다. "의도 읽기"가 아니라 "말 잇기"다.
- 모델은 글자가 아니라 토큰 단위로 세상을 보며, 길이·비용도 토큰으로 센다. 그래서 글자 단위 작업에 약할 수 있다.
- 출력은 확률적이라 같은 프롬프트도 답이 달라질 수 있다. temperature는 그 무작위성을 조절하지만, 최신 모델에선 기본값 유지를 권하는 경우가 많다.
- 모델의 세계는 지금 컨텍스트에 든 것이 전부다. 넣은 것은 다 영향을 주고, 안 넣은 것은 없는 셈이다.
- attention은 유한하다. 길다고 좋은 게 아니며, "중간 소실"과 분산 때문에 고신호 토큰의 최소집합이 이상적이다.
✍️ 확인 문제
- 친구가 "AI한테 같은 질문을 두 번 했는데 답이 달라졌어. 고장 난 거 아냐?"라고 묻습니다. 이 장의 어떤 성질로 설명할 수 있을까요?
- "우리 회사 환불 규정에 맞게 고객 답변을 써줘"라는 프롬프트가 엉뚱한 답을 냈습니다. 컨텍스트 의존 성질에 비추어, 가장 가능성 높은 원인 하나와 해결 방향을 적어보세요.
- (실습) 다음 상황에서 "컨텍스트 윈도우가 크니 일단 다 넣자"는 접근이 왜 위험한지, 이 장의 개념(attention 예산, 중간 소실)을 사용해 설명해보세요.
> "30페이지짜리 회의록 전체를 붙여넣고 '가장 중요한 결정 3개만 알려줘'라고 물었다."
다음 → 03. 프롬프트 vs 컨텍스트 엔지니어링