RAG 구축 가이드 — 사내 문서를 AI에 연결하는 5단계 실전 방법 (2026)

RAG 구축이 왜 이렇게 핫할까요? ChatGPT나 Claude 같은 LLM은 똑똑하지만, 우리 회사 내부 문서는 모릅니다. RAG를 도입하면 LLM이 우리 데이터를 실시간으로 참조해서 답변합니다. 이 글에서는 RAG 구축 방법을 처음부터 끝까지, 코드 예제와 함께 정리합니다.

RAG 구축 벡터 데이터베이스 개념도

RAG 구축이란 — 개념 정리

RAG(Retrieval-Augmented Generation)는 “검색 + 생성”을 결합한 아키텍처입니다. 사용자가 질문하면, 먼저 벡터 데이터베이스에서 관련 문서를 검색(Retrieval)하고, 그 문서를 LLM에 넘겨서 답변을 생성(Generation)합니다.

기존 LLM만 쓰면 발생하는 문제가 있습니다. 학습 데이터에 없는 내용은 “환각(Hallucination)”을 일으킵니다. 이 아키텍처를 적용하면 실제 문서를 근거로 답변하기 때문에 환각이 줄고, 출처도 명확해집니다.

RAG 구축 5단계 프로세스

RAG 구축은 크게 5단계로 나뉩니다. 각 단계를 순서대로 살펴보겠습니다.

1단계: 문서 수집. PDF, 노션, 컨플루언스, 위키 등에서 원본 문서를 모읍니다. 사내 매뉴얼, FAQ, 기술 문서가 대표적입니다.

2단계: 청킹(Chunking). 긴 문서를 500~1000 토큰 단위로 분할합니다. 청크가 너무 크면 검색 정확도가 떨어지고, 너무 작으면 맥락을 잃습니다.

3단계: 임베딩(Embedding). 각 청크를 벡터로 변환합니다.

OpenAI의 text-embedding-3-small이나 Sentence-Transformers 같은 모델을 사용합니다.

4단계: 벡터 DB 저장. 변환된 벡터를 Chroma, Pinecone, Weaviate 같은 벡터 데이터베이스에 저장합니다.

5단계: 검색 + 생성. 사용자 질문을 임베딩 → 벡터 DB에서 유사 문서 검색 → LLM에 컨텍스트로 전달 → 답변 생성.

RAG 구축 실전 — Python 코드 예제

LangChain과 ChromaDB를 사용한 기본 RAG 구축 코드입니다. 로컬 환경에서 바로 실행할 수 있습니다.

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.chains import RetrievalQA

# 1. 문서 로드
loader = PyPDFLoader("company_manual.pdf")
docs = loader.load()

# 2. 청킹
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
chunks = splitter.split_documents(docs)

# 3-4. 임베딩 + 벡터 DB 저장
vectorstore = Chroma.from_documents(chunks, OpenAIEmbeddings())

# 5. RAG 체인 구성
qa = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-4o"),
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
)

# 질의
answer = qa.invoke("신입 사원 온보딩 절차를 알려줘")
print(answer)

이 코드만으로 기본적인 검색 증강 생성 파이프라인이 완료됩니다. 실무에서는 청크 크기, 임베딩 모델, 검색 개수(k값)를 조정하면서 최적화합니다.

RAG 구축 시 흔한 실수 3가지

실수 1: 청크 크기를 무시한다. 기본값(1000)을 그대로 쓰는 경우가 많습니다. 문서 특성에 따라 500~1500 사이에서 A/B 테스트하세요.

실수 2: 임베딩 모델을 대충 고른다. 한국어 문서가 많다면 다국어 임베딩(multilingual-e5-large 등)을 선택해야 합니다.

영어 전용 모델은 한국어 검색 정확도가 크게 떨어집니다.

실수 3: 프롬프트에 역할을 안 준다.

LLM에 “제공된 문서만 참고해서 답변하세요”라는 시스템 프롬프트를 반드시 넣어야 환각을 줄일 수 있습니다.

로컬 RAG 구축 — Ollama + ChromaDB

API 비용이 부담되거나 보안이 중요한 환경이 있습니다.

그런 경우 로컬 LLM으로 RAG 구축이 가능합니다. Ollama로 Llama 3를 로컬에서 돌리고, ChromaDB와 연결하면 완전한 온프레미스 RAG가 됩니다.

Ollama 설치와 활용법은 이전 글에서 자세히 다뤘으니, 이 글에서는 RAG 구축 파이프라인에 집중합니다.

RAG 구축 비용 — 얼마나 들까?

비용은 크게 세 가지입니다.

임베딩 API, 벡터 DB, LLM 호출 비용을 각각 살펴보겠습니다.

임베딩: OpenAI text-embedding-3-small 기준, 100만 토큰당 /usr/bin/bash.02. 사내 문서 1000페이지를 임베딩해도 미만입니다.

벡터 DB: ChromaDB(오픈소스)는 무료, Pinecone은 무료 티어에서 10만 벡터까지 가능합니다.

LLM: GPT-4o 기준 100만 토큰당 .50 (입력). 하루 100건 질의 기준 월 0~30 수준입니다. 로컬 LLM을 쓰면 전기세만 나갑니다.

결론: 소규모 RAG 시스템은 월 0 미만으로 가능합니다.

RAG vs 파인튜닝 — 뭘 선택할까?

RAG와 파인튜닝은 자주 비교됩니다. 핵심 차이를 정리하면:

RAG: 외부 지식을 실시간으로 주입. 데이터 업데이트가 쉽고 비용이 적습니다. 단, 검색 품질에 의존합니다.

파인튜닝: 모델 자체를 재학습합니다. 특정 도메인의 “톤”과 “스타일” 학습에 적합합니다.

다만 학습 비용이 높고, 데이터 업데이트가 어렵다는 단점이 있습니다.

실무에서는 RAG를 먼저 시도하고, 그래도 부족하면 파인튜닝을 검토하는 순서가 일반적입니다.

최근에는 RAG + 파인튜닝을 결합하는 하이브리드 방식도 주목받고 있습니다.

자주 묻는 질문

RAG 구축에 필요한 기술 스택은?

Python, LangChain(또는 LlamaIndex), 벡터 DB(Chroma/Pinecone), 임베딩 모델, LLM(GPT-4o/Claude/Llama) 조합이 가장 일반적입니다.

RAG 구축 비용은 얼마나 드나요?

소규모 기준 월 0 미만으로 가능합니다. ChromaDB(무료) + OpenAI 임베딩(/usr/bin/bash.02/100만 토큰) + GPT-4o 조합이 가성비가 좋습니다.

RAG와 파인튜닝 중 어떤 걸 먼저 해야 하나요?

RAG를 먼저 시도하세요. 구축이 빠르고, 데이터 업데이트가 쉬우며, 비용도 적습니다. 파인튜닝은 RAG로 해결이 안 되는 경우에 검토합니다.

댓글 남기기