벡터 데이터베이스 (Vector Database)
벡터 데이터베이스는 고차원 벡터(임베딩)를 저장하고, 유사도 기반 검색(ANN: Approximate Nearest Neighbor)에 최적화된 데이터베이스다. RAG 파이프라인의 핵심 저장소로 활용된다.
개념
텍스트, 이미지, 오디오 등 비정형 데이터를 임베딩 모델로 변환하면 수백~수천 차원의 부동소수점 벡터가 생성된다. 벡터 DB는 이 벡터를 저장하고, 쿼리 벡터와 코사인 유사도·유클리드 거리 등을 기준으로 가장 가까운 벡터를 빠르게 검색한다.
텍스트 → 임베딩 모델 → [0.23, -0.41, 0.87, ...] (768차원) → 벡터 DB 저장
쿼리 → 임베딩 모델 → [0.19, -0.38, 0.91, ...] → 벡터 DB 유사도 검색 → 상위 K개 반환
유사도 측정 방법
| 방법 | 설명 | 특징 |
|---|---|---|
| 코사인 유사도 | 벡터 방향의 각도 측정 | 크기 무관, 텍스트에 주로 사용 |
| 유클리드 거리 | 두 벡터 간 직선 거리 | 크기 반영 |
| 내적 (Dot Product) | 두 벡터의 내적 | 정규화된 임베딩에서 코사인과 동일 |
주요 벡터 DB 비교
Qdrant
오픈소스 벡터 DB로 Rust로 구현되어 성능이 뛰어나다.
- 장점: 고성능, 필터링 기능 강력, 페이로드 관리 편리
- 단점: 상대적으로 커뮤니티 규모가 작음
- 적합한 용도: 자체 호스팅 RAG 파이프라인, 비용 절감이 중요한 경우
Pinecone
완전 관리형 SaaS 벡터 DB다.
- 장점: 관리 부담 없음, 스케일링 자동, 빠른 시작
- 단점: 비용이 높음, 데이터 외부 저장에 대한 우려
- 적합한 용도: 빠른 프로토타이핑, 관리 리소스가 없는 팀
Weaviate
GraphQL API와 멀티모달 지원이 특징인 오픈소스 벡터 DB다.
- 장점: 멀티모달(텍스트+이미지), GraphQL API, 모듈 시스템
- 단점: 설정 복잡도가 높음
- 적합한 용도: 멀티모달 검색, 복잡한 데이터 모델
Chroma
Python 친화적인 경량 오픈소스 벡터 DB다.
- 장점: 설치·사용 간단, 임베딩 모델 내장
- 단점: 대규모 운영에는 한계
- 적합한 용도: 로컬 개발, 소규모 프로젝트
pgvector
PostgreSQL 확장으로 기존 PG 인프라에서 벡터 검색을 지원한다.
- 장점: 기존 PostgreSQL 그대로 사용, 관계형 데이터와 결합 쿼리 가능
- 단점: 전용 벡터 DB 대비 검색 성능 낮음
- 적합한 용도: 이미 PostgreSQL을 사용 중인 팀
컬렉션 구조
벡터 DB는 RDBMS의 테이블에 해당하는 컬렉션으로 데이터를 구분한다.
| 항목 | 설명 |
|---|---|
| 컬렉션 | 동일한 차원의 벡터를 저장하는 단위 |
| 포인트(Point) | 벡터 + ID + 페이로드(메타데이터) |
| 페이로드 | 텍스트 내용, 출처, 날짜 등 메타데이터 |
RAG 파이프라인에서의 활용
벡터 DB는 RAG(Retrieval-Augmented Generation) 파이프라인의 저장소 역할을 담당한다.
- 인덱싱: 문서를 청크로 분할 → 임베딩 → 벡터 DB에 저장
- 검색: 쿼리 임베딩 → 벡터 DB에서 유사 청크 검색 (top-K)
- 생성: 검색된 청크를 컨텍스트로 LLM에 전달 → 답변 생성