들어가며
RAG(Retrieval-Augmented Generation)는 LLM의 가장 큰 한계 — 학습 시점 이후의 정보를 모르고, 특정 도메인 지식이 부족하며, 환각(hallucination)을 일으키는 문제 — 를 해결하는 핵심 기술이다. RAG 관련 직무 공고가 +2,047% 폭발적으로 증가한 것에서 알 수 있듯, 이 기술은 AI 개발의 기본기가 되고 있다.
이 글에서는 RAG의 이론부터 실습 환경 구축까지 AI 개발 기초를 다룬다.
1. RAG란 무엇인가
RAG(Retrieval-Augmented Generation)는 LLM이 응답을 생성하기 전에, 외부 지식 베이스에서 관련 정보를 검색하여 컨텍스트에 추가하는 기술이다. LLM이 "기억"에만 의존하는 대신, 필요할 때 "참고 자료를 찾아보는" 것과 같다.
RAG의 기본 흐름
- 사용자 질문 수신
- 검색(Retrieval): 질문과 관련된 문서/정보를 벡터 DB에서 검색
- 증강(Augmentation): 검색된 정보를 LLM의 프롬프트에 추가
- 생성(Generation): LLM이 증강된 컨텍스트를 기반으로 답변 생성
RAG가 해결하는 문제
- 지식 최신성: 학습 데이터 이후의 최신 정보를 반영
- 도메인 특화: 기업 내부 문서, 제품 매뉴얼 등 특정 도메인 지식 활용
- 환각 감소: 근거 자료 기반 답변으로 정확도 향상
- 비용 효율: 파인튜닝 없이도 모델에 새 지식을 주입
2. Naive RAG vs Advanced RAG
Naive RAG (기본형)
가장 단순한 RAG 구현:
- 문서를 청크(chunk)로 분할
- 각 청크를 임베딩 벡터로 변환
- 벡터 DB에 저장
- 질문이 들어오면 유사도 검색으로 관련 청크 추출
- 추출된 청크를 LLM에 전달하여 답변 생성
장점: 구현이 간단하고 빠르게 시작 가능 단점: 검색 정확도가 낮을 수 있고, 청크 분할 방식에 따라 맥락이 잘릴 수 있음
Advanced RAG
Naive RAG의 한계를 극복하기 위한 개선 기법들:
- 하이브리드 검색: 벡터 검색 + 키워드 검색 결합
- 재순위화(Reranking): 검색 결과를 재정렬하여 가장 관련성 높은 것을 선별
- 쿼리 변환: 사용자 질문을 검색에 최적화된 형태로 변환
- 부모-자식 청킹: 작은 청크로 검색하되, 답변 시 더 큰 맥락을 포함
- 메타데이터 필터링: 날짜, 카테고리 등 메타데이터를 활용한 사전 필터링
3. 벡터 데이터베이스
RAG의 핵심 인프라인 벡터 데이터베이스는 텍스트를 고차원 벡터로 변환하여 저장하고, 유사도 기반 검색을 수행한다.
주요 벡터 DB
- Milvus: 오픈소스, 대규모 처리에 강점
- Faiss: Facebook이 개발, Python 라이브러리 형태
- Pinecone: 관리형 서비스, 빠른 시작
- ChromaDB: 경량, 로컬 개발에 적합
- pgvector: PostgreSQL 확장, Supabase와 통합 가능
선택 기준
- 프로토타입/학습: ChromaDB (설치 간단, 로컬 실행)
- 프로덕션 (관리형): Pinecone (운영 부담 최소)
- 프로덕션 (자체 호스팅): Milvus (대규모 처리, 커스터마이징)
- 기존 PostgreSQL 활용: pgvector (추가 인프라 불필요)
4. Python 개발 환경 설정
AI 개발의 기본 환경을 구축하는 방법.
필수 도구
# Python 설치 (3.10+)
python --version
# 가상 환경 생성
python -m venv ai-env
source ai-env/bin/activate
# 핵심 패키지 설치
pip install langchain openai anthropic chromadb
pip install jupyter notebook
핵심 라이브러리
- LangChain: RAG 파이프라인 구축을 위한 프레임워크
- OpenAI/Anthropic SDK: LLM API 호출
- ChromaDB: 벡터 저장 및 검색
- BeautifulSoup/Requests: 웹 스크래핑 (데이터 수집)
- tiktoken: 토큰 카운팅 및 비용 관리
5. Jupyter Notebook과 Google Colab
Jupyter Notebook
인터랙티브한 코드 실행 환경으로, AI 개발에서 실험과 프로토타이핑에 필수적이다. 코드, 텍스트, 시각화를 하나의 문서에 통합할 수 있어 아이디어를 빠르게 검증하기에 최적이다.
Google Colab
무료 GPU를 제공하는 클라우드 기반 Jupyter 환경이다. 로컬에 고성능 GPU가 없어도 AI 모델을 학습하고 실험할 수 있다. 특히 초기 학습과 프로토타이핑 단계에서 유용하다.
6. RAG 챗봇 설계
기본 아키텍처
사용자 질문
↓
[쿼리 처리] → 벡터 DB 검색
↓
[컨텍스트 구성] → 검색 결과 + 시스템 프롬프트 + 대화 히스토리
↓
[LLM 호출] → 답변 생성
↓
사용자에게 응답
설계 시 고려사항
- 청크 크기: 너무 작으면 맥락 부족, 너무 크면 노이즈 증가. 500-1000 토큰이 일반적
- 검색 개수: Top-K를 3-5개로 시작하여 조정
- 시스템 프롬프트: 검색 결과를 어떻게 활용할지 LLM에 명확히 지시
- 폴백 전략: 관련 문서가 없을 때의 처리 방법 정의
- 평가 파이프라인: 답변의 정확도, 관련성, 충실도를 측정하는 자동화된 평가 체계
마무리
RAG는 LLM 활용의 기본기이자, AI 서비스 개발의 핵심 빌딩 블록이다. Naive RAG로 시작해 기본 원리를 이해한 후, 프로덕션 요구사항에 따라 Advanced RAG 기법을 점진적으로 적용하는 것이 현실적인 학습 경로다.
Python + LangChain + ChromaDB + Jupyter로 환경을 구축하고, 실제 데이터로 RAG 챗봇을 만들어보는 것이 가장 효과적인 학습법이다. 이론만으로는 부족하고, 실습을 통해 청크 크기, 검색 전략, 프롬프트 설계의 감을 잡아야 한다.