Tan Kim

vector-db

벡터 데이터베이스 (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) 파이프라인의 저장소 역할을 담당한다.

  1. 인덱싱: 문서를 청크로 분할 → 임베딩 → 벡터 DB에 저장
  2. 검색: 쿼리 임베딩 → 벡터 DB에서 유사 청크 검색 (top-K)
  3. 생성: 검색된 청크를 컨텍스트로 LLM에 전달 → 답변 생성