Vector DB
고차원 벡터를 저장하고 유사도 기반 검색에 특화된 데이터베이스로, AI 임베딩 모델의 출력을 저장·검색하는 데 사용됩니다.
핵심 개념
임베딩 (Embedding)
텍스트, 이미지 등 비정형 데이터를 고차원 숫자 벡터로 변환한 것. 의미적으로 유사한 데이터는 벡터 공간에서 가까이 위치.
"강아지" → [0.12, 0.85, -0.33, 0.61, ...] (수백~수천 차원)
"개" → [0.11, 0.83, -0.35, 0.59, ...] ← 의미 유사 → 벡터도 유사
"자동차" → [-0.72, 0.03, 0.91, -0.44, ...] ← 의미 다름 → 벡터도 멈
유사도 측정 방법
1. 코사인 유사도 (Cosine Similarity)
→ 벡터 방향의 각도로 측정 (크기 무관)
→ -1 ~ 1, 1에 가까울수록 유사
→ 텍스트 의미 유사도에 가장 많이 사용
2. 유클리드 거리 (L2 Distance)
→ 두 벡터 간 직선 거리
→ 낮을수록 유사
3. 내적 (Dot Product)
→ 크기와 방향 모두 반영
→ 정규화된 벡터에서는 코사인 유사도와 동일
인덱싱 — HNSW
벡터 검색의 핵심 인덱스 구조. 정확한 최근접 이웃 탐색(Exact KNN)은 O(n)이라 수백만 건에서 느림 → HNSW(Hierarchical Navigable Small World) 로 근사 탐색.
[ HNSW 구조 ]
Layer 2 (희소): 1 ─────── 5
Layer 1 (중간): 1 ─ 3 ─ 5 ─ 7
Layer 0 (전체): 1─2─3─4─5─6─7─8─9
탐색: 상위 레이어에서 넓게 진입 → 하위 레이어로 내려가며 정밀화
→ O(log n) 근사 탐색
주요 Vector DB 비교
| Chroma DB | Pinecone | Weaviate | pgvector | |
|---|---|---|---|---|
| 타입 | 오픈소스, 로컬 | 관리형 SaaS | 오픈소스 | PostgreSQL 확장 |
| 배포 | 온프레미스/클라우드 | 클라우드 전용 | 온프레미스/클라우드 | PostgreSQL 위 |
| 특징 | 가볍고 간단, Python 친화 | 완전 관리형 | GraphQL 지원 | RDB와 함께 사용 |
| 적합 | 프로토타이핑, 온프레미스 | 빠른 프로덕션 | 멀티모달 | 기존 PG 활용 |
RDB vs Vector DB
| RDB | Vector DB | |
|---|---|---|
| 검색 방식 | 정확 일치, 범위 검색 | 유사도 기반 근사 검색 |
| 데이터 타입 | 정형 데이터 | 고차원 벡터 |
| 인덱스 | B-Tree, Hash | HNSW, IVF |
| 쿼리 언어 | SQL | API (벡터 + 메타데이터 필터) |
| 사용 예 | 사용자 정보, 주문 | 시맨틱 검색, RAG, 추천 |
활용 패턴 — RAG
[ 문서 임베딩 (오프라인) ]
문서 → 임베딩 모델 → 벡터 → Vector DB 저장
[ 검색 (런타임) ]
질문 → 임베딩 모델 → 쿼리 벡터
↓
Vector DB 유사도 검색 → Top-K 문서
↓
LLM에 질문 + 문서 컨텍스트 주입 → 답변
→ RAG
핵심 정리
-
의미적으로 유사한 데이터를 찾는 것이 목적 — 키워드 매칭이 아닌 벡터 거리 기반
-
HNSW 인덱스로 수백만 건에서도 O(log n) 근사 탐색 가능
-
RDB와 함께 사용하는 경우가 많음 — pgvector로 PostgreSQL에 통합하거나, 별도 Vector DB + RDB 메타데이터 조인
→ RAG | NoSQL | Elasticsearch