벡터 데이터베이스(Vector Database)는 고차원 벡터 임베딩(Embedding)을 효율적으로 저장하고 유사도 검색을 수행하는 데이터베이스다. LLM, 이미지 검색, 추천 시스템에서 핵심 인프라로 떠올랐다.
벡터 임베딩 개념
python
# 텍스트 → 고차원 벡터 변환
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
docs = [
"데이터베이스 인덱싱 기법",
"SQL 쿼리 최적화",
"기계학습 모델 훈련"
]
embeddings = model.encode(docs)
# shape: (3, 384) - 각 문서가 384차원 벡터
# 의미적으로 유사한 텍스트는 벡터 공간에서 가까이 위치
유사도 검색 (ANN)
python
# Pinecone 사용 예시
import pinecone
pinecone.init(api_key="...", environment="us-east1-gcp")
index = pinecone.Index("articles")
# 문서 저장
index.upsert([
("doc1", [0.1, 0.2, ...], {"title": "쿼리 최적화"}),
("doc2", [0.3, 0.1, ...], {"title": "인덱싱 기법"}),
])
# 유사한 문서 검색
query_vector = model.encode("데이터베이스 성능 향상")
results = index.query(vector=query_vector.tolist(), top_k=5, include_metadata=True)
| 알고리즘 | 설명 | 특징 |
|---|
| HNSW | 계층적 작은 세상 그래프 | 가장 빠름, 메모리 사용 多 |
| IVF | 역색인 + 클러스터링 | 메모리 효율적 |
| PQ (Product Quantization) | 벡터 압축 | 정확도와 속도 트레이드오프 |
| LSH | 지역 민감 해싱 | 확률적, 낮은 품질 |
주요 벡터 DB 비교
RAG (Retrieval-Augmented Generation) 패턴
사용자 질문 → 질문 임베딩
→ 벡터 DB 유사도 검색
→ 관련 문서 청크 추출
→ LLM 프롬프트에 컨텍스트 추가
→ LLM 응답 생성
관련 개념