RAG의 전체 구조를 봤으니, 이제 각 구성요소를 자세히 파고든다. 먼저 LLM 자체다. LLM이 어떻게 작동하고 어떤 강점·한계를 갖는지 이해하면, RAG의 나머지 구성요소들이 왜 그렇게 설계되는지가 자연스럽게 설명된다.

 

1. LLM은 fancy autocomplete다

LLM은 농담처럼 "고급 자동완성(fancy autocomplete)"이라 불리는데, 사실 꽤 정확한 설명이다. LLM이 하는 일은 텍스트에서 다음에 올 단어를 예측하는 것뿐이다. "What a beautiful day, the sun is …"를 주면 우리도 LLM도 shining 정도를 자연스럽게 떠올린다. 원래 문구를 prompt, 완성된 문구를 completion이라 한다.

그림 1. 미완성 문구(prompt)에 단어를 채워 넣은 것이 completion. shining·rising·out 모두 가능하다.

 

"the sun is exploding"은 문법은 멀쩡하지만 확률이 낮아서 부적절하다. 태양은 보통 폭발하지 않으니까. LLM은 내부적으로 neural network — 언어에 대한 거대하고 복잡한 수학적 모델 — 를 사용한다. 이 모델은 어떤 단어들이 흔히 함께, 어떤 순서로 쓰이는지, 그리고 맥락 속에서 무엇을 의미하는지를 저장한다. completion 생성이란 결국 prompt 끝에 단어를 하나씩 이어 붙이는 것이다.

 

 

2. token과 vocabulary

엄밀히 말하면 LLM은 단어가 아니라 token(단어 조각)을 생성한다. London·door 같은 단어는 자체 token을 갖지만, unhappy·programmatically 같은 복합어는 보통 여러 token으로 나뉜다. 마침표·쉼표·물음표도 token이 될 수 있다. 대부분의 LLM은 약 1만~10만 개 이상의 token vocabulary를 갖는다. 작은 조각으로 복합어를 구성할 수 있어, 단어마다 token을 따로 배정하지 않고도 가능한 모든 단어를 표현한다.

그림 2. token은 단어 조각이다. 흔한 단어는 하나의 token, 복합어·구두점은 여러 token으로 나뉜다.

 

 

3. 다음 token을 고르는 과정

LLM이 completion에 새 token을 추가하기 전 거치는 과정은 이렇다.

  1. 현재 상태 처리 — 지금까지의 completion을 처리해 단어 간 관계와 전체 의미를 깊이 이해한다.
  2. 확률 계산 — vocabulary의 모든 token(수만~수십만 개)에 대해 "다음에 등장할 확률"을 계산한다. shining은 높고, rising은 낮고, exploding·snoring 같은 것도 아주 작은 확률을 갖는다. 즉 모든 token에 대한 확률 분포(probability distribution)를 만든다.
  3. 무작위 선택 — 그 분포에서 다음 token을 무작위로 고른다. 100번 중 80번은 shining이지만, rising이나 심지어 exploding이 뽑힐 수도 있다.

그림 3. 현재 상태 처리 → vocabulary 전체에 대한 확률 계산 → 확률 분포에서 다음 token을 무작위 선택.

 

 

4. autoregressive — 자기 영향

새 token을 추가할 때마다 이 전체 과정을 반복한다. 이때 앞서 선택한 token이 이후 선택에 영향을 준다 — 이를 autoregressive(자기 영향)라 한다. 덕분에 새 token이 이미 고른 token들의 맥락에서 자연스럽게 이어진다. 다만 한 번 방향을 무작위로 잡으면 그 경로를 계속 따라간다. 예컨대 shining을 고르면 in the sky로, warming을 골랐다면 our faces로 이어진다. 무작위성과 autoregressive 특성 때문에 같은 프롬프트도 실행할 때마다 다른 completion이 나온다.

그림 4. 초반에 어떤 token을 고르느냐에 따라 completion이 "shining in the sky"로도, "warming our faces"로도 갈린다.

 

 

5. LLM은 어떻게 학습하는가

