한 문장으로 요약한 LLM의 정체
대규모 언어모델(LLM, Large Language Model)은 지금까지의 문장을 보고 다음에 올 단어로 가장 그럴듯한 것을 하나 고르고, 그것을 붙인 뒤 다시 다음 단어를 고르기를 반복하는 '다음 단어 예측기'다. 놀라울 만큼 유창한 답변을 내놓는 ChatGPT도 그 밑바닥을 들여다보면 이 단순한 반복 하나로 굴러간다.
여기서 '고른다'는 말은 감이나 직관이 아니다. 모델은 다음에 올 수 있는 모든 후보 토큰마다 확률을 계산한다. 그 확률 분포에서 하나를 뽑아 문장에 붙이고, 늘어난 문장을 다시 입력으로 넣어 그다음 토큰의 확률을 계산한다. 이 되먹임 구조를 자기회귀(autoregressive)라 부른다.
그렇다면 이렇게 단순한 예측기가 어떻게 태어났을까. LLM의 탄생은 '어떻게 하면 기계가 언어의 다음 조각을 잘 맞힐 수 있을까'라는 질문을 놓고 반세기 가까이 이어진 시행착오의 역사다. 그 흐름을 따라가 보면 오늘의 LLM이 왜 지금 같은 모습이 되었는지가 자연스럽게 드러난다.
AI, 머신러닝, 딥러닝, 그리고 생성형 AI의 자리
먼저 LLM이 기술 지형에서 어디쯤 서 있는지 짚어 두면 이야기가 편하다. 가장 바깥에 인공지능(AI)이 있고, 그 안에 데이터로 규칙을 학습하는 머신러닝이 있다. 머신러닝 안에는 여러 층으로 쌓은 신경망을 쓰는 딥러닝이 있고, 그 딥러닝의 한 갈래로 새로운 콘텐츠를 만들어 내는 생성형 AI(Generative AI)가 놓인다. LLM은 이 생성형 AI 가운데 언어를 다루는 대표 주자다.

생성형 AI가 만들어 내는 결과물은 텍스트에만 국한되지 않는다. 이미지, 코드, 음성처럼 다양한 형태를 만든다. 그중에서도 텍스트를 생성하는 모델이 바로 언어모델이며, 규모를 크게 키운 것이 LLM이다. 이 구분을 머릿속에 넣어 두면 'LLM은 결국 언어에 특화된 거대한 생성형 신경망'이라는 감이 잡힌다.

