RAG: 검색 증강 생성
서문
왜 ChatGPT는 가끔 "그럴듯하게 헛소리"를 할까요? 대형 언어 모델의 지식은 학습 데이터에서 비롯되지만, 학습 데이터에는 마감 시한이 있고 회사 내부 문서도 포함되어 있지 않습니다. RAG(Retrieval-Augmented Generation, 검색 증강 생성)는 이 문제를 해결하는 핵심 기술입니다——AI가 답변하기 전에 먼저 "자료를 찾아보게" 하는 것입니다.
이 글에서 무엇을 배울 수 있나요?
이 장을 마치면 다음을 얻을 수 있습니다:
- 핵심 개념 이해: RAG가 무엇인지, 왜 필요한지, 그리고 대형 모델의 "환각" 문제를 어떻게 해결하는지 이해
- 전체 흐름 인지: 문서 로딩, 청크 분할, 벡터화부터 검색, 생성까지의 엔드투엔드 흐름 파악
- 기술 선택 능력: 다양한 청크 전략, 검색 방법의 장단점을 이해하고 상황에 맞게 선택
- 아키텍처 진화 관점: RAG가 Naive에서 Advanced, Modular로 진화하는 경로 이해
- 실전 의사 결정 능력: 언제 RAG를 사용하고 언제 파인튜닝을 사용할지 판단
| 장 | 내용 | 핵심 개념 |
|---|---|---|
| 제1장 | RAG 기본 흐름 | 인덱싱, 검색, 생성 3단계 |
| 제2장 | 텍스트 청크 전략 | 고정 청크, 의미적 청크, 재귀적 청크 |
| 제3장 | 검색 기술 | 벡터 검색, 키워드 검색, 하이브리드 검색 |
| 제4장 | 아키텍처 진화 | Naive RAG → Advanced RAG → Modular RAG |
| 제5장 | RAG vs 파인튜닝 | 두 가지 방안의 적용 시나리오 비교 |
0. 전체 그림: 왜 대형 모델은 "자료를 찾아봐야" 할까?
당신이 수많은 책을 읽은 박식한 교수라고 상상해 보세요. 하지만 누군가 "어제 회사 매출 데이터가 얼마인가요?"라고 물으면 당신은 대답할 수 없을 것입니다——왜냐하면 이 정보는 당신이 읽은 책에 없기 때문입니다.
대형 언어 모델도 똑같은 딜레마에 직면합니다:
- 지식에 마감 시한이 있음: GPT-4의 학습 데이터는 특정 시점까지이며, 그 이후의 일은 알지 못함
- 비공개 지식 부족: 회사 내부 문서, 제품 매뉴얼, 고객 데이터——모델이 본 적 없는 정보
- 환각 발생 가능성: 모델이 답변을 확신하지 못할 때, 그럴듯해 보이는 답변을 "날조"하는 경향
RAG의 핵심 아이디어
RAG의 해결책은 매우 직관적입니다: 모델이 답변하기 전에 관련 참고 자료를 먼저 찾아주는 것. 마치 오픈북 시험처럼——모든 지식을 기억할 필요 없이, 어디서 어떻게 찾을지만 알면 됩니다.
RAG = 검색(Retrieval) + 증강(Augmented) + 생성(Generation)
1. RAG 기본 흐름: 인덱싱, 검색, 생성
RAG의 작업 흐름은 두 단계로 나눌 수 있습니다: 오프라인 인덱싱과 온라인 쿼리.
오프라인 단계는 도서관의 목록 작업과 같습니다——모든 책을 분류, 번호 매기기, 진열하여 나중에 찾기 쉽게 합니다. 온라인 단계는 독자가 도서관에 자료를 찾으러 오는 과정입니다——질문에 따라 관련 책을 찾고 정보를 종합하여 답변을 제공합니다.
세 가지 핵심 단계
- 인덱싱 단계(Indexing): 원본 문서를 로딩, 정리, 청크 분할한 후 임베딩 모델을 통해 벡터로 변환하여 벡터 데이터베이스에 저장합니다. 이는 일회성 준비 작업입니다.
- 검색 단계(Retrieval): 사용자 질문 시, 질문도 벡터로 변환하여 벡터 데이터베이스에서 가장 유사한 문서 청크를 검색합니다.
- 생성 단계(Generation): 검색된 문서 청크와 사용자 질문을 함께 Prompt로 조합하여 대형 모델에 전달, 최종 답변을 생성합니다.
| 단계 | 입력 | 출력 | 핵심 기술 |
|---|---|---|---|
| 인덱싱 | 원본 문서 | 벡터 데이터베이스 | 텍스트 청크 분할, 임베딩 모델 |
| 검색 | 사용자 질문 | Top-K 문서 청크 | 벡터 유사도, 재정렬 |
| 생성 | 질문 + 컨텍스트 | 최종 답변 | Prompt 엔지니어링, LLM |
2. 텍스트 청크 분할: 코끼리를 냉장고에 넣기
텍스트 청크 분할은 RAG에서 가장 간과되기 쉽지만 효과에 가장 큰 영향을 미치는 단계입니다. 왜 청크 분할이 필요한가? 대형 모델의 컨텍스트 윈도우는 제한되어 있기 때문에 책 전체를 넣을 수 없습니다. 더 중요한 것은 청크 분할의 품질이 검색 품질을 직접 결정한다는 점입니다.
도서관에서 책의 특정 지식을 찾는다고 상상해 보세요. 책 전체가 하나의 "청크"라면 검색해도 소용없습니다——여전히 책 전체를 뒤져야 합니다. 하지만 장이나 단락별로 청크를 나누면 필요한 내용을 정확히 찾을 수 있습니다.
| 策略 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 📏 固定大小 | 实现简单,块大小均匀 | 可能在句子中间截断 | 结构化程度低的长文本 |
| 📝 按句子 | 保持句子完整性 | 块大小不均匀 | 文章、报告等自然文本 |
| 🧠 语义分块 | 主题连贯,语义完整 | 计算成本高,需要嵌入模型 | 多主题混合的复杂文档 |
| 🔄 递归分块 | 兼顾结构与大小 | 实现较复杂 | 通用场景,推荐默认选择 |
청크 전략 선택
- 고정 크기 청크: 문자 수 또는 토큰 수로 분할, 간단하고 직관적이지만 의미를 단절시킬 수 있음
- 재귀적 청크: 먼저 단락별로 분할하고, 단락이 너무 길면 문장별로 분할하여 의미적 완전성 유지
- 의미적 청크: 임베딩 모델로 의미적 경계를 판단, 유사도가 급변하는 지점에서 분할
- 문서 구조 청크: Markdown 제목, HTML 태그 등 구조 정보를 활용하여 분할
"최고의" 청크 전략은 없으며, 데이터에 가장 적합한 전략만 있습니다. 일반적으로 재귀적 청크부터 시작하여 청크 크기 200-500 토큰, 오버랩 10-20%를 권장합니다.
3. 검색 기술: 가장 관련성 높은 내용을 찾는 방법?
청크 분할이 완료되면 다음 핵심 질문은: 사용자가 질문을 했을 때, 수천 개의 문서 청크 중에서 가장 관련성 높은 것을 어떻게 찾을까?
이는 거대한 도서관에서 책을 찾는 것과 같습니다. 책 제목 키워드로 검색하거나(키워드 검색), 원하는 내용을 설명하여 사서에게 찾아달라고 하거나(의미적 검색), 가장 좋은 방법은 두 가지를 결합하는 것입니다(하이브리드 검색).
| 검색 방식 | 원리 | 장점 | 단점 |
|---|---|---|---|
| 키워드 검색(BM25) | 단어 빈도와 역문서 빈도 기반 | 정확한 매칭, 빠른 속도 | 의미 이해 불가, 동의어 처리 실패 |
| 벡터 검색 | 임베딩 벡터의 코사인 유사도 기반 | 의미 이해, 퍼지 매칭 지원 | 고유 명사에 둔감 |
| 하이브리드 검색 | 키워드와 벡터 검색 결과 융합 | 정확성과 의미 모두 고려 | 가중치 조정 필요, 복잡도 높음 |
재정렬(Reranking)
후보 문서를 검색한 후 일반적으로 "재정렬" 단계가 필요합니다. 초기 검색은 재현율(누락 최소화)을 추구하고, 재정렬은 정밀도(가장 관련성 높은 것을 최상단으로)를 추구합니다. Cohere Rerank, BGE Reranker 등이 널리 사용되며, 크로스 인코더로 query-document 쌍을 정밀하게 점수 매깁니다.
4. 아키텍처 진화: 단순함에서 지능으로
RAG 기술은 불과 2년 만에 3세대 진화를 거쳤으며, 각 세대는 이전 세대의 문제점을 해결합니다.
3세대 RAG 아키텍처 비교
- Naive RAG(2023): 가장 기본적인 "인덱싱→검색→생성" 흐름, 구현은 간단하지만 효과 제한적. 문제점: 검색 품질 불안정, 복잡한 쿼리 처리 불가, 노이즈 컨텍스트 도입 가능성.
- Advanced RAG(2024): Naive RAG에 쿼리 재작성, 하이브리드 검색, 재정렬, 컨텍스트 압축 등 최적화 단계를 추가하여 검색 정밀도와 생성 품질을 크게 향상.
- Modular RAG(2025): RAG를 플러그인 가능한 모듈로 분해, 라우팅 판단, 적응형 검색, 자기 반성 등 고급 기능 지원. 쿼리 유형에 따라 최적의 처리 흐름을 동적으로 선택.
5. RAG vs 파인튜닝: 어떤 것을 선택해야 할까?
대형 모델이 특정 분야 지식을 습득하게 하려면 일반적으로 두 가지 길이 있습니다: RAG와 파인튜닝(Fine-tuning). 이들은 상호 배타적이지 않고 상호 보완적입니다.
비유하자면: 파인튜닝은 학생이 학원에 다니는 것, 지식을 뇌에 내재화하는 것; RAG는 학생에게 참고서를 주는 것, 시험 때 펼쳐볼 수 있는 것. 두 방식 모두 장단점이 있으며, 핵심은 구체적인 요구사항에 달려 있습니다.
| 차원 | RAG | 파인튜닝 |
|---|---|---|
| 지식 업데이트 | 실시간 업데이트, 문서만 수정하면 됨 | 재학습 필요 |
| 비용 | 낮음(GPU 학습 불필요) | 높음(학습 리소스 필요) |
| 설명 가능성 | 높음(출처 추적 가능) | 낮음(지식이 가중치에 내재화) |
| 적용 시나리오 | 지식 베이스 Q&A, 문서 검색 | 스타일 전이, 특정 작업 최적화 |
| 환각 제어 | 양호(참고 근거 있음) | 보통(여전히 환각 가능) |
실전 제안
대부분의 시나리오에서는 먼저 RAG를 시도하세요. RAG의 장점: 학습 불필요, 지식 실시간 업데이트 가능, 답변 출처 추적 가능. 모델의 "행동 패턴"(출력 형식, 언어 스타일, 추론 방식 등)을 변경해야 할 때만 파인튜닝을 고려하세요. 가장 강력한 방안은 종종 RAG + 파인튜닝의 조합입니다.
요약
RAG는 현재 대형 모델을 "실전에 적용"하는 가장 실용적인 기술 중 하나입니다. 핵심 가치는: 모델의 답변이 근거 있고, 지식이 실시간 업데이트 가능하며, 환각을 효과적으로 제어할 수 있다는 점입니다.
이 장의 핵심 포인트를 되돌아보면:
- RAG가 해결하는 핵심 문제: 대형 모델의 지식 노후화, 비공개 데이터 부족, 쉬운 환각 발생
- 3단계 흐름: 인덱싱(오프라인 준비) → 검색(온라인 조회) → 생성(종합 답변)
- 청크 분할이 기초: 청크 품질이 검색 품질을 직접 결정, 적절한 청크 전략 선택이 매우 중요
- 검색이 핵심: 하이브리드 검색 + 재정렬이 현재 가장 효과적인 조합
- 아키텍처는 진화 중: Naive RAG에서 Modular RAG로, 시스템이 점점 더 지능적이고 유연해짐
- RAG와 파인튜닝은 상호 보완적: 대부분 시나리오에서 먼저 RAG 시도, 모델 행동 변경 필요 시 파인튜닝 고려
더 읽어보기
- LangChain RAG 튜토리얼 - 가장 인기 있는 RAG 프레임워크 실전 가이드
- LlamaIndex 문서 - RAG에 특화된 프레임워크, 풍부한 데이터 커넥터 제공
- RAG Survey 논문 - 포괄적인 RAG 기술 리뷰
- Chunking Strategies - Pinecone의 청크 전략 상세 설명
- 벡터 데이터베이스 비교 - 주요 벡터 데이터베이스 기능 비교