LLM을 구동하는 수학 모델은 수십억 개의 parameter(수치 weight)를 갖는다. 학습 전에는 그저 무의미한 텍스트를 뱉는다. 학습 중에는 training data의 미완성 텍스트를 보고 다음 단어를 예측하고, 예측이 얼마나 정확했는지에 따라 내부 parameter를 업데이트한다. 이 과정을 반복하며 모델은 데이터 속 사실 정보 언어 스타일을 모두 익힌다. 오늘날 많은 LLM은 주로 공개 인터넷에서 가져온 수조 개의 token으로 학습된다.

그림 5. 학습은 "미완성 텍스트의 다음 단어 예측 → 정확도에 따라 수십억 parameter 업데이트"의 반복이다.

 

 

6. 왜 환각(hallucination)이 발생하는가

LLM이 할 수 있는 건 학습에서 익힌 패턴을 바탕으로 가능성 높은 단어 sequence를 생성하는 것뿐이다. 회사의 비공개 내부 데이터나 오늘의 뉴스를 물으면, 모델은 거의 확실히 그 정보로 학습되지 않았으므로 제대로 답하기 어렵다. 이때 그럴듯하게 들리지만 실제로는 사실이 아닌 응답을 내놓는데, 이것이 환각이다.

중요한 건, 환각이 LLM의 고장이 아니라는 점이다. LLM은 truthful text가 아니라 probable text를 생성하도록 설계됐다. LLM에게 "진실"이란 training data 기준으로 어떤 단어 sequence가 확률적으로 가능성이 높다는 의미일 뿐이다. 그래서 고품질 데이터가 있으면 우리의 직관적 진실과 LLM의 "확률 높은 sequence"가 정렬될 수 있다.

그림 6. LLM은 통계적 패턴을 재생산할 뿐 — 지식 공백이 있으면 "그럴듯하지만 틀린" 답을 만든다. truthful ≠ probable.

 

 

7. RAG가 이 문제를 푸는 방법

그렇다면 과제는 LLM이 가능한 한 많은 관련 정보에 접근하도록 보장하는 것이다. RAG는 LLM이 맥락을 잘 이해하는 능력을 활용해 이를 해결한다. RAG 시스템이 prompt에 관련 정보를 추가하면, 그 정보가 학습 데이터에 없었더라도 LLM은 이를 이해하고 응답에 통합한다. 이 정보가 응답을 grounding(근거 부여)한다.

그림 7. Retriever가 knowledge base에서 가져온 관련 맥락이 LLM의 응답을 grounding한다.

 

 

8. 그럼 정보를 다 넣으면 되지 않나

관련 정보를 최대한 많이 넣고 싶지만, 실제로는 그럴 수 없는 두 가지 이유가 있다.

  • 계산 비용 — 긴 프롬프트는 실행에 더 많은 연산이 든다. 새 token을 생성하기 전마다, 원래 프롬프트를 포함해 completion에 있는 모든 token을 복잡하게 scan하기 때문이다.
  • context window 한계 — 한 번에 처리할 수 있는 가장 긴 sequence에는 상한이 있다. 구형 모델은 수천 token, 최신 모델은 수백만 token까지다.

즉 retriever가 augmented prompt에 정보를 더할수록 처음엔 비용이 오르고, 결국엔 context window를 다 써 버린다. 그래서 "무엇을, 얼마나" 검색해 넣을지가 RAG의 핵심 과제가 된다 — 이것이 이후 모듈들이 파고드는 주제다.

그림 8. 무작정 다 넣지 못하는 이유 — 계산 비용 증가와 context window 한계.

 

이것으로 Module 1(RAG 개요)을 마친다. 핵심은 하나다 — LLM의 설계 덕에 학습 데이터에 없던 정보라도 프롬프트에 넣으면 응답에 통합할 수 있다. 다음 Module 2부터는 그 정보를 찾아 주는 retriever가 실제로 어떻게 검색하는지(키워드 검색, 시맨틱 검색, 하이브리드, 평가)를 깊이 다룬다.

'AI > RAG' 카테고리의 다른 글

Metadata Filtering(메타데이터 필터링)  (0) 2026.07.02
Retriever의 구조  (0) 2026.07.02
RAG 활용 사례  (0) 2026.07.01
RAG 아키텍처와 장점  (0) 2026.07.01
RAG의 정의 및 필요성  (0) 2026.07.01

+ Recent posts