문장을 숫자로 바꾸는 첫 관문, 토큰화
LLM이 언어를 다루려면 먼저 넘어야 할 벽이 있다. 컴퓨터는 글자를 그대로 읽지 못한다. 컴퓨터가 다루는 것은 오직 숫자다. 그래서 문장을 조각으로 잘라 번호로 바꿔 넣어야 하는데, 이 과정이 토큰화(tokenization)다. 이때 잘라낸 조각 하나를 토큰(token)이라 부른다. 토큰은 단어일 수도, 단어의 일부일 수도, 때로는 글자 하나일 수도 있다.
왜 단어 단위가 아니라 조각 단위로 자를까. 세상의 단어는 너무 많고 계속 새로 생긴다. 모든 단어에 미리 번호를 매겨 두는 것은 불가능하다. 그래서 자주 붙어 다니는 덩어리는 통째로 두고, 드문 표현은 잘게 쪼개는 절충을 택한다. 예를 들어 사전에 없던 신조어 'cyberpunk'가 들어와도 'cyber'와 'punk'라는 두 블록으로 조립하면 그만이다. 정해진 수의 블록만으로 세상의 거의 모든 문장을 표현할 수 있다.
토큰은 사람이 정한 문법 단위가 아니라 방대한 글에서 통계적으로 잘라낸 조각이다. 그래서 언어마다 조각나는 정도가 다르다. 영어는 대체로 토큰 하나가 네 글자쯤이고 토큰 하나가 영어 단어 약 0.75개다. 토큰 100개면 영어 단어 75개 남짓인 셈이다. 반면 한국어는 같은 뜻을 담아도 조각이 더 잘게 난다. 측정에 따르면 한국어는 영어보다 약 2~3배, 문장에 따라 그 이상까지 토큰이 늘어난다.
이 차이는 실무에서 두 가지로 체감된다. 하나는 길이 제한이다. 같은 분량을 넣어도 한국어가 토큰 한도에 더 빨리 닿는다. 다른 하나는 요금이다. 사용량만큼 과금하는 서비스에서는 한국어가 상대적으로 비싸게 계산된다. 궁금하다면 공개된 토크나이저 도구에 문장을 직접 넣어 보면 된다. 한국어와 영어 문장을 나란히 넣고 조각 수를 비교하면 '문장이 숫자 조각으로 바뀐다'는 개념이 곧바로 손에 잡힌다.
이름표를 좌표로 — 임베딩과 의미의 지도
토큰마다 고유 번호가 붙었지만, 번호는 이름표에 지나지 않는다. '고양이'가 5번이고 '강아지'가 8721번이라 해도, 이 두 숫자만 봐서는 둘이 얼마나 비슷한 뜻인지 알 길이 없다. 5와 8721은 서로 무관한 두 수일 뿐이다. 사람은 '고양이'와 '강아지'가 가깝고 '고양이'와 '냉장고'가 멀다는 것을 안다. 기계도 이 '가깝고 멂'을 다룰 수 있어야 문맥을 근사하게라도 파악한다.
그 답이 임베딩(embedding)이다. 토큰 하나를 숫자 하나가 아니라 숫자 여러 개의 묶음, 곧 좌표로 바꾼다. 이 좌표가 놓인 공간을 흔히 '의미의 지도'라 비유한다. 지도 위에서 뜻이 비슷한 토큰은 가까이 모이고, 뜻이 먼 토큰은 멀리 떨어진다. 이렇게 하면 뜻의 거리가 곧 좌표의 거리가 된다.
임베딩의 힘은 좌표끼리의 계산으로 의미의 관계를 다룰 수 있다는 데 있다. 유명한 예로 '왕'에서 '남자'를 빼고 '여자'를 더하면 '여왕'에 가까운 좌표가 나온다는 유추가 있다. 뜻의 방향이 좌표의 방향으로 옮겨졌다는 증거다. 이 유명한 유추 예시 자체는 미콜로프 등의 word2vec(2013)에서 나왔다. 다만 단어를 저차원 벡터로 표현한다는 발상의 뿌리는 더 거슬러 올라가, 벤지오 등이 2003년에 제안한 신경 확률 언어모델(A Neural Probabilistic Language Model)에 닿는다. 단어를 저차원 벡터로 표현하고 그 위에서 다음 단어의 확률을 학습한다는 발상이 여기서 본격화됐다.
정리하면 토큰화가 '문장을 숫자 조각으로 쪼개는' 단계라면, 임베딩은 '그 조각에 뜻을 부여하는' 단계다. 이 두 관문을 지나야 비로소 신경망이 언어를 계산 가능한 형태로 다룬다.
순서를 기억하려는 몸부림 — RNN과 LSTM의 시대

