| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 공부
- Pinpoint
- 코틀린 코루틴의 정석
- Java
- 오블완
- CKA 기출문제
- kotlin
- CloudWatch
- Rag
- golang
- 기록으로 실력을 쌓자
- MySQL
- Spring
- CKA
- 정보처리기사 실기 기출문제
- minikube
- Linux
- APM
- Kubernetes
- aws
- AWS EKS
- kotlin coroutine
- SRE
- LLM
- AI
- PETERICA
- tucker의 go 언어 프로그래밍
- 바이브코딩
- 티스토리챌린지
- go
- Today
- Total
피터의 개발이야기
[AI] RAG 파이프라인 전체 구조 본문

[AI] LLM 학습 노트 공개 - Transformer부터 RAG까지, 그리고 운영 가능한 AI 시스템을 향해
ㅁ 들어가며
RAG(Retrieval-Augmented Generation)를 처음 접했을 때는 구조가 단순해 보인다.
질문을 받고 → 문서를 찾고 → LLM에게 넘긴다.
그래서 자연스럽게 이렇게 생각하게 된다.
“LLM만 잘 고르고, 임베딩만 잘 쓰면 되는 거 아닐까?”
하지만 실제로 RAG를 붙여서 몇 번만 질의응답을 반복해보면
금방 다른 감각을 얻게 된다.
- 답변이 애매하다
- 근거 문서가 엉뚱하다
- 모델을 바꿔도 품질이 크게 나아지지 않는다
이때 문제는 대부분 LLM이 아니다.
RAG는 모델 기술이 아니라 아키텍처 문제에 가깝다.
이번 글에서는 RAG를 기능이 아닌 시스템 파이프라인으로 바라보며,
왜 구조 이해가 중요한지 정리해보려 한다.
ㅁ RAG를 한 줄로 요약하면
Retriever → Ranker → Reader
- Retriever: 관련 문서를 빠르게 찾는다
- Ranker: 그중에서 정말 중요한 문서를 고른다
- Reader: 선택된 문서를 읽고 답변을 생성한다
중요한 점은 LLM(Reader)은 마지막 단계라는 것이다.
앞단이 흔들리면, 아무리 좋은 모델을 써도 결과는 흔들린다.
ㅁ Retriever - RAG 품질이 시작되는 지점
RAG 품질을 좌우하는 가장 중요한 컴포넌트는 Retriever다.
그리고 Retriever는 하나의 모듈이 아니다.
여러 설계 결정이 겹쳐진 결과물이다.
Retriever를 구성하는 요소를 풀어보면 다음과 같다.
- 문서를 어떻게 나눌 것인가 (Chunking)
- 의미를 어떻게 벡터로 표현할 것인가 (Embedding)
- 무엇을 “가깝다”고 판단할 것인가 (Similarity)
- 얼마나 정밀하게 탐색할 것인가 (ANN / HNSW)
- 이 모든 것을 어떻게 저장하고 운영할 것인가 (VectorDB)
즉, Retriever는
Week 2에서 다뤘던 모든 요소가 수렴하는 지점이다.
그래서 RAG에서 검색 품질이 낮을 때
모델보다 먼저 Retriever를 의심해야 한다.
ㅁ Dense, Sparse, 그리고 Hybrid Search
Retriever를 구현하는 방식은 크게 세 가지로 나뉜다.
- Dense Retrieval: 벡터 유사도 기반 검색
- Sparse Retrieval: BM25 같은 키워드 기반 검색
- Hybrid Search: 두 방식을 결합
Dense 검색은 의미를 잘 잡지만,
고유명사나 숫자, 정확한 키워드에는 약하다.
반대로 Sparse 검색은 키워드에는 강하지만
의미적 유사성은 놓치기 쉽다.
그래서 실무에서는 대부분
Hybrid Search가 기본 전제가 된다.
이 단계의 목표는 단 하나다.
“정답을 포함할 가능성이 있는 후보군을 최대한 놓치지 않는 것”
ㅁ Ranker - 빠른 검색과 정확한 판단의 분리
Retriever는 속도가 우선이다.
그래서 결과는 “대략 맞는 후보군” 수준이다.
여기서 필요한 것이 Ranker(Reranker)다.
Ranker는 질의와 문서를 함께 비교해
정확한 순서를 다시 매긴다.
- Retriever: 빠른 후보 생성 (Recall 중심)
- Ranker: 정밀한 재정렬 (Precision 중심)
이 구조 덕분에
RAG는 속도와 정확도를 동시에 확보할 수 있다.
실무에서 RAG 품질이 한 단계 올라가는 순간은
대부분 Reranking을 붙였을 때다.
ㅁ Reader - LLM은 생각보다 단순하다
많은 경우 LLM이 너무 많은 책임을 떠안고 있다.
하지만 Reader의 역할은 명확하다.
주어진 컨텍스트를 바탕으로 답변을 생성하는 것
컨텍스트가 정확하면 모델은 비교적 안정적으로 답한다.
반대로 컨텍스트가 틀리면 환각은 구조적으로 발생한다.
그래서 Hallucination 문제는 프롬프트보다 검색과 컨텍스트 구성 문제인 경우가 많다.
ㅁ RAG는 검색 기능이 아니라 지식 파이프라인이다
RAG를 제대로 운영하려면
검색 기능이 아니라 지식 수명주기로 봐야 한다.
- 원본 문서는 SSOT(Source of Truth)
- 벡터는 언제든 재생성 가능한 파생 데이터
- 지식 변경 → 재임베딩 → 재인덱싱 가능해야 함
이 관점이 없으면 운영 중인 RAG는 빠르게 망가진다.
ㅁ 마무리 - RAG 아키텍처를 이해한다는 것
RAG를 이해한다는 것은 모델을 하나 더 붙이는 방법을 아는 게 아니다.
- 어디서 의미가 결정되는지
- 어디서 품질이 갈리는지
- 어디가 튜닝 포인트인지
이 흐름을 구조로 이해하는 것이다.
그래서 RAG 아키텍처의 핵심은 단순하다.
좋은 답변은 LLM이 아니라,
좋은 검색 파이프라인에서 시작된다.
'AI > AI이론 | 공부' 카테고리의 다른 글
| [AI W3] RAG 기초 - Ranker의 필요성 (0) | 2026.02.09 |
|---|---|
| [AI W3] RAG 기초 - Retriever(벡터, 키워드, Hybrid) (0) | 2026.02.09 |
| [AI] RAG용 VectorDB 튜닝 (0) | 2026.02.08 |
| [AI] Embedding부터 VectorDB까지, Week2 학습 내용 정리 (0) | 2026.02.08 |
| [AI] Weaviate Usage - VectorDB를 “검색 엔진”이 아니라 “의미 저장소”로 쓰는 법 (0) | 2026.02.08 |