VectorDB (벡터 데이터베이스)
VectorDB (벡터 데이터베이스) 는 최근 AI·머신러닝·LLM(대형 언어 모델) 분야에서 아주 중요한 역할을 하는 데이터베이스이다.
간단히 말하면, 숫자 벡터 형태의 데이터(=임베딩)를 효율적으로 저장하고 유사한 데이터를 빠르게 찾는 데 특화된 데이터베이스이다.
VectorDB란?
VectorDB는 벡터(Vector) 데이터를 저장·검색·비교하는 데 최적화된 DB이다.
보통 텍스트, 이미지, 오디오, 코드 등 비정형 데이터를 임베딩(embedding) 모델을 통해 고정된 길이의 벡터(숫자 배열)로 변환한 뒤,
이 벡터들을 VectorDB에 저장한다.
예를 들어:
"오늘 날씨 어때?" → [0.12, -0.08, 0.56, ... , 0.33]
"지금 비 와?" → [0.11, -0.07, 0.57, ... , 0.31]
이 두 벡터는 의미상 비슷하므로 벡터 간 거리(distance) 가 매우 가깝다.
VectorDB는 이런 “유사도 기반 검색"을 빠르게 수행할 수 있도록 만들어진 시스템이다.
VectorDB의 주요 기능
| 기능 | 설명 |
|---|---|
| 임베딩 저장 | 텍스트나 이미지 등에서 생성한 벡터를 저장 |
| 유사도 검색 (Similarity Search) | 쿼리 벡터와 가장 비슷한 벡터(=데이터)를 빠르게 찾아줌 |
| 메타데이터 필터링 | 벡터와 함께 태그, 카테고리 등 부가 정보를 저장하고, 검색 시 필터링 가능 |
| 클러스터링/분류 | 의미상 비슷한 벡터를 그룹화하거나 범주별로 분류 |
| LLM 연동 | LLM의 “context”나 “memory” 기능 구현에 자주 사용 (예: RAG 구조) |
VectorDB가 중요한 이유
대형 언어 모델(예: GPT, Claude, Gemini 등)은 **한 번에 처리할 수 있는 입력량(Context length)**이 제한되어 있다.
그래서 모든 정보를 LLM에 넣을 수 없다.
이때 VectorDB가 다음처럼 사용된다
사용자의 질문 → 임베딩으로 변환 → VectorDB에서 관련 문서 검색 →
결과를 LLM에 함께 넣어서 답변 생성 (이 구조를 RAG, Retrieval-Augmented Generation 이라고 함)
즉, VectorDB는 LLM의 외부 기억장치처럼 작동한다.
대표적인 VectorDB 제품들
| 제품명 | 특징 |
|---|---|
| Pinecone | 완전관리형(Managed), API 중심, RAG에 특화 |
| Weaviate | 오픈소스 + GraphQL API 지원, Hybrid Search 가능 |
| Milvus | 대규모 데이터 처리에 강함, 오픈소스 |
| Qdrant | Rust 기반, 고성능 + 쉬운 REST/gRPC API |
| FAISS | Meta가 만든 라이브러리 (DB라기보다는 검색 엔진에 가까움) |
| Chroma | Python 친화적, LangChain 등과 쉽게 연동 |
| Redis Vector Search (Redis 7.2+) | Redis 안에서 벡터 인덱싱 기능 제공 |
VectorDB 검색의 핵심 개념
벡터 유사도 계산 방법
- Cosine similarity (코사인 유사도) — 각 벡터의 방향이 얼마나 비슷한지
- Euclidean distance (유클리드 거리) — 두 벡터 간의 직선 거리
- Dot product (내적) — 주로 학습된 임베딩에서 사용
인덱싱 (Indexing)
벡터는 보통 수천~수백만 개가 저장되므로, 검색을 빠르게 하기 위해 근사 최근접 탐색(ANN, Approximate Nearest Neighbor) 알고리즘을 사용한다.
대표적인 인덱스 알고리즘:
- HNSW (Hierarchical Navigable Small World)
- IVF (Inverted File Index)
- PQ (Product Quantization)
VectorDB + LLM 예시 (RAG 구조)
flowchart LR A[사용자 질문] --> B[임베딩 생성기] B --> C[VectorDB에서 유사 문서 검색] C --> D[관련 문서 반환] D --> E[LLM에 문서와 함께 질문 전달] E --> F[정확하고 맥락 있는 답변 생성]
이 구조를 통해 ChatGPT와 비슷한 “지식 기반 챗봇”을 직접 만들 수 있다.
실제 사용 예시 (Python + Qdrant)
from qdrant_client import QdrantClient
from qdrant_client.models import PointStruct
client = QdrantClient(":memory:")
# 예시 벡터 저장
client.upsert(
collection_name="docs",
points=[
PointStruct(id=1, vector=[0.1, 0.3, 0.5], payload={"text": "안녕하세요"}),
PointStruct(id=2, vector=[0.11, 0.29, 0.51], payload={"text": "반가워요"})
]
)
# 쿼리 벡터와 유사한 데이터 검색
hits = client.search(collection_name="docs", query_vector=[0.12, 0.28, 0.49], limit=2)
print(hits)
🧩 요약
| 항목 | 내용 |
|---|---|
| 목적 | 벡터 기반 유사도 검색 및 AI 응용 |
| 데이터 형태 | 고차원 벡터 (embedding) |
| 주요 활용처 | RAG, 추천 시스템, 이미지 검색, 음성 검색 |
| 핵심 기술 | ANN 인덱싱, 코사인 유사도, 메타데이터 필터 |
| 대표 제품 | Pinecone, Qdrant, Milvus, Weaviate, Chroma |