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