요약: RAG 검색 품질을 좌우하는 임베딩 모델 선택 기준과 Vector DB 저장·검색 구조를 정리합니다.
대상 독자: Chroma, FAISS, Milvus, pgvector 같은 Vector DB를 RAG에 연결하려는 개발자
핵심 키워드: 임베딩 모델, Vector DB, LangChain, Chroma, FAISS, pgvector
로컬 LLM/RAG 구축 시리즈 바로가기

LangChain 기반 RAG 시스템 구축
2편. 임베딩 & 벡터DB 구축 편
1편에서는 데이터를 어떻게 수집·정제하고 구조화하는지 다뤘다.
이제 준비된 Chunk들이 있다면, 다음 단계는 다음 두 가지다:
✔ 임베딩(Embedding) 생성
✔ 벡터DB(Vector Database) 적재 및 검색 구조 설계
이 두 요소가 RAG 성능을 결정짓는 핵심이다.
이번 편에서는 실제 사내 환경 기준으로 가장 많이 사용하는 선택지와
경험 기반 최적화 포인트까지 정리해본다.
1. 전체 구성 흐름
[문서 Chunk 데이터]
↓
[임베딩 모델 적용]
↓
[벡터 생성]
↓
[벡터DB 저장]
↓
[검색(Search) → LLM 답변]
이 흐름에서 역할이 가장 중요한 단계가 임베딩 모델 선택이다.
모델 선택이 잘못되면 검색 품질이 망가지고, LLM이 엉뚱한 문서를 찾는다.
2. 임베딩 모델 선택 전략
임베딩 모델은 크게 3가지 계열이 실무에서 많이 쓰인다.
① 오픈소스 임베딩 모델 (추천)
- BAAI/bge-m3
- bge-large-ko
- jina-embeddings-v3
- mxbai-embed-large
- KoSimCSE
장점
- 로컬 설치 가능 → 사내망 환경에서 필수
- 비용 없음
- RAG 최적화 모델이 많음
단점
- GPU 요구
- 품질이 모델마다 편차 있음
② 클라우드 임베딩 (OpenAI, Azure)
- text-embedding-3-large
- text-embedding-3-small
장점
- 품질 매우 좋음
- 구축이 쉬움
단점
- 사내망에서는 사용 불가
- 비용 증가
- 민감 문서 반출 문제 있음
③ 멀티모달 임베딩 모델
PDF에 이미지·표가 많은 회사 문서라면 아래 모델을 고민:
- jina-clip-v3
- SigLip
3. 실무 기준 모델 추천
시나리오 추천 모델
| 사내 폐쇄망, GPU 있음 | BAAI/bge-m3 |
| 한국어 문서 중심 | bge-large-ko, KoSimCSE |
| 이미지+텍스트 혼합 | jina-clip-v3 |
| 성능 최우선 | text-embedding-3-large |
4. LangChain에서 임베딩 생성하기
아래는 가장 많이 쓰는 bge 계열 임베딩 모델 기반 예제.
from langchain_community.embeddings import HuggingFaceEmbeddings
model_name = "BAAI/bge-m3"
emb = HuggingFaceEmbeddings(
model_name=model_name,
model_kwargs={"device": "cuda"}
)
vectors = emb.embed_documents([ch["text"] for ch in records])
5. 벡터DB 선택 기준
RAG의 검색 품질, 속도, 업데이트 편의까지 전부 여기에 달려 있다.
🔥 실무에서 가장 많이 쓰는 4대 벡터DB
벡터DB 장점 단점
| FAISS | 빠름, 무료, 단일 파일 저장 | 분산 X, 운영 기능 없음 |
| Chroma | 로컬 개발 최강, 간편 | 대규모 운영에는 부족 |
| Weaviate | 벡터DB 중 기능 최강 | 운영 부담, Kubernetes 필요 |
| PGVector | 기존 PostgreSQL 환경과 통합 | 대규모에선 느릴 때 있음 |
6. 실무 추천 아키텍처
사내 구축 기준으로 가장 안정적인 조합:
bge-m3 (임베딩)
+
FAISS 또는 Chroma (벡터DB)
규모가 커지면:
bge-m3
+
Weaviate 클러스터 (1~3노드)
7. LangChain + Chroma 구현 예시
가장 쉬운 벡터DB 예제:
from langchain_community.vectorstores import Chroma
vector_store = Chroma.from_texts(
texts=[rec["text"] for rec in records],
embedding=emb,
metadatas=[rec["metadata"] for rec in records],
persist_directory="./db"
)
vector_store.persist()
검색 테스트:
results = vector_store.similarity_search("계약 해지 절차 알려줘", k=3)
for r in results:
print(r.page_content[:200], r.metadata)
8. FAISS 기반 구축 예시
from langchain_community.vectorstores import FAISS
db = FAISS.from_texts(
texts=[rec["text"] for rec in records],
embedding=emb
)
db.save_local("./faiss-db")
검색:
db.similarity_search("인사평가 기준 알려줘", k=5)
9. 검색 품질 향상 기법
✔ 1) Hybrid Search
BM25 + 벡터 검색을 혼합
✔ 2) Reranking
bge-reranker-large 등으로 1차 검색 결과 재정렬
✔ 3) Metadata Filtering
문서 유형/부서/날짜로 필터링
LangChain 예시:
vector_store.similarity_search(
"보안 정책 요약",
k=5,
filter={"dept": "보안팀"}
)
10. 실전 팁 3개
💡 팁 1 — 임베딩은 “업데이트”보다 “재생성”이 더 효율적일 때가 많다
문서가 쌓이면 부분 업데이트가 꼬이기 쉽다.
주기적 Full Rebuild가 운영을 더 안전하게 만든다.
💡 팁 2 — 메타데이터 검색은 RAG 성능의 절반 이상을 잡아준다
“doc_type=정책” 같은 필터만 있어도
검색 품질이 비약적으로 올라간다.
💡 팁 3 — 임베딩 모델은 6개월~1년 단위로 교체하라
오픈소스 임베딩 모델의 발전 속도가 매우 빠르다.
정기적인 벤치마크가 필수다.
11. 다음 편 예고
📌 3편. RAG 성능 최적화 + 평가 지표 편
- Hybrid Search로 검색 품질 끌어올리기
- Reranker 활용법
- 평가 지표: Recall@K, MRR, nDCG
- 기업 문서 기반 실전 성능 점검 방법
🔖 추천 태그
#RAG #LangChain #임베딩 #벡터DB #FAISS #Chroma
#Weaviate #bge #검색엔진 #AI검색 #기업AI #데이터아키텍처
'AI·LLM 엔지니어링' 카테고리의 다른 글
| 2025.11.27 |
| 2025.11.27 |
| 2025.11.27 |
| 2025.11.27 |
| 2025.11.27 |
실무 적용 체크리스트
점검 항목운영 기준
| 모델 선택 | 한국어·영어 문서 비중과 도메인 용어를 기준으로 임베딩 모델 평가 |
| 저장 구조 | 문서 ID, chunk ID, 페이지, 권한 정보를 metadata로 보존 |
| 검색 전략 | Top-K, similarity score, metadata filtering 기준을 설정 |
| 운영 관리 | 인덱스 재생성, 증분 업데이트, 삭제 동기화 절차 마련 |
자주 묻는 질문
임베딩 모델은 무엇을 기준으로 고르나요?
문서 언어, 도메인 용어, 검색 재현율, 속도, 운영 비용을 함께 비교해야 합니다.
Vector DB는 Chroma와 FAISS 중 무엇이 좋나요?
로컬 실험은 Chroma나 FAISS가 간단하고, 운영 환경에서는 권한·확장·백업 요구사항에 맞춰 Milvus나 pgvector도 검토할 수 있습니다.
벡터 인덱스는 얼마나 자주 갱신해야 하나요?
문서 변경 빈도에 따라 다르며, 업무 문서가 자주 바뀐다면 증분 업데이트와 전체 재색인 주기를 분리하는 것이 좋습니다.
함께 읽으면 좋은 글
- 로컬 LLM 구축 1편: vLLM·GGUF·FastAPI
- 로컬 LLM 구축 2편: GPU 서버 사양
- 로컬 LLM 구축 3편: RAG 성능 최적화
- 로컬 LLM API 서버 구축 심화
- LangChain RAG 구축 1편: 문서 파이프라인
'AI·LLM 엔지니어링' 카테고리의 다른 글
| 〈LangChain 기반 RAG 시스템 구축〉 4편: 프롬프트 설계 + LLM 체인 구성 (0) | 2025.11.27 |
|---|---|
| 〈LangChain 기반 RAG 시스템 구축〉 3편 : RAG 성능 최적화 + 평가 지표 (0) | 2025.11.27 |
| LangChain RAG 구축 1편: 문서 수집·파싱·전처리 파이프라인 (0) | 2025.11.27 |
| 로컬 LLM 서버 구축 가이드: vLLM, GGUF, FastAPI로 사내 AI API 만들기 (0) | 2025.11.27 |
| 로컬 LLM 구축 3편: RAG 성능 최적화와 평가 지표 설계 (0) | 2025.11.27 |