[AI Study] 청크, 벡터DB, RAG란? - 개념 쉽게 이해하기
RAG가 뭐길래? 어려워 보이지만 사실은 간단합니다!
🎯 문제 상황
일반 ChatGPT의 한계:
질문: "우리 회사 휴가 정책이 뭐야?"
ChatGPT: "죄송하지만 귀사의 정보를 모릅니다" ❌
왜 그럴까요?
- ChatGPT는 2023년까지의 학습 데이터만 알고 있음
- 우리 회사 문서는 학습하지 못함
- 최신 정보도 모름
RAG로 해결:
질문: "우리 회사 휴가 정책이 뭐야?"
→ 회사 문서 검색
→ ChatGPT가 문서 보고 답변
ChatGPT: "연차 15일, 병가 10일입니다" ✅
📚 RAG를 이해하기 위한 3가지 개념
RAG를 이해하려면 먼저 3가지 개념을 알아야 합니다:
- 청크 (Chunk)
- 벡터 DB (Vector Database)
- RAG (Retrieval-Augmented Generation)
하나씩 차근차근 알아봅시다!
1️⃣ 청크 (Chunk)
정의
"긴 문서를 작은 조각으로 자르는 것"
왜 필요한가?
상황:
- 5000자짜리 긴 문서가 있음
- 이걸 통째로 GPT한테 주면?
문제점:
전체 문서 (5000자) → GPT
→ 토큰 5000개 사용
→ 비용 많이 나옴 💸
→ 응답도 느림 🐢
→ 불필요한 내용까지 다 전달
해결책:
필요한 부분 (1000자)만 → GPT
→ 토큰 1000개 사용
→ 비용 80% 절감 ✅
→ 응답 빠름 ⚡
→ 관련 내용만 전달
비유
책을 페이지로 나누기:
원본 문서 (전체 책)
↓
청크 1 (1페이지)
청크 2 (2페이지)
청크 3 (3페이지)
청크 4 (4페이지)
청크 5 (5페이지)
필요한 페이지만 찾아서 읽으면 되죠!
실제 예시
원본 문서:
Python은 1991년 귀도 반 로섬이 만든 프로그래밍 언어입니다.
문법이 간단하고 읽기 쉬우며 다양한 라이브러리를 지원합니다.
인공지능, 웹 개발, 데이터 분석 등 다양한 분야에서 사용됩니다.
변수는 x = 10처럼 선언하고, 조건문은 if x > 5: print("크다")로 작성합니다.
반복문은 for i in range(10): print(i)로 작성합니다.
청크로 분할 (200자씩):
[청크 1]
Python은 1991년 귀도 반 로섬이 만든 프로그래밍 언어입니다.
문법이 간단하고 읽기 쉬우며 다양한 라이브러리를 지원합니다.
[청크 2]
인공지능, 웹 개발, 데이터 분석 등 다양한 분야에서 사용됩니다.
변수는 x = 10처럼 선언하고,
[청크 3]
조건문은 if x > 5: print("크다")로 작성합니다.
반복문은 for i in range(10): print(i)로 작성합니다.
2️⃣ 벡터 DB (Vector Database)
정의
"의미로 검색하는 데이터베이스"
일반 DB와 뭐가 다른가?
일반 데이터베이스:
SELECT * FROM docs WHERE title = "Python"
→ 제목이 정확히 "Python"인 것만 찾음
→ "파이썬", "파이선", "프로그래밍 언어" 못 찾음 ❌
벡터 데이터베이스:
search("파이썬")
→ "Python" ✅
→ "파이선" ✅
→ "프로그래밍 언어" ✅
→ "코딩" ✅
→ "개발" ✅
의미가 비슷하면 다 찾아줌!
어떻게 작동하나?
1단계: 임베딩 (Embedding)
텍스트를 숫자 벡터로 변환:
"Python은 프로그래밍 언어다"
↓ OpenAI Embeddings API
[0.23, -0.51, 0.82, 0.15, ..., -0.33]
(1536개의 숫자)
"파이썬은 코딩 언어다"
↓
[0.25, -0.48, 0.85, 0.12, ..., -0.31]
(비슷한 숫자들!)
"사과는 맛있는 과일이다"
↓
[0.91, 0.12, -0.45, 0.88, ..., 0.67]
(완전 다른 숫자들!)
2단계: 거리 계산
Python ↔ 파이썬
→ 거리: 0.05 (가까움 = 의미가 비슷함)
Python ↔ 사과
→ 거리: 0.95 (멀음 = 의미가 다름)
시각화
2D로 단순화하면:
좌표 평면에 표시:
Python (2, 8) ●
\
파이썬 (3, 7) ● ← 가까이 있음!
\
프로그래밍 (4, 6) ●
사과 (9, 1) ● ← 멀리 떨어짐!
실제로는 1536차원 공간에서 계산합니다!
검색 과정
1. 질문: "파이썬 함수"
2. 질문을 벡터로 변환
"파이썬 함수" → [0.24, -0.49, ...]
3. 벡터DB에서 가까운 것 찾기
4. 결과:
- "def greet(): ..." (거리: 0.12) ✅
- "Python 함수 정의" (거리: 0.15) ✅
- "함수는 재사용..." (거리: 0.23) ✅
3️⃣ RAG (Retrieval-Augmented Generation)
정의
"검색 증강 생성"
풀어 쓰면:
- Retrieval (검색): 문서 찾기
- Augmented (증강): 문서 추가
- Generation (생성): GPT가 답변
= 문서 검색 + GPT 답변
작동 과정
1️⃣ 질문
사용자: "Python 함수는 어떻게 정의해?"
2️⃣ 검색 (Retrieval)
벡터DB에서 "함수" 관련 청크 찾기
→ 찾음: "def greet(name): return f'Hello, {name}!'"
3️⃣ 증강 (Augmented)
GPT에게 문서와 질문을 함께 전달:
"다음 문서를 참고해서 답변해줘:
문서: def greet(name): return f'Hello, {name}!'
질문: Python 함수는 어떻게 정의해?"
4️⃣ 생성 (Generation)
GPT: "def 키워드를 사용하여 함수를 정의합니다.
예를 들어 def greet(name): return f'Hello, {name}!'
처럼 작성할 수 있습니다."
비유: 도서관 사서
1. 손님 (사용자)
"Python 함수에 대한 책 어디 있어요?"
2. 사서 (RAG 시스템)
[책장에서 관련 책 찾기] ← Retrieval
3. 사서
[책 펼쳐서 해당 페이지 읽기] ← Augmented
4. 사서
"3장 12페이지에 있습니다!" ← Generation
🔄 전체 흐름
사전 작업 (한 번만)
1. 문서 업로드
Python_tutorial.pdf
2. 청크로 분할
→ 청크 1 (1000자)
→ 청크 2 (1000자)
→ 청크 3 (1000자)
3. 임베딩 생성
→ 청크 1 → [0.23, -0.51, ...]
→ 청크 2 → [0.25, -0.48, ...]
→ 청크 3 → [0.26, -0.47, ...]
4. 벡터DB에 저장
→ Chroma DB에 저장 완료!
질문할 때 (매번)
1. 질문 입력
"Python 함수는?"
2. 질문을 벡터로 변환
"Python 함수는?" → [0.24, -0.49, ...]
3. 벡터DB 검색
가까운 청크 3개 찾기:
→ 청크 1 (유사도: 0.95)
→ 청크 2 (유사도: 0.87)
→ 청크 5 (유사도: 0.82)
4. GPT에 전달
"문서: [청크 1, 2, 5]
질문: Python 함수는?"
5. GPT 답변
"def 키워드로 정의합니다..."
💡 실전 예시
시나리오: 회사 업무 매뉴얼
업로드한 문서:
출장 신청 규정
- 출장 3일 전까지 신청서 제출
- 승인은 2일 내 완료
- 경조사 출장은 당일 신청 가능
휴가 규정
- 연차: 15일
- 병가: 10일
- 경조사 휴가: 즉시 가능
재택근무 규정
- 주 2회 허용
- 사전 신청 필수
RAG 없이 (일반 ChatGPT)
질문: "출장 신청은 언제까지 해야 해?"
ChatGPT: "일반적으로 출장 1주일 전에 신청하는 것이 좋습니다." ❌
→ 우리 회사 규정(3일 전)을 모름!
RAG 사용
질문: "출장 신청은 언제까지 해야 해?"
1. 벡터DB 검색
→ "출장 신청 규정" 청크 찾음
2. GPT에 전달
"문서: 출장 3일 전까지 신청서 제출
질문: 출장 신청은 언제까지?"
3. GPT 답변
"출장 3일 전까지 신청서를 제출해야 합니다." ✅
→ 회사 문서 기반 정확한 답변!
🎯 핵심 정리
3가지 개념
| 개념 | 역할 | 비유 |
|---|---|---|
| 청크 | 문서를 작게 자르기 | 책 → 페이지로 나누기 |
| 벡터DB | 의미로 검색하기 | 구글 검색 |
| RAG | 검색 + GPT 답변 | 도서관 사서 |
왜 각각 필요한가?
청크:
- 긴 문서 전체를 GPT에 주면 비용↑, 속도↓
- 필요한 부분만 찾아서 주면 효율적
벡터DB:
- 정확한 단어 매칭 대신 의미로 검색
- "파이썬"으로 검색해도 "Python" 찾아줌
RAG:
- ChatGPT 지식 + 내 문서 정보
- 최신 정보, 회사 정보도 정확하게 답변
🆚 비교표
ChatGPT vs RAG
| 구분 | 일반 ChatGPT | RAG |
|---|---|---|
| 지식 출처 | 학습 데이터 (2023년까지) | 내가 업로드한 문서 |
| 회사 정보 | 모름 ❌ | 알고 있음 ✅ |
| 최신 정보 | 모름 ❌ | 문서 업데이트 시 반영 ✅ |
| 정확도 | 일반적인 답변 | 문서 기반 정확한 답변 |
| 비용 | 저렴 | 약간 더 비쌈 (검색 비용 추가) |
| 속도 | 빠름 | 약간 느림 (검색 시간 추가) |
✅ 이해도 체크
Q1. 청크란 무엇인가요?
긴 문서를 작은 조각으로 자른 것.
예: 5000자 문서 → 1000자씩 5개 청크로 분할
Q2. 벡터DB는 일반 DB와 어떻게 다른가요?
일반 DB: 정확한 단어만 검색
벡터 DB: 의미가 비슷한 것도 검색
예: "파이썬" 검색 시 "Python", "프로그래밍" 모두 찾아줌
Q3. RAG의 3단계는?
- Retrieval (검색): 관련 문서 찾기
- Augmented (증강): 문서를 GPT에 추가
- Generation (생성): GPT가 답변 생성
Q4. 왜 RAG를 사용하나요?
ChatGPT가 모르는 정보(회사 문서, 최신 정보 등)를
내 문서에서 찾아서 정확하게 답변하게 만들기 위해
🚀 다음 단계
이제 개념을 이해했으니, 직접 만들어봅시다!
다음 포스팅: [AI Study] LangChain으로 RAG 시스템 구축하기
실제 코드로 RAG 시스템을 구현해보겠습니다!
반응형
'AI' 카테고리의 다른 글
| [AI Study] Kotlin + Langfuse로 OpenAI API 모니터링하기 (0) | 2026.01.14 |
|---|