RAG 완벽 정리
— LLM 환각을 잡고, 바이브 코딩의 신뢰성을 끌어올리는 법
LLM에게 코드 작성을 맡기다 보면 한 번쯤은 마주치는 장면이 있다. 분명히 자신 있게 답을 주는데, 막상 실행해보면 존재하지 않는 함수를 부르거나, 옛날 버전 API를 사용하거나, 그럴듯하지만 틀린 설정값을 알려주는 경우다. 이걸 환각(Hallucination)이라고 부른다.
이 문제를 구조적으로 해결하기 위해 등장한 기법이 RAG, 즉 검색 증강 생성(Retrieval-Augmented Generation)이다. 이번 글에서는 RAG가 무엇이고, 왜 필요한지, 어떻게 동작하는지, 그리고 Claude Code로 바이브 코딩할 때 어떻게 써먹을 수 있는지를 정리한다.
아래에 RAG의 개념과 구조, 그리고 실전에서 바로 활용할 수 있는 프롬프트 예시까지 정리했다.
01 RAG — Retrieval-Augmented Generation
RAG는 한 문장으로 정리하면 이렇다.
풀어 쓰면 R-A-G 세 글자에 모든 게 담겨 있다.
-
R — Retrieval (검색) 사용자 질문과 관련된 문서·코드·데이터를 외부 저장소에서 찾아온다. 보통 벡터 DB에서 의미 기반 검색을 수행한다.
-
A — Augmented (증강) 검색해온 내용을 사용자 질문과 함께 묶어서 LLM 프롬프트에 주입한다. LLM이 가진 일반 지식 위에 외부 사실을 얹는 단계다.
-
G — Generation (생성) LLM은 주어진 컨텍스트를 근거로 답변을 만든다. 학습 시점의 기억이 아닌, 방금 가져온 신뢰 출처에 기반해서 답한다.
왜 필요한가? LLM은 학습 시점 이후의 정보를 모르고, 사내 문서나 비공개 데이터도 모른다. 그리고 자기가 모르는 것에 대해서도 자신만만하게 답하는 경향이 있다. RAG는 이 세 가지 문제를 동시에 푼다.
02 RAG 파이프라인 — Embedding과 Vector DB
RAG의 검색은 키워드 매칭이 아니라 의미 기반 검색이다. 핵심은 임베딩(Embedding)과 벡터 데이터베이스다.
이걸 두 단계로 나눠서 보자.
인덱싱 단계 (사전 작업)
- 01 문서 수집 — PDF, 마크다운, 웹페이지, 코드 저장소 등 답변의 근거가 될 자료를 모은다.
- 02 청킹(Chunking) — 긴 문서를 작은 조각으로 자른다. 보통 의미 단위로 자르되 너무 작거나 크지 않게 균형을 맞춘다.
- 03 임베딩 생성 — 각 청크를 임베딩 모델에 통과시켜 고차원 벡터(보통 768~3072차원)로 변환한다.
- 04 Vector DB 저장 — Pinecone, Weaviate, Qdrant, pgvector 등에 벡터와 원문을 함께 저장한다.
질의 단계 (실시간 동작)
- 01 질문 임베딩 — 사용자 질문도 같은 임베딩 모델로 벡터화한다.
- 02 유사도 검색 — 코사인 유사도 등으로 질문 벡터와 가장 가까운 문서 청크 Top-K를 찾는다.
- 03 프롬프트 구성 — 검색된 청크 + 원래 질문 + 시스템 지시문을 합쳐 LLM에게 전달한다.
- 04 답변 생성 — LLM이 주어진 컨텍스트를 근거로 답변을 만든다. 출처 인용(Citation)도 가능하다.
03 RAG가 푸는 문제 — 무엇과 비교되는가
RAG의 가치는 다른 접근법과 비교할 때 명확해진다.
| 방식 | 장점 | 한계 |
|---|---|---|
| 일반 LLM | 빠르고 범용적, 별도 인프라 불필요 | 학습 시점 이후 정보 모름, 환각 발생, 사내 데이터 접근 불가 |
| Fine-tuning | 특정 도메인 스타일·지식 내재화 | 비용 큼, 업데이트 시 재학습 필요, 환각은 여전히 발생 |
| RAG | 최신 정보 반영, 출처 명시 가능, 비용 효율적 | 검색 품질이 답변 품질을 좌우, 인프라 구축 필요 |
최신 문서 기반 Q&A, 사내 위키 검색, 코드 라이브러리 문서 조회, 법률·규제 문서 분석처럼 사실 기반 답변이 필요할 때.
특정 톤·스타일·포맷 학습, 도메인 특화 추론 능력 강화처럼 행동 양식 자체를 바꿔야 할 때.
2026년 기준으로 단순한 "PDF를 벡터 DB에 넣고 코사인 유사도 검색하는" 초기형 RAG는 프로토타입 수준으로 평가된다. 실제 운영 환경에서는 하이브리드 검색(키워드 + 벡터), 리랭킹(Reranking), 에이전틱 RAG(Agentic RAG) 등이 함께 쓰인다.
04 바이브 코딩에서의 RAG — Context7과 Claude Code
코딩 어시스턴트에서 RAG가 가장 빛나는 영역은 라이브러리 문서다. LLM은 학습 시점의 라이브러리 버전을 기억한다. 그래서 React 18이 나온 이후에도 React 16 패턴으로 코드를 짜거나, Next.js 15가 나왔는데 13 버전 API를 쓰거나, FastAPI의 deprecated된 메서드를 자신만만하게 추천한다.
이를 해결하기 위해 등장한 대표적인 도구가 Context7이다. Upstash가 만든 오픈소스 MCP 서버로, 공식 라이브러리 문서를 실시간으로 가져와 코딩 에이전트의 컨텍스트에 주입한다.
설치는 명령어 하나로 끝난다.
# Claude Code에 Context7 MCP 추가 claude mcp add context7 -- npx -y @upstash/context7-mcp # 설치 후 Claude Code 재시작 $ claude
이제 Claude Code에서 프롬프트에 use context7이라는 한 줄을 추가하면, 해당 라이브러리의 최신 공식 문서를 자동으로 가져와 답변에 반영한다.
05 실전 — Claude Code 바이브 코딩 프롬프트 예시
아래는 실제로 Claude Code에서 바로 써볼 수 있는 프롬프트다. 모두 끝에 use context7을 붙이는 게 핵심이다.
# 별로인 프롬프트 (LLM 기억에만 의존) FastAPI로 JWT 인증 구현해줘. # RAG 활용 프롬프트 FastAPI로 JWT 인증을 구현해줘. 2026년 최신 권장 방식으로, OAuth2PasswordBearer와 Pydantic v2 기반으로 작성해줘. use context7
# Next.js 13 → 15 마이그레이션 시
Next.js 15의 App Router 기반으로 이 페이지를 다시 작성해줘.
- 기존 코드는 Next.js 13 Pages Router 방식이야
- Server Components와 Server Actions 패턴을 사용해줘
- Metadata API도 최신 방식으로 적용해줘
use context7
# 처음 써보는 라이브러리
Drizzle ORM으로 PostgreSQL 연결하고,
users / posts / comments 테이블 스키마를 정의해줘.
- 관계는 1:N (users-posts), 1:N (posts-comments)
- 마이그레이션 명령어도 함께 알려줘
공식 문서의 최신 패턴을 따라줘. use context7
# 에러 디버깅
이 코드에서 LangChain의 RunnableSequence 사용법이
deprecated 됐다고 경고가 나와.
- 현재 LangChain 최신 버전 기준으로 어떻게 바꿔야 해?
- 변경된 import 경로도 알려줘
use context7
[코드 첨부]
# 라이브러리 조합 시 호환성 확인
Supabase Auth + Next.js 15 + Tailwind v4 조합으로
로그인 페이지를 만들어줘.
- 각 라이브러리의 최신 권장 패턴을 사용해줘
- Server Actions 기반 인증 흐름으로
- Tailwind v4의 새 설정 방식 적용
use context7
특히 빠르게 변하는 라이브러리(Next.js, Supabase, Drizzle, LangChain, FastAPI 등)에서 효과가 크다. 반대로 표준 라이브러리나 거의 변하지 않는 도구는 굳이 Context7을 쓰지 않아도 된다.
CLAUDE.md 파일에 "이 프로젝트에서는 라이브러리 관련 질문 시 항상 Context7을 사용한다"라고 명시해두면, 매번 use context7을 붙이지 않아도 자동으로 호출된다.
06 RAG는 코딩만의 이야기가 아니다
코딩에서 시작했지만 RAG는 훨씬 넓은 영역에서 쓰인다. 본인 업무에 어디에 적용할 수 있는지 감을 잡아두면 좋다.
-
사내 문서 챗봇 규정, SOP, 작업 표준서를 벡터 DB에 넣고 자연어로 질의응답. "출장 규정에서 일비는 얼마야?" 같은 질문에 즉답.
-
고객 지원 자동화 제품 매뉴얼, FAQ, 과거 티켓을 RAG로 묶어 1차 응대 자동화. 인간 상담사는 복잡한 케이스에 집중.
-
제조 도메인 — 불량 사례 검색 과거 불량 보고서, 근본 원인 분석 문서를 임베딩하여 유사 사례 즉시 조회. 신규 불량 발생 시 과거 해결 패턴 참고.
-
법률·의료 도메인 판례, 논문, 가이드라인을 RAG 기반으로 검색. 출처 인용이 가능해 신뢰성이 핵심인 영역에 특히 적합.
이전 글에서 다뤘던 MCP와 RAG의 관계도 짚고 가자. MCP는 "LLM이 외부 도구를 부르는 표준 프로토콜"이고, RAG는 "검색을 통해 LLM 답변을 보강하는 기법"이다. 둘은 경쟁 관계가 아니라 결합되는 관계다. Context7이 좋은 예시다 — RAG로 동작하지만 MCP 인터페이스로 노출된다.
RAG는 LLM이 모르는 것을 모른다고 인정하게 만드는 대신, 신뢰할 수 있는 출처에서 답을 찾아오게 만드는 기법이다. 임베딩과 벡터 DB로 의미 기반 검색을 수행하고, 그 결과를 LLM 컨텍스트에 주입하는 단순한 아이디어가 환각 문제를 구조적으로 해결한다. Claude Code 사용자라면 Context7부터 붙여보는 것이 가장 빠른 첫 걸음이다.
다음 글에서는 직접 RAG 시스템을 구축해보는 과정을 정리할 예정이다. 사내 문서를 임베딩해서 Qdrant나 pgvector에 저장하고, 로컬 Ollama 모델과 연결해 보안 환경에서도 동작하는 RAG 챗봇을 만드는 흐름을 단계별로 다룬다.
'비전공자의 바이브 코딩 > 일상 & 기초' 카테고리의 다른 글
| 클로드코드(Claude Code)로 주식 분석 웹 서비스 만들기 : #5. 카카오톡 연동하기 (1) | 2026.05.05 |
|---|---|
| 클로드코드(Claude Code)로 주식 분석 웹 서비스 만들기 : #4. 주식 분석 기능 만들기 (0) | 2026.05.05 |
| 클로드코드(Claude Code)로 주식 분석 웹 서비스 만들기 : #3. 웹 페이지 만들기 (0) | 2026.05.04 |
| 클로드코드(Claude Code)로 주식 분석 웹 서비스 만들기 : #2. PRD, 개발계획서 작성하기 (0) | 2026.04.25 |
| 클로드코드(Claude Code)로 주식 분석 웹 서비스 만들기 : #1. 계획 세우기 (1) | 2026.04.19 |