벡터 DB가 필요한 이유
AI 애플리케이션에서 "의미적으로 유사한 내용 찾기"는 기존 키워드 검색으로 불가능합니다. "강아지 훈련 방법"을 검색했을 때 "반려견 교육 팁"을 찾으려면, 텍스트를 숫자 벡터로 변환하고 그 유사도를 계산해야 합니다. 벡터 DB는 이 고차원 벡터의 빠른 유사도 검색을 위해 설계된 데이터베이스입니다.
한눈에 보는 비교
| 항목 | Pinecone | Weaviate | Qdrant | pgvector |
|---|---|---|---|---|
| 운영 방식 | 완전 관리형 SaaS | 자체/클라우드 | 자체/클라우드 | PostgreSQL 확장 |
| 무료 티어 | 1개 인덱스, 1M 벡터 | 오픈소스 무료 | 오픈소스 무료 | 완전 무료 |
| 관리 부담 | 없음 | 중간 | 중간 | 낮음 (기존 PG) |
| 성능 (대용량) | ★★★★★ | ★★★★☆ | ★★★★★ | ★★★☆☆ |
| Hybrid Search | O | O | O | O (별도 설정) |
| 멀티모달 | X | O | X | X |
| 한국어 자료 | 중간 | 적음 | 적음 | 많음 |
| 월 비용 (시작) | $70~ | 무료(자체) | 무료(자체) | 무료 |
pgvector —
PostgreSQL 사용자의 첫 선택
pgvector는 PostgreSQL 확장으로, 기존 PG 인프라에 벡터 검색 기능을 추가합니다. 별도 DB를 운영하지 않아도 됩니다.
-- 설치
CREATE EXTENSION vector;
-- 테이블 생성
CREATE TABLE documents (
id BIGSERIAL PRIMARY KEY,
content TEXT,
embedding VECTOR(1536) -- OpenAI ada-002 차원
);
-- HNSW 인덱스 (빠른 근사 검색)
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);
-- 유사도 검색
SELECT content, 1 - (embedding <=> query_embedding) AS similarity
FROM documents
ORDER BY embedding <=> query_embedding
LIMIT 5;
강점:
- PostgreSQL을 이미 쓴다면 인프라 추가 제로
- 트랜잭션, JOIN, 필터링을 벡터 검색과 함께 사용 가능
- 비용 없음 (기존 PG 서버 활용)
- pgvector + tsvector로 Hybrid Search 구현 가능
약점:
- 수천만 벡터 이상 대규모에서 성능 저하
- 벡터 인덱스 빌드 시 메모리 소비 큼
- 전용 벡터 DB 대비 기능 제한
추천: PostgreSQL 기반 서비스, 소~중규모(< 1000만 벡터), 비용 민감한 팀
Qdrant — 고성능 오픈소스
Rust로 작성된 Qdrant는 성능과 메모리 효율이 뛰어난 오픈소스 벡터 DB입니다.
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
client = QdrantClient(":memory:") # 인메모리 또는 url="http://localhost:6333"
client.create_collection(
"my_docs",
vectors_config=VectorParams(size=1536, distance=Distance.COSINE)
)
client.upsert("my_docs", points=[
PointStruct(id=1, vector=[...], payload={"text": "내용", "source": "doc1"})
])
results = client.search("my_docs", query_vector=[...], limit=5)
강점:
- 필터링 성능이 특히 뛰어남 (페이로드 필터 + 벡터 검색 동시)
- Quantization으로 메모리 사용량 대폭 절감
- REST API + Python/TypeScript SDK
- Docker로 10분 안에 로컬 실행
약점:
- 멀티모달 기능 없음
- Weaviate보다 내장 ML 기능 적음
추천: 대용량(1억+ 벡터), 복잡한 메타데이터 필터링, 비용 절감 필요한 자체 호스팅
Pinecone —
관리 부담 없는 SaaS
Pinecone은 인프라 관리 없이 바로 시작할 수 있는 완전 관리형 서비스입니다.
from pinecone import Pinecone
pc = Pinecone(api_key="YOUR_API_KEY")
index = pc.Index("my-index")
index.upsert(vectors=[{"id": "1", "values": [...], "metadata": {"text": "내용"}}])
results = index.query(vector=[...], top_k=5, include_metadata=True)
강점:
- 설정, 유지보수 불필요 — 코드에만 집중
- 수억 벡터 스케일까지 자동 확장
- Namespace로 멀티테넌트 관리 용이
약점:
- 비용: 1M 벡터 이상부터 월 $70 이상
- 데이터가 외부 서버에 저장 (보안 민감 기업 주의)
- 커스터마이징 제한
추천: 빠른 시작, 팀에 DevOps 없음, 규모 예측 어려운 스타트업
Weaviate —
멀티모달과 AI 통합
Weaviate는 벡터 DB 중 가장 "AI 네이티브"한 설계를 가지고 있습니다.
강점:
- 텍스트, 이미지, 음성을 하나의 DB에서 통합 검색
- 모듈 시스템으로 임베딩 모델을 DB 내부에서 실행
- GraphQL API (복잡한 관계 쿼리에 유리)
- Generative Search: 검색 + LLM 생성을 한 번에
약점:
- 설정이 가장 복잡
- 리소스 소비가 많음
추천: 멀티모달 검색, 복잡한 엔티티 관계, 엔터프라이즈 AI 플랫폼
선택 가이드
PostgreSQL 이미 사용 중? → pgvector (추가 인프라 없음)
↓ NO
수천만 벡터 이상? → Qdrant 또는 Pinecone
↓ NO
관리 부담 없애고 싶음? → Pinecone
↓ NO
이미지/오디오 혼합? → Weaviate
↓ NO
기본 선택 → Qdrant (오픈소스, 고성능, 무료)





