벡터 데이터베이스
2026년 8월 28일
- 벡터 데이터베이스(Vector DB)는 임베딩 벡터를 저장하고 근사 최근접 탐색(ANN, Approximate Nearest Neighbor) 으로 빠르게 유사 벡터를 찾는 데 특화된 DB다.
- 일반 DB로는 N개 벡터에 대해 O(N) 풀스캔이 필요하지만, ANN 인덱스(HNSW, IVF, PQ 등)는 O(log N)~O(√N) 수준에서 근사 탐색을 한다.
대표 제품 비교
| DB | 형태 | 특징 |
|---|---|---|
| Chroma | 로컬·임베디드 | 개발용으로 가장 쉬움 |
| FAISS | 라이브러리 | Facebook, 인덱싱만 — 저장은 직접 |
| Qdrant | 자체 호스팅 + 클라우드 | Rust, 메타데이터 필터 강력 |
| Pinecone | 매니지드만 | 운영 부담 0, 비용 ↑ |
| Weaviate | 자체 호스팅 + 클라우드 | GraphQL 인터페이스 |
| pgvector | PostgreSQL 확장 | 기존 SQL과 통합 |
| Milvus | 자체 호스팅 | 대규모, 분산 |
기본 사용 패턴 (Chroma 예시)
Python
ANN 인덱스 종류
개념 자체는 ANN(근사 최근접 이웃), 가장 흔한 구현은 HNSW에서 따로 다룬다.
- HNSW (Hierarchical Navigable Small World) — 가장 흔함. 메모리 ↑, 정확도·속도 ↑.
- IVF (Inverted File Index) — 클러스터링 기반. 메모리 ↓, 대규모용.
- PQ (Product Quantization) — 벡터를 양자화해 메모리 압축. 정확도 약간 손해.
- 보통 HNSW + PQ 조합으로 쓴다 (정확도/메모리 balance).
메타데이터 필터링이 중요한 이유
- 벡터 유사도만으로는 "이 사용자의 문서만" 같은 권한 필터를 표현 못 함.
- 대부분의 Vector DB는 메타데이터에
WHERE절 같은 조건을 걸어 1차 필터링 → 그 안에서 ANN을 수행. - 거르는 시점에 따라 결과가 0건이 되기도 한다 → Pre-filtering vs Post-filtering, Qdrant 메타데이터 필터, Payload Index.
선택 기준
- PoC / 단일 서버 → Chroma, FAISS.
- 이미 Postgres 사용 중 → pgvector (별도 인프라 안 늘려도 됨).
- 대규모 트래픽 + 운영 부담 회피 → Pinecone.
- 온프레미스 + 정밀 제어 → Qdrant, Weaviate, Milvus.
주의
- 벡터 차원과 거리 함수(
cosine/dot/euclidean)는 컬렉션 생성 시 고정. 나중에 변경 못 함. - 임베딩 모델을 바꾸면 전체 재인덱싱 필요 → 안전한 절차는 Qdrant 인덱스 재빌드 전략.
- ANN은 근사다 — 100% 재현률을 요구하면 정확도 옵션(
ef_search)을 키워야 하고 그만큼 느려진다 → Recall과 ef 튜닝, HNSW 파라미터.