RAG 비교를 위한 벡터 스토어
RAG 스택에 적합한 벡터 DB 를 선택하세요
올바른 벡터 저장소 를 선택하는 것은 RAG 애플리케이션의 성능, 비용 및 확장성을 결정짓는 핵심 요소입니다. 이 포괄적인 비교 자료는 2024-2025 년에 가장 인기 있는 옵션들을 다룹니다.

아키텍처부터 프로덕션 배포까지 RAG 시스템을 구축하는 완전한 가이드는 검색 증강 생성 (RAG) 튜토리얼 을 참조하세요.
벡터 저장소란 무엇이며 RAG 가 왜 필요한가요?
벡터 저장소는 고차원 임베딩 벡터를 저장하고 쿼리하기 위해 설계된 전용 데이터베이스입니다. 검색 증강 생성 (RAG) 시스템에서 벡터 저장소는 지식의 백본 역할을 하며, 문맥적으로 관련성 있는 문서 검색을 가능하게 하는 의미 유사성 검색 기능을 제공합니다.
RAG 파이프라인을 구축할 때, 문서들은 OpenAI 의 text-embedding-3-small 또는 BGE, E5와 같은 오픈소스 대안과 같은 모델에 의해 임베딩 (밀집 수치 벡터) 으로 변환됩니다. 최첨단 다국어 성능을 위해서는 Qwen3 임베딩 및 리랭커 모델 이 로컬 배포를 위한 Ollama 와의 우수한 통합을 제공합니다. 다국어 및 멀티모달 애플리케이션의 경우, 크로스 모달 임베딩 을 사용하면 텍스트, 이미지, 오디오 등 서로 다른 데이터 유형을 통합된 표현 공간으로 연결할 수 있습니다. 이러한 임베딩은 의미론적 의미를 포착하여 정확한 키워드 매칭이 아닌 의미에 따라 문서를 찾을 수 있게 합니다.
벡터 저장소는 다음을 처리합니다:
- 저장: 수백만에서 수십억 개의 벡터 저장
- 색인: 빠른 근사 최근 이웃 (ANN) 검색을 위한 색인 생성
- 필터링: 검색 범위를 좁히기 위한 메타데이터 기반 필터링
- CRUD 작업: 지식 기반을 유지 관리하기 위한 작업
관련 문서를 검색한 후, 임베딩 모델을 활용한 리랭킹 을 통해 더 정교한 유사성 측정 방식을 사용하여 후보 점수를 재평가함으로써 검색 품질을 더욱 향상시킬 수 있습니다.
빠른 비교 표
| 벡터 저장소 | 유형 | 최적 사용처 | 호스팅 | 라이선스 |
|---|---|---|---|---|
| Pinecone | 관리형 | 프로덕션, 제로 오퍼레이션 | 클라우드 전용 | 비공개 (Proprietary) |
| Chroma | 임베디드/서버 | 프로토타이핑, 단순성 | 직접 호스팅 | Apache 2.0 |
| Weaviate | 서버 | 하이브리드 검색, GraphQL | 직접 호스팅/클라우드 | BSD-3 |
| Milvus | 서버 | 규모 확장, 엔터프라이즈 | 직접 호스팅/클라우드 | Apache 2.0 |
| Qdrant | 서버 | 강력한 필터링, Rust 성능 | 직접 호스팅/클라우드 | Apache 2.0 |
| FAISS | 라이브러리 | 임베디드, 연구 | 인메모리 | MIT |
| pgvector | 확장 기능 | Postgres 통합 | 직접 호스팅 | PostgreSQL |
벡터 저장소 상세 분석
Pinecone — 관리형 시장의 리더
Pinecone은 머신러닝 애플리케이션을 위해 특별히 구축된 완전히 관리되는 벡터 데이터베이스입니다.
from pinecone import Pinecone
pc = Pinecone(api_key="YOUR_API_KEY")
index = pc.Index("my-rag-index")
# 벡터 업서트
index.upsert(vectors=[
{"id": "doc1", "values": embedding, "metadata": {"source": "wiki"}}
])
# 메타데이터 필터링을 통한 쿼리
results = index.query(
vector=query_embedding,
top_k=5,
filter={"source": {"$eq": "wiki"}}
)
장점:
- 인프라 관리 불필요 (제로 관리)
- 훌륭한 문서 및 SDK 지원
- 쿼리 당 과금 모델의 서버리스 티어
- 빠른 쿼리 지연 시간 (~50ms P99)
단점:
- 클라우드 전용 (직접 호스팅 불가)
- 사용량에 따라 비용 증가
- 벤더 락인 우려
최적 사용처: 프로덕션 출시 속도와 운영의 단순성을 최우선으로 하는 팀.
Chroma — 개발자의最爱
Chroma는 “AI 네이티브 오픈소스 임베딩 데이터베이스"로 포지셔닝됩니다. 단순함과 LangChain, LlamaIndex 와의 원활한 통합으로 사랑받고 있습니다.
import chromadb
client = chromadb.Client()
collection = client.create_collection("my-docs")
# 자동 임베딩과 함께 문서 추가
collection.add(
documents=["Doc content here", "Another doc"],
metadatas=[{"source": "pdf"}, {"source": "web"}],
ids=["doc1", "doc2"]
)
# 쿼리
results = collection.query(
query_texts=["semantic search query"],
n_results=5
)
장점:
- 매우 간단한 API
- 내장된 임베딩 지원
- 임베디드 (인메모리) 또는 클라이언트 - 서버 방식으로 작동
- 일류 LangChain/LlamaIndex 통합
단점:
- 매우 큰 데이터셋의 확장성 제한
- 엔터프라이즈 기능 부족
- 임베디드 모드에서 영속성 관리가 까다로움
최적 사용처: 프로토타이핑, 중소 규모 프로젝트 및 파이썬 중심 팀.
Weaviate — 하이브리드 검색의 챔피언
Weaviate는 벡터 검색과 키워드 (BM25) 검색을 결합하고 GraphQL API 를 제공합니다. 하이브리드 검색이 검색 품질을 개선하는 시나리오에 탁월합니다.
import weaviate
client = weaviate.Client("http://localhost:8080")
# 벡터라이저와 함께 스키마 생성
client.schema.create_class({
"class": "Document",
"vectorizer": "text2vec-openai",
"properties": [{"name": "content", "dataType": ["text"]}]
})
# 하이브리드 검색 (벡터 + 키워드)
result = client.query.get("Document", ["content"]) \
.with_hybrid(query="RAG architecture", alpha=0.5) \
.with_limit(5) \
.do()
장점:
- 네이티브 하이브리드 검색 (알파 파라미터로 벡터/키워드 균형 조절)
- 내장 벡터화 모듈
- GraphQL 쿼리 언어
- 멀티 테넌시 지원
단점:
- 운영 복잡도 높음
- 학습 곡선 가파름
- 리소스 집약적
최적 사용처: 하이브리드 검색과 GraphQL API 가 필요한 프로덕션 애플리케이션.
Milvus — 엔터프라이즈 규모
Milvus는 수십억 단위 벡터 유사성 검색을 위해 설계되었습니다. 대규모 규모가 필요한 엔터프라이즈 배포의首選입니다.
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
connections.connect("default", host="localhost", port="19530")
# 스키마 정의
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=1536)
]
schema = CollectionSchema(fields)
collection = Collection("documents", schema)
# 삽입 및 검색
collection.insert([[1, 2, 3], [embedding1, embedding2, embedding3]])
collection.search(
data=[query_embedding],
anns_field="embedding",
param={"metric_type": "COSINE", "params": {"nprobe": 10}},
limit=5
)
장점:
- 수십억 단위 벡터 규모에서 검증됨
- 다양한 인덱스 유형 (IVF, HNSW, DiskANN)
- GPU 가속 지원
- 활발한 엔터프라이즈 커뮤니티 (Zilliz Cloud)
단점:
- 복잡한 배포 (etcd, MinIO 필요)
- 작은 프로젝트에는 과한 사양
- 운영 오버헤드 높음
최적 사용처: 대규모 엔터프라이즈 배포 및 DevOps 역량이 있는 팀.
Qdrant — 성능과 필터링의 조화
Qdrant는 Rust 로 작성되어 우수한 성능과 풍부한 메타데이터 필터링 기능을 제공합니다. 프로덕션 RAG 에서 점점 더 인기를 얻고 있습니다.
from qdrant_client import QdrantClient
from qdrant_client.models import VectorParams, Distance, PointStruct
client = QdrantClient("localhost", port=6333)
# 컬렉션 생성
client.create_collection(
collection_name="documents",
vectors_config=VectorParams(size=1536, distance=Distance.COSINE)
)
# 풍부한 페이로드와 함께 업서트
client.upsert(
collection_name="documents",
points=[
PointStruct(id=1, vector=embedding, payload={"category": "tech", "date": "2024-01"})
]
)
# 복잡한 필터링과 함께 검색
client.search(
collection_name="documents",
query_vector=query_embedding,
query_filter={"must": [{"key": "category", "match": {"value": "tech"}}]},
limit=5
)
장점:
- 우수한 쿼리 성능 (Rust 기반)
- 중첩 조건을 포함한 풍부한 필터링
- 메모리 효율성을 위한 양자화
- 기능과 단순성의 좋은 균형
단점:
- Pinecone/Weaviate 보다 생태계가 작음
- 클라우드 제공이 상대적으로 새움
최적 사용처: 복잡한 필터링 요구사항과 함께 높은 성능이 필요한 팀.
FAISS — 연구의 일꾼
FAISS(Facebook AI Similarity Search) 는 데이터베이스가 아닌 라이브러리입니다. 많은 벡터 DB 가 이 위에 구축됩니다.
import faiss
import numpy as np
# 인덱스 생성
dimension = 1536
index = faiss.IndexFlatIP(dimension) # 내적 유사성
# 벡터 추가
vectors = np.array(embeddings).astype('float32')
index.add(vectors)
# 검색
D, I = index.search(query_embedding.reshape(1, -1), k=5)
장점:
- 인메모리 검색이 매우 빠름
- 다양한 인덱스 유형 (Flat, IVF, HNSW, PQ)
- GPU 지원
- 네트워크 오버헤드 없음
단점:
- 영속성 없음 (수동으로 저장/로드 필요)
- 메타데이터 필터링 없음
- CRUD 없음 (업데이트를 위해 인덱스 재구축 필요)
- 단일 노드만 지원
최적 사용처: 연구, 프로토타이핑 및 벡터가 메모리에 맞는 시나리오.
pgvector — PostgreSQL 네이티브
pgvector는 PostgreSQL 에 벡터 유사성 검색 기능을 추가합니다. 기존 Postgres 인프라를 벡터에 활용하세요.
PostgreSQL 과 같은 전통적인 데이터베이스를 벡터 검색에 사용할 수 있나요? 네, 가능합니다—pgvector 를 통해 이를 현실적이고 실용적으로 만들 수 있습니다.
-- 확장 기능 활성화
CREATE EXTENSION vector;
-- 벡터 열이 있는 테이블 생성
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
embedding vector(1536)
);
-- HNSW 인덱스 생성
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);
-- 유사성 검색
SELECT id, content, embedding <=> '[0.1, 0.2, ...]' AS distance
FROM documents
WHERE category = 'tech'
ORDER BY distance
LIMIT 5;
장점:
- 기존 PostgreSQL 기술 및 인프라 활용
- 벡터와 함께 ACID 트랜잭션
- 관계형 쿼리와 벡터 검색 결합
- 운영할 새로운 데이터베이스 불필요
단점:
- 전용 DB 대비 성능 한계
- PostgreSQL 생태계로 제한됨
- 인덱스 빌딩 속도가 느릴 수 있음
최적 사용처: 벡터 사용 시 새로운 인프라 없이도 벡터를 활용하고자 하는 PostgreSQL 기반 팀.
올바른 벡터 저장소 선택하기
결정 프레임워크
다음 질문으로 시작하세요:
-
규모는 얼마나 되나요?
- < 10 만 벡터 → Chroma, pgvector, FAISS
- 10 만 - 1 천만 벡터 → Qdrant, Weaviate, Pinecone
-
1 천만 벡터 → Milvus, Pinecone, Qdrant
-
직접 호스팅 또는 관리형?
- 관리형 → Pinecone, Zilliz (Milvus), Weaviate Cloud
- 직접 호스팅 → Qdrant, Milvus, Chroma, Weaviate
-
하이브리드 검색이 필요한가요?
- 예 → Weaviate, Elasticsearch
- 아니오 → 어떤 옵션도 가능
-
필터링 복잡도는 어떤가요?
- 단순 → Chroma, Pinecone
- 복잡한 중첩 필터 → Qdrant, Weaviate
-
FAISS 와 전용 벡터 데이터베이스의 차이점은 무엇인가요? 영속성, 분산 검색 또는 프로덕션 기능이 필요하면 데이터베이스를 선택하세요. FAISS 는 임베디드 연구 시나리오에 이상적입니다.
일반적인 RAG 아키텍처 패턴
프로덕션 시스템의 경우, 확장된 문맥을 위한 LongRAG, 자기 반성 기능을 갖춘 Self-RAG, 또는 더 정교한 검색 전략을 위한 지식 그래프를 활용하는 GraphRAG 와 같은 고급 RAG 변형 을 고려하세요.
패턴 1: Chroma 를 이용한 간단한 RAG
문서 → 임베딩 → Chroma → LangChain → LLM
MVP 및 내부 도구에 적합합니다.
패턴 2: Qdrant 를 이용한 프로덕션 RAG
문서 → 임베딩 → Qdrant (직접 호스팅)
↓
FastAPI → LLM
비용 절감을 고려한 프로덕션 배포에 적합합니다.
패턴 3: Pinecone 을 이용한 엔터프라이즈 RAG
문서 → 임베딩 → Pinecone (관리형)
↓
애플리케이션 → LLM
비용보다 신뢰성을 최우선으로 하는 팀에 적합합니다.
LLM 을 RAG 파이프라인에 통합할 때, Ollama 와 Qwen3 를 활용한 구조화된 출력 기법 은 언어 모델에서 일관되고 구문 분석 가능한 응답을 보장하여 검색된 정보를 추출하고 처리하는 작업을 용이하게 합니다.
성능 벤치마크
실제 성능은 데이터셋, 쿼리, 하드웨어에 따라 다릅니다. 일반적인 관측치:
| 작업 | FAISS | Qdrant | Milvus | Pinecone | Chroma |
|---|---|---|---|---|---|
| 1M 벡터 삽입 | 30 초 | 2 분 | 3 분 | 5 분 | 4 분 |
| 쿼지 지연 시간 (P50) | 1ms | 5ms | 10ms | 30ms | 15ms |
| 쿼지 지연 시간 (P99) | 5ms | 20ms | 40ms | 80ms | 50ms |
| 메모리/1M 벡터 | 6GB | 8GB | 10GB | N/A | 8GB |
참고: Pinecone 지연 시간에는 네트워크 오버헤드가 포함되며, 나머지는 로컬 기준입니다.
마이그레이션 고려사항
RAG 프로젝트에 Chroma 와 Weaviate 중 어떤 것을 선택해야 할까요? 마이그레이션 경로도 고려해야 합니다:
- Chroma → 프로덕션: 임베딩 내보내기, Qdrant/Pinecone 으로 재수입
- pgvector → 전용 DB: COPY 를 사용하여 내보낸 후 변환하여 로드
- FAISS → 데이터베이스: 인덱스 저장, 벡터를 타겟 DB 로 로드
대부분의 프레임워크 (LangChain, LlamaIndex) 는 벡터 저장소를 추상화하여 애플리케이션 레이어에서 마이그레이션을 더 쉽게 만듭니다.
비용 비교
관리형 옵션 (월별, 1M 벡터, 일일 10K 쿼리):
- Pinecone Serverless: 약 $50-100
- Pinecone Standard: 약 $70-150
- Weaviate Cloud: 약 $25-100
- Zilliz Cloud: 약 $50-200
직접 호스팅 (인프라 비용):
- 소형 VM (4GB RAM): 월 $20-40
- 중형 VM (16GB RAM): 월 $80-150
- Kubernetes 클러스터: 월 $200+
유용한 링크
- Pinecone 문서
- Chroma GitHub
- Weaviate 문서
- Milvus 문서
- Qdrant 문서
- FAISS Wiki
- pgvector GitHub
- LangChain 벡터 저장소
- LlamaIndex 벡터 저장소 가이드
- LLMs with Structured Output: Ollama, Qwen3 & Python or Go
- Advanced RAG: LongRAG, Self-RAG and GraphRAG Explained
- Reranking with embedding models
- Qwen3 Embedding & Reranker Models on Ollama: State-of-the-Art Performance
- Cross-Modal Embeddings: Bridging AI Modalities