벡터 데이터베이스와 임베딩 검색 시스템
벡터 데이터베이스는 고차원 벡터를 저장하고 유사성 검색을 수행하도록 최적화된 특수 데이터베이스이다. 이는 현대 AI 애플리케이션, 특히 RAG(Retrieval-Augmented Generation) 시스템의 핵심 구성 요소이다.
벡터 데이터베이스란?
전통적인 데이터베이스가 정확한 일치(query) 검색에 최적화되어 있는 반면, 벡터 데이터베이스는 Approximate Nearest Neighbor (ANN) 검색에 중점을 둔다.
핵심 개념
Embedding: 데이터(text, image, audio)의 수치 벡터 표현.
"Artificial intelligence" → [0.12, -0.45, 0.89, ..., 0.34] (e.g., 1536 dimensions)
Similarity Search: 쿼리 벡터와 가장 가까운 벡터를 찾는 과정.
query_vector → Top-K most similar vectors
Distance Metrics:
- Cosine Similarity: 방향 기반 유사도.
- Euclidean Distance (L2): 기하학적 거리.
- Dot Product: 벡터의 내적.
유사도 지표: 상세 분석
Cosine Similarity
cos(A, B) = (A · B) / (||A|| × ||B||)
값 범위: [-1, 1]
- 1: 동일한 방향(거의 동일).
- 0: 직교(관련 없음).
- -1: 반대 방향.
사용 사례: 텍스트 유사도, 시맨틱 검색.
Euclidean Distance (L2)
d(A, B) = √(Σ(Aᵢ - Bᵢ)²)
값 범위: [0, ∞) 사용 사례: 이미지 유사도, 클러스터링.
Dot Product
A · B = Σ(Aᵢ × Bᵢ)
사용 사례: 정규화된 임베딩에서는 cosine과 동일하게 동작.
인덱싱 알고리즘
1. Brute Force (Flat Index)
데이터베이스의 모든 벡터와 쿼리를 비교하는 방식.
복잡도: O(n × d)
- n: 벡터의 개수
- d: 벡터 차원
장점: 100% 정확도
단점: 대규모 데이터셋에서는 매우 느림
2. IVF (Inverted File Index)
벡터를 여러 클러스터로 나누어 검색 공간을 축소하는 방식.
알고리즘:
- K-means로 중심점(centroids) 생성
- 각 벡터를 가장 가까운 중심점에 할당
- 검색 시 가장 가까운 nprobe 개 클러스터만 탐색
1Parameters: 2- nlist: Number of clusters (typically √n) 3- nprobe: Number of clusters to search 4 5Trade-off: Higher nprobe → higher accuracy, lower speed.
3. HNSW (Hierarchical Navigable Small World)
그래프 기반 접근 방식으로, 현재 가장 널리 사용되는 알고리즘.
구조:
1Layer 2: o-------o-------o (sparse) 2 | | | 3Layer 1: o-o-o---o-o-o---o-o-o (medium) 4 | | | | | | | | | 5Layer 0: o-o-o-o-o-o-o-o-o-o-o-o (dense)
Parameters:
- M: 각 노드의 최대 연결 수
- ef_construction: 인덱스 생성 시 후보 수
- ef_search: 검색 시 후보 수
장점:
- 매우 빠른 검색: O(log n)
- 높은 recall
- 동적 insert/delete 지원
4. Product Quantization (PQ)
벡터를 압축하여 메모리 사용량을 줄이는 방식.
방법:
- 벡터를 M개의 서브벡터로 분할
- 각 서브벡터를 K개의 중심점 중 하나에 매핑
- 원래 벡터 대신 중심점의 ID만 저장
1Original: 1536 dim × 4 bytes = 6KB 2PQ (M=96, K=256): 96 × 1 byte = 96 bytes 3Compression: ~64x
5. Scalar Quantization (SQ)
Float32 표현을 Int8로 변환.
1Original: 1536 × 4 bytes = 6KB 2SQ8: 1536 × 1 byte = 1.5KB 3Compression: 4x 4## 인기 벡터 데이터베이스 비교 5 6### Pinecone 7 8**특징:** 9- 완전 관리형 클라우드 서비스. 10- 자동 스케일링. 11- 메타데이터 필터링. 12- 네임스페이스 격리. 13 14**사용 예:** 15```python 16import pinecone 17 18pinecone.init(api_key="xxx", environment="us-west1-gcp") 19index = pinecone.Index("my-index") 20 21# Upsert 22index.upsert(vectors=[ 23 {"id": "vec1", "values": [0.1, 0.2, ...], "metadata": {"category": "tech"}} 24]) 25 26# Query 27results = index.query(vector=[0.1, 0.2, ...], top_k=10, filter={"category": "tech"})
Weaviate
특징:
- 오픈 소스.
- 내장 벡터화 기능.
- GraphQL API 지원.
- 하이브리드 검색(벡터 + 키워드) 가능.
Qdrant
특징:
- Rust 기반의 고성능 구조.
- 풍부한 필터링 옵션.
- Payload 인덱싱.
- 분산 배포 지원.
Milvus
특징:
- GPU 가속 지원.
- 멀티 벡터 검색.
- Time travel(버전 관리) 기능.
- Kubernetes 네이티브 아키텍처.
ChromaDB
특징:
- 개발자 친화적이며 설정이 간단.
- In-memory + persistent 모드 지원.
- Python-first 접근 방식.
- 프로토타이핑에 최적.
비교 표
| 기능 | Pinecone | Weaviate | Qdrant | Milvus |
|---|---|---|---|---|
| 호스팅 | Cloud | Both | Both | Both |
| 확장성 | Auto | Manual | Manual | Auto |
| 하이브리드 검색 | ✓ | ✓ | ✓ | ✓ |
| GPU 지원 | - | - | ✓ | ✓ |
| 가격 | Per vector | Free/Paid | Free/Paid | Free/Paid |
필터링 및 메타데이터
Pre-filtering vs Post-filtering
Pre-filtering:
- 먼저 메타데이터 필터 적용.
- 필터링된 집합 내에서 벡터 검색 수행.
- 장점: 더 빠름.
- 단점: 리콜 손실 가능.
Post-filtering:
- Vector search를 통해 Top-K × multiplier 결과 획득.
- 해당 결과에 메타데이터 필터 적용.
- 최종 Top-K 반환.
- 장점: 더 높은 리콜.
- 단점: 성능이 느릴 수 있음.
하이브리드 검색
Keyword(BM25) + Vector 검색 조합:
final_score = α × vector_score + (1-α) × keyword_score
성능 최적화
인덱스 파라미터
최적 HNSW 설정:
1High Recall: M=32, ef=200 2High Speed: M=16, ef=50 3Balanced: M=24, ef=100
배치 처리
1# Poor: Singular insert 2for vec in vectors: 3 index.upsert([vec]) 4 5# Good: Batch insert 6index.upsert(vectors, batch_size=100)
Connection Pooling
1from pinecone import Pinecone 2 3pc = Pinecone( 4 api_key="xxx", 5 pool_threads=30 # Parallel connections 6)
엔터프라이즈 아키텍처 예시
1┌─────────────────────────────────────────────────────┐ 2│ Application │ 3└──────────────────────┬──────────────────────────────┘ 4 │ 5┌──────────────────────▼──────────────────────────────┐ 6│ Vector Search Service │ 7│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 8│ │ Query │ │ Reranker │ │ Cache │ │ 9│ │ Engine │ │ Service │ │ (Redis) │ │ 10│ └─────────────┘ └─────────────┘ └─────────────┘ │ 11└──────────────────────┬──────────────────────────────┘ 12 │ 13┌──────────────────────▼──────────────────────────────┐ 14│ Vector Database Cluster │ 15│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 16│ │ Shard 1 │ │ Shard 2 │ │ Shard 3 │ │ 17│ └─────────┘ └─────────┘ └─────────┘ │ 18└─────────────────────────────────────────────────────┘
모니터링 및 Observability
핵심 지표
- Query Latency (p50, p95, p99)
- Recall Rate
- QPS (Queries Per Second)
- Index Size
- Memory Usage
알림 임계값
1alerts: 2 - name: high_latency 3 condition: p99_latency > 200ms 4 severity: warning 5 6 - name: low_recall 7 condition: recall < 0.9 8 severity: critical 9## 결론 10 11벡터 데이터베이스는 현대 AI 애플리케이션에 필수적인 구성 요소입니다. 올바른 데이터베이스 선택, 인덱싱 전략, 그리고 최적화를 통해 고성능의 시맨틱 검색 시스템을 구축할 수 있습니다. 12 13Veni AI는 엔터프라이즈급 벡터 검색 솔루션을 제공합니다. 필요 사항이 있다면 언제든지 문의해 주세요.