언어는 순서가 생명이다. '개가 사람을 물었다'와 '사람이 개를 물었다'는 같은 단어를 담고도 뜻이 완전히 다르다. 초기 신경망 언어모델은 앞뒤 순서를 다루기 위해 순환신경망(RNN, Recurrent Neural Network)을 도입했다. 미콜로프 등의 연구가 보여주었듯, RNN은 지금까지 읽은 내용을 하나의 '상태'로 요약해 다음 단어를 예측할 때 그 상태를 이어받는다. 단어를 하나씩 흘려 넣으면서 기억을 누적하는 셈이다.
그런데 RNN에는 고질병이 있었다. 문장이 길어지면 앞쪽 정보가 뒤로 갈수록 흐려진다. 학습 과정에서 오차 신호가 여러 단계를 거치며 점점 작아지거나 커지는 현상, 곧 기울기 소실과 폭발 탓이다. '오늘 아침에 …(긴 서술)… 그래서 나는'까지 왔을 때 맨 앞의 '아침'을 이미 잊어버리는 식이다.
이 한계를 완화한 것이 장단기 기억(LSTM, Long Short-Term Memory)이다. 호흐라이터와 슈미트후버가 제안한 LSTM은 정보를 저장할지, 잊을지, 내보낼지를 조절하는 여러 개의 문(gate) 구조를 두었다. 이 문들이 중요한 정보는 오래 붙들고 불필요한 정보는 흘려보내면서, 긴 문맥을 이전보다 훨씬 안정적으로 나른다.
LSTM은 시퀀스 투 시퀀스(Sequence to Sequence) 구조와 결합하며 기계 번역 같은 과제에서 큰 성과를 냈다. 한 문장을 상태로 압축한 뒤 그 상태로부터 다른 언어의 문장을 한 단어씩 생성하는 방식이다. 다만 이 계열의 모델에는 여전히 근본적 제약이 있었다. 단어를 순서대로 하나씩 처리해야 하므로 병렬화가 어렵고, 문장 전체를 좁은 상태 벡터 하나에 밀어 넣다 보니 긴 문맥에서는 정보가 병목에 걸렸다.
판을 뒤집은 한 편의 논문 — 트랜스포머와 어텐션
2017년 '어텐션이 전부다(Attention Is All You Need)'라는 논문이 판을 뒤집었다. 이 논문은 RNN의 순환 구조를 아예 걷어내고, 어텐션(attention)만으로 문장을 처리하는 트랜스포머(Transformer)를 제안했다. 이후 등장한 거의 모든 대규모 언어모델이 이 구조를 뼈대로 삼는다. LLM의 탄생을 이야기할 때 가장 결정적인 전환점이다.
어텐션의 핵심 발상은 이렇다. 어떤 단어의 뜻을 정할 때, 문장 안의 다른 모든 단어를 한꺼번에 둘러보고 그중 어디에 더 '주목'할지를 정한다. 예를 들어 '그 은행에서 돈을 찾았다'의 '은행'은 '돈'이라는 단어에 강하게 주목하며 금융기관이라는 뜻으로 굳는다. RNN처럼 앞에서부터 순차적으로 기억을 넘겨받는 대신, 모든 위치가 서로를 직접 참조한다. 이를 자기어텐션(self-attention)이라 한다.
이 구조 덕분에 두 가지 문제가 한꺼번에 풀렸다. 첫째, 멀리 떨어진 단어끼리도 곧바로 연결되므로 긴 문맥에서 정보가 흐려지는 문제가 크게 줄었다. 둘째, 단어를 하나씩 순서대로 처리할 필요가 없어 계산을 대규모로 병렬화할 수 있게 됐다. 병렬화가 가능해졌다는 점이 특히 중요하다. 훨씬 많은 데이터로 훨씬 큰 모델을 현실적인 시간 안에 학습할 길이 열렸기 때문이다.
트랜스포머는 단어의 순서 정보를 위치 인코딩으로 따로 넣어 준다. 순환 구조를 버린 대가로 순서 개념을 명시적으로 보태 준 것이다. 토큰화로 자르고, 임베딩으로 좌표를 얻고, 어텐션으로 서로 주목하게 한 뒤, 다음 토큰의 확률을 계산하는 오늘날 LLM의 골격이 바로 이 논문에서 완성됐다.
다음 단어를 실제로 '고르는' 방법 — 확률 분포와 디코딩
어텐션을 거친 모델은 마지막에 '다음에 올 토큰'의 확률 분포를 내놓는다. 어휘집에 있는 수만 개의 토큰마다 점수를 매기고, 이를 소프트맥스라는 함수로 통과시켜 합이 1이 되는 확률로 바꾼다. 예를 들어 '오늘 날씨가 참' 다음에 '좋다'가 0.6, '맑다'가 0.2, '흐리다'가 0.05 하는 식으로 막대그래프가 그려진다.
여기서 '고른다'가 실제로 벌어진다. 가장 확률이 높은 토큰만 늘 고르면 답이 안전하지만 단조롭다. 그래서 디코딩 파라미터로 선택의 성격을 조절한다. 대표적으로 온도(temperature), 상위 k개(top-k), 누적 확률 상위(top-p, 뉴클리어스 샘플링)가 있다. 온도를 낮추면 분포가 뾰족해져 뻔하지만 일관된 답이 나오고, 높이면 분포가 평평해져 다양하지만 엉뚱해질 위험이 커진다.
| 파라미터 | 하는 일 | 값을 올리면 |
|---|---|---|
| temperature | 확률 분포의 뾰족함 조절 | 무작위성·다양성 증가 |
| top-k | 상위 k개 후보만 남기고 추출 | 후보 폭 넓어짐 |
| top-p | 누적 확률 p까지의 후보만 남김 | 상황에 따라 후보 수 유동적 |
| 그리디(greedy) | 매번 최고 확률만 선택 | 해당 없음(항상 결정적) |
이렇게 고른 토큰을 문장 끝에 붙이고, 늘어난 문장을 다시 입력에 넣어 그다음 토큰을 고른다. 이 되먹임이 바로 자기회귀 루프다. 토큰화 → 임베딩 → 어텐션 → 확률분포 → 선택, 그리고 다시 처음으로. 이 다섯 정거장이 하나의 고리로 맞물려 돌아가는 것이 LLM이 글을 써 내려가는 방식이다.
규모가 만든 도약 — 스케일링과 few-shot 능력
트랜스포머가 뼈대를 놓았다면, LLM을 오늘의 모습으로 키운 결정적 요인은 '규모'다. 모델의 매개변수(파라미터) 수, 학습 데이터의 양, 계산 자원을 함께 키우면 성능이 예측 가능한 방식으로 좋아진다는 관찰이 있다. 이를 정리한 것이 신경망 언어모델의 스케일링 법칙(Scaling Laws)이다. 규모를 키우는 투자가 왜 합리적인지에 이론적 근거를 준 셈이다.
규모를 충분히 키우자 예상 밖의 능력이 나타났다. GPT-3를 소개한 논문 '언어모델은 소수 예제 학습자다(Language Models are Few-Shot Learners)'는, 별도의 재학습 없이 프롬프트에 몇 개의 예시만 보여 줘도 새로운 과제를 곧잘 수행하는 현상을 보고했다. 예시를 아예 주지 않는 제로샷(zero-shot), 몇 개만 주는 퓨샷(few-shot)만으로도 번역, 요약, 질의응답을 해낸 것이다.

오늘날 LLM은 대체로 두 단계를 거쳐 태어난다. 먼저 방대한 텍스트로 다음 토큰을 맞히도록 훈련하는 사전학습(pre-training)으로 언어의 폭넓은 통계와 지식을 흡수한다. 이어서 사람의 지시를 잘 따르고 유용하게 답하도록 다듬는 정렬(alignment) 단계를 거친다. 지시 튜닝과 사람 피드백 기반 강화학습이 여기에 속한다. 이 과정을 통해 '다음 단어 예측기'가 대화 상대로 변신한다.
자주 하는 오해와 넘지 못한 벽
가장 흔한 오해는 LLM이 사실을 '알고' 있어서 답한다는 생각이다. 실제로는 학습한 통계에 비추어 가장 그럴듯한 다음 토큰을 이어 붙일 뿐이다. 그럴듯함과 정확함은 다르다. 그래서 자신 있게 틀린 내용을 지어내는 환각(hallucination)이 생긴다. LLM은 진실 검증기가 아니라 확률적 문장 생성기라는 점을 늘 염두에 둬야 한다.
또 다른 오해는 온도를 0으로 두면 완전히 똑같은 답이 매번 나온다는 믿음이다. 그리디 선택에 가까워져 재현성이 높아지는 것은 맞지만, 구현이나 하드웨어에 따라 미세한 차이가 남을 수 있다. 확률 분포에서 뽑는 과정 자체가 무작위성을 품고 있음을 이해하면 출력이 매번 조금씩 달라지는 까닭도 자연스럽게 받아들일 수 있다.
구조적 한계도 분명하다. 트랜스포머의 자기어텐션은 문장이 길어질수록 계산량이 급격히 늘어난다. 그래서 한 번에 다룰 수 있는 문맥의 길이에 실용적 상한이 있다. 최신 지식을 담지 못하는 문제, 학습 데이터에 스며든 편향의 문제도 여전하다. 이런 약점을 보완하려고 외부 지식을 검색해 붙여 주는 검색 증강 생성(RAG)이나 특정 도메인에 맞춰 다시 훈련하는 파인튜닝(fine-tuning)이 실무에서 함께 쓰인다.
사전학습에서 정렬까지 — 원본 모델이 대화 상대가 되기까지
대규모 언어모델(LLM)을 만드는 과정은 크게 세 단계로 나뉜다. 먼저 방대한 텍스트로 다음 단어를 맞히도록 훈련하는 사전학습(pre-training)이 있다. 이 단계를 마친 모델을 흔히 '기반 모델(base model)' 또는 '원본 모델'이라 부른다. 기반 모델은 지식이 풍부하지만 성격이 묘하다. 질문을 던지면 답을 하기보다 비슷한 질문을 계속 나열하거나, 문장을 그럴듯하게 이어 쓰는 데만 몰두한다. 인터넷 문서의 통계를 학습했으니 '다음에 올 법한 텍스트'를 뱉을 뿐, 사람의 의도를 따르도록 배운 적이 없기 때문이다.
기반 모델을 쓸 만한 조수로 바꾸는 첫 손질이 지도학습 미세조정(supervised fine-tuning, SFT)이다. 사람이 직접 작성한 '좋은 질문-좋은 답변' 쌍 수천~수만 건을 모아 다시 학습시킨다. 이 과정에서 모델은 '지시가 들어오면 그에 맞춰 답한다'는 형식을 익힌다. 여기까지만 해도 지시를 따르는(instruction-following) 모델이 되지만, 여전히 답변의 품질을 사람 취향에 맞게 세밀히 조율하지는 못한다.
마지막 손질이 인간 피드백 기반 강화학습(RLHF, Reinforcement Learning from Human Feedback)이다. 같은 질문에 모델이 여러 답을 내놓게 하고, 사람이 어느 답이 더 나은지 순위를 매긴다. 이 순위 데이터로 '보상 모델(reward model)'을 따로 학습한 뒤, 원래 모델이 보상을 최대화하도록 강화학습으로 다시 미세조정한다. 이 단계를 거치면 답변이 공손해지고, 위험한 요청을 거절하며, 두서없는 반복이 정리된다. 오늘날 우리가 대화형으로 쓰는 모델은 사실상 이 세 겹의 가공을 모두 통과한 결과물이다.
최근에는 RLHF의 복잡한 강화학습 파이프라인을 단순화한 직접 선호 최적화(DPO, Direct Preference Optimization) 같은 기법도 널리 쓰인다. 보상 모델을 명시적으로 만들지 않고 선호 데이터로 곧장 정책을 조정하는 방식이다. 어느 쪽이든 핵심 통찰은 같다. 지능의 원천은 사전학습이 만들지만, 그 지능을 '쓸 만하게' 다듬는 것은 정렬(alignment) 단계라는 점이다. 성능 좋은 기반 모델도 정렬을 잘못하면 쓸모없어지고, 평범한 기반 모델도 정렬을 잘하면 체감 품질이 크게 오른다.
컨텍스트 윈도우라는 작업 기억의 한계와 확장 전쟁
LLM에는 한 번에 처리할 수 있는 토큰 수의 상한이 있다. 이를 컨텍스트 윈도우(context window)라 부른다. 초기 모델은 2,048토큰 안팎이었지만, 요즘은 수만에서 수십만 토큰을 다루는 모델도 나온다. 컨텍스트 윈도우는 사람으로 치면 작업 기억에 해당한다. 창 밖으로 밀려난 내용은 모델이 '잊어버린' 것과 같다. 긴 대화를 나누다 보면 앞서 한 말을 모델이 놓치는 이유가 여기에 있다.
컨텍스트를 늘리는 일이 왜 어려운가. 표준 자기어텐션(self-attention)의 계산량이 토큰 수의 제곱에 비례하기 때문이다. 토큰이 2배가 되면 계산량은 대략 4배(어텐션 행렬을 그대로 만드는 표준 구현에선 메모리도 4배)로 뛴다. 1만 토큰을 처리하던 모델을 10만 토큰으로 늘리면 어텐션 비용은 100배 수준으로 폭증한다. 그래서 긴 컨텍스트는 단순히 상한선을 푼다고 되는 게 아니라, 계산 구조 자체를 손봐야 하는 공학 문제다.
이 문제를 풀려고 여러 기법이 등장했다. 위치 정보를 상대적으로 인코딩하는 회전 위치 임베딩(RoPE)과 그 보간 기법으로 학습 때보다 긴 입력에 적응시키고, 플래시어텐션(FlashAttention)으로 메모리 접근을 최적화해 실질 처리 길이를 늘린다. 또한 모든 토큰이 모든 토큰을 보지 않고 일부만 보게 하는 희소 어텐션(sparse attention)도 쓰인다. 이런 기법 덕분에 긴 문서 요약이나 코드베이스 전체 분석 같은 작업이 가능해졌다.
다만 컨텍스트가 길다고 만능은 아니다. 실무에서는 '중간 소실(lost in the middle)' 현상이 잘 알려져 있다. 입력의 맨 앞과 맨 뒤에 놓인 정보는 잘 활용하지만, 한가운데 묻힌 정보는 놓치기 쉽다. 그래서 검색 증강 생성(RAG) 파이프라인을 설계할 때, 중요한 근거 문서를 프롬프트의 앞뒤 요지에 배치하는 편이 유리하다. 컨텍스트 윈도우는 넓힐수록 좋지만, 넓은 창을 어떻게 채우느냐가 실제 품질을 좌우한다.
환각은 버그가 아니라 설계의 그림자
LLM이 그럴듯한 거짓을 지어내는 현상을 환각(hallucination)이라 부른다. 흔히 이를 고쳐야 할 결함으로 여기지만, 원리를 들여다보면 환각은 이 기술의 작동 방식에서 자연스럽게 따라 나오는 성질이다. 모델은 '진실'을 저장한 데이터베이스가 아니다. 다음 토큰의 확률 분포를 계산해 가장 그럴듯한 이어짐을 생성할 뿐이다. 존재하지 않는 논문 제목이나 가짜 API 함수도, 통계적으로 '있을 법한' 형태라면 자신 있게 만들어낸다.
환각이 특히 잘 터지는 지점이 있다. 학습 데이터에 드물게 등장한 고유명사, 최신 사건, 정밀한 수치, 인용 출처가 대표적이다. 모델 내부에는 이런 세부 사실을 정확히 저장할 자리가 부족하고, 부족한 부분을 통계적 그럴듯함으로 메운다. 사람으로 치면, 반쯤 아는 이야기를 자신감 있게 매끄럽게 지어내는 상황과 비슷하다. 문제는 모델이 '내가 모른다'는 신호를 스스로 잘 내지 못한다는 데 있다.
실무에서 환각을 줄이는 방법은 모델 자체를 고치는 쪽과 사용 방식을 바꾸는 쪽으로 나뉜다. 아래 표에 대표적인 접근을 정리했다.
| 접근 방법 | 핵심 원리 | 한계 |
|---|---|---|
| RAG(검색 증강) | 외부 문서를 근거로 붙여 사실을 참조 | 검색 품질이 낮으면 그대로 오염 |
| 출처 인용 강제 | 근거 없는 주장을 억제 | 인용 자체를 지어낼 위험 |
| 디코딩 온도 낮추기 | 무작위성을 줄여 안전한 답 유도 | 창의성·다양성 저하 |
| 자기검증 프롬프트 | 답을 재검토하게 유도 | 계산 비용 증가, 완전 제거 불가 |
환각을 0으로 만드는 완벽한 해법은 아직 없다. 그래서 실무에서는 관점을 바꾸는 편이 낫다. '모델이 절대 틀리지 않게 한다'가 아니라 '틀렸을 때 검증 가능한 구조를 만든다'로. 의료·법률·금융처럼 오류 비용이 큰 영역에서는 반드시 출처를 붙이고 사람이 최종 확인하는 절차를 넣는다. 환각은 이 기술의 그림자다. 빛을 쓰려면 그림자를 관리하는 설계가 필요하다.
토큰당 비용과 지연 — 엔지니어가 마주하는 현실 경제학
연구 논문에서는 잘 드러나지 않지만, LLM을 실제 서비스에 얹으면 곧바로 경제학 문제와 마주친다. 대부분의 상용 API는 처리한 토큰 수로 요금을 매긴다. 입력 토큰과 출력 토큰의 단가가 다르고, 보통 출력이 더 비싸다. 여기서 앞서 설명한 토큰화가 다시 등장한다. 같은 의미라도 한국어는 영어보다 토큰을 더 많이 소모하는 경향이 있어, 다국어 서비스에서는 언어별 비용 차이를 반드시 계산에 넣어야 한다.
지연(latency)도 무시할 수 없다. LLM은 토큰을 하나씩 순차적으로 생성한다. 이를 자기회귀(autoregressive) 생성이라 한다. 앞 토큰을 만들어야 다음 토큰을 계산할 수 있으니, 출력이 길수록 응답이 늦어진다. 그래서 첫 토큰이 나오기까지의 시간(TTFT)과 토큰당 생성 속도를 나눠서 관리한다. 사용자 체감을 좋게 하려면 완성된 답을 한꺼번에 주기보다, 생성되는 대로 흘려보내는 스트리밍 방식을 쓰는 편이 유리하다.
반복 계산을 줄이는 핵심 장치가 KV 캐시(key-value cache)다. 자기어텐션에서 이미 계산한 이전 토큰들의 키와 값을 저장해 두고, 새 토큰을 생성할 때 재활용한다. 이 캐시가 없으면 매 토큰마다 전체 문맥을 다시 계산해야 해 속도가 크게 떨어진다. 다만 KV 캐시는 컨텍스트가 길수록 GPU 메모리를 많이 잡아먹는다. 긴 컨텍스트의 실질적 병목이 계산량뿐 아니라 이 캐시 메모리라는 점은 실무에서 자주 간과된다.
비용과 지연을 함께 잡는 실전 전략이 여럿 있다. 자주 반복되는 시스템 프롬프트는 캐싱해 재사용하고, 간단한 질의는 작은 모델로, 어려운 질의만 큰 모델로 넘기는 라우팅을 쓴다. 또 불필요하게 긴 출력을 요구하지 않도록 프롬프트에서 형식과 분량을 명시한다. 성능 좋은 모델을 고르는 것만큼이나, 토큰을 아끼고 응답을 빠르게 만드는 파이프라인 설계가 서비스 품질을 좌우한다.
단일 모델을 넘어 — 에이전트, 도구 사용, 그리고 확장
LLM은 태생적으로 텍스트를 예측하는 장치다. 계산기를 두드리거나 실시간 정보를 검색하거나 파일을 저장하는 능력은 없다. 이 한계를 넘으려는 흐름이 도구 사용(tool use)과 함수 호출(function calling)이다. 모델이 '지금은 계산기가 필요하다'고 판단하면, 정해진 형식으로 함수 호출을 출력한다. 바깥 시스템이 그 호출을 실제로 실행하고 결과를 다시 모델에게 돌려준다. 모델은 그 결과를 근거로 최종 답을 완성한다. 이렇게 하면 LLM의 언어 능력과 외부 시스템의 정확성을 결합할 수 있다.
이 구조를 여러 단계로 확장한 것이 에이전트(agent)다. 에이전트는 목표를 받으면 스스로 계획을 세우고, 필요한 도구를 골라 실행하고, 결과를 보고 다음 행동을 정한다. 앞선 소제목에서 다룬 확률적 다음 토큰 예측이라는 단순한 원리가, 이 반복 루프 안에서는 '생각하고 행동하는' 것처럼 보이는 행동으로 확장된다. 추론과 행동을 번갈아 엮는 ReAct 패턴이 이런 에이전트 설계의 대표적 뼈대다.
최근 이 생태계를 표준화하려는 시도도 활발하다. 모델이 외부 도구·데이터 소스와 일관된 방식으로 연결되도록 프로토콜을 정의하려는 움직임이 그 예다. 표준이 자리 잡으면, 매번 서비스마다 도구 연동을 새로 짜지 않고 재사용할 수 있다. 이는 LLM을 하나의 완결된 두뇌로 보던 시각에서, 여러 도구를 지휘하는 조율자로 보는 시각으로 무게중심이 옮겨가고 있음을 보여준다.
다만 에이전트에는 새로운 함정이 따라온다. 단계가 늘수록 중간에 한 번 판단을 잘못하면 오류가 뒤로 누적된다. 무한 루프에 빠지거나, 불필요한 도구 호출로 비용이 폭증하기도 한다. 게다가 외부 도구를 실행할 권한을 주는 순간 보안 표면이 넓어진다. 악의적으로 조작된 입력이 프롬프트에 섞여 들어와 의도치 않은 행동을 유발하는 프롬프트 주입(prompt injection)은 특히 조심해야 한다. 에이전트 설계는 결국 '얼마나 자유롭게 풀어주되 어떻게 안전하게 가둘 것인가'의 균형 잡기다.
더 깊이 파고들려면
LLM의 탄생을 제대로 이해하려면 원전을 직접 읽어 보는 것이 가장 빠르다. 임베딩의 뿌리를 알고 싶다면 벤지오의 신경 확률 언어모델을, 순서 처리의 진화를 보고 싶다면 미콜로프의 RNN 언어모델과 호흐라이터의 LSTM을 권한다. 문장 전체를 다른 문장으로 바꾸는 발상은 시퀀스 투 시퀀스 논문에서 확인할 수 있다.
무엇보다 트랜스포머를 제안한 '어텐션이 전부다'는 반드시 거쳐야 할 관문이다. 오늘날 거의 모든 LLM의 뼈대가 여기서 나왔기 때문이다. 규모가 만든 도약을 실감하려면 GPT-3 논문과 스케일링 법칙을 나란히 읽어 보면 좋다. 왜 큰 모델에 투자하는지, 왜 예시 몇 개만으로 새 과제를 풀어내는지가 함께 이해된다.
개념 사이의 연결도 놓치지 말자. 토큰화는 임베딩으로, 임베딩은 어텐션으로, 어텐션은 확률 분포와 디코딩으로 이어진다. 그 바깥에는 사전학습과 정렬, 그리고 프롬프트 엔지니어링, RAG, 파인튜닝 같은 활용 기법이 자리한다. 이 지도를 머릿속에 그려 두면, 새로운 모델이나 기법이 나와도 '이것이 다섯 정거장 중 어디를 개선한 것인가'를 스스로 가늠할 수 있다. 그것이 LLM의 탄생사를 공부하는 진짜 이유다.