벡터 데이터베이스 쇼룸 파트 3: Qdrant — 외관보다 더 많은 것을 담는 스포티한 해치백
요약
Qdrant는 필터링 가능한 HNSW를 핵심으로 하는 고성능 벡터 데이터베이스입니다. 희소/밀집 벡터 통합, 양자화(Quantization), 다중 벡터 지원 등 고급 기능을 제공합니다. 다만, 임베더가 아니며 WAL 기반의 시점 복구 기능이 없고, 거리 함수는 생성 시점에 고정된다는 점을 유의해야 합니다.
핵심 포인트
- 필터링 자체가 인덱스 탐색 과정에 참여하는 것이 강점입니다.
- 희소/밀집 벡터를 단일 요청으로 처리할 수 있는 하이브리드 기능을 지원합니다.
- 양자화(Quantization)를 통해 메모리 사용량을 획기적으로 줄여 대규모 처리가 가능합니다.
- 거리 함수는 컬렉션 생성 시 고정되므로 신중한 선택이 필요합니다.
🏎️ Qdrant — 겉모습보다 많은 것을 담는 고성능 벡터 데이터베이스
날카로운 가속력과 정밀한 핸들링— 그리고 외관에서 보이는 것보다 눈에 띄게 큰 트렁크 공간.
내부 구조: Rust 코어를 단일 바이너리 또는 컨테이너 형태로 제공하며 (Python 클라이언트의 경우 실험용으로 임베디드/로컬 모드를 지원함), Apache 2.0 라이선스를 따릅니다. 핵심 기능은 필터링 가능한 HNSW: 그래프가 페이로드 인덱스(payload indexes)를 염두에 두고 구축되어, 필터가 단순히 위에 붙는 것이 아니라 그래프 탐색 과정 자체에 참여합니다.
강점:
- pgvector의 세 가지 필터 도구가 기억나십니까? 여기서는 필터링 자체가 인덱스의 일부입니다. "유사하지만 연도가 2024년인 경우"와 같은 검색이 이 데이터베이스의 주력 분야입니다.
- 하이브리드 기능 기본 탑재: v1.7부터 희소 벡터(sparse vectors)를 지원하며, v1.10부터 프리페치 및 융합(fusion, RRF/DBSF)을 갖춘 Query API를 통해 밀집(dense) 벡터와 희소 벡터를 단일 요청으로 처리할 수 있습니다.
- 양자화 (Quantization): 저희의 "경량 합금"과 같습니다. int8은 벡터 크기를 4배로 줄이고, 바이너리 코드는 32배로 줄입니다. 원본 데이터는 디스크에 보관하고 압축된 복사본만 RAM에 유지할 수 있습니다. 단일 노드에서 수억 개의 벡터를 처리하는 것은 마케팅이 아닌 실제 구현 가능한 환경입니다.
- 다중 벡터 (Multivectors, ColBERT 스타일): 하나의 포인트당 여러 개의 벡터를 사용하며, 후반부 상호작용(late interaction)을 지원합니다. 이 기능을 제공하는 데이터베이스는 매우 드뭅니다.
운영 기능: Prometheus 메트릭, 스냅샷, API 키 + JWT RBAC (역할 기반 접근 제어)
약점:
- 임베딩 자체를 가져와야 함: 여기는 데이터베이스이지 임베더(embedder)가 아닙니다 (이전 이슈의 전동 킥보드와 대비됨). Python/JS/Go/Rust용 클라이언트가 있으며, LangChain/LlamaIndex 통합도 포함되어 있습니다.
- 분산 모드(샤딩, 복제, Raft)는 실제 운영 작업에 해당합니다. 이 시리즈에서 나중에 도착하는 화물 열차보다는 간단하지만, Postgres보다는 무겁습니다.
- 백업은 수동 스냅샷 방식입니다. Postgres에서 익숙한 WAL(Write-Ahead Log)이나 시점 복구(point-in-time recovery) 기능이 없습니다.
- 튜닝은 계약의 일부입니다: m, ef_construct, hnsw_ef, 리스코어링을 사용한 양자화 등. 기본 설정도 괜찮지만, 고성능 차량처럼 튜닝할 여지가 있습니다.
수동 작업을 건너뛰면 문제가 발생하는 부분:
- 거리 함수 (COSINE/DOT/EUCLID/MANHATTAN)는 컬렉션 생성 시 고정됩니다. 잘못 선택하면 전체 재색인(reindex)이 필요하며, '실시간 변경(alter on the fly)'은 불가능합니다.
- 페이로드 인덱스 (Payload indexes): 이를 생성하는 것을 잊으면 필터링 검색 성능이 스캔(scans)으로 저하됩니다. 올바른 순서는 컬렉션 → 페이로드 인덱스 → 일괄 업로드입니다. 나중에 인덱스를 추가하면, 필터 가능한 엣지(filterable edges)를 연결하기 위해 백그라운드에서 HNSW 그래프가 재구축됩니다.
- 벤치마크 함정 #1: 세그먼트가 옵티마이저의
indexing_threshold보다 낮게 유지되는 동안에는 해당 세그먼트에 대해 HNSW 인덱스가 구축되지 않습니다. 이 경우 검색은 브루트 포스(brute force)로 폴백되며, 이는 빠르고 완벽한 재현율(perfect recall)을 보입니다. 작은 컬렉션에 대한 순진한 벤치마크는 HNSW가 아닌 정확한 검색만 측정합니다. 정직한 수치를 얻으려면 프로덕션과 유사한 볼륨이 필요하거나indexing_threshold를 명시적으로 낮춰야 합니다. - 재스코어링(rescoring) 없는 양자화(Quantization)는 재현율을 감소시키며, 이진 양자화(binary quantization)는 모델에 민감합니다. 어떤 임베딩에서는 탁월하지만, 다른 임베딩에서는 성능이 떨어집니다. 비교를 위한 기준 진실(Ground truth)은
exact=true로 검색하는 것입니다. 쇼룸 논제: 벤더의 벤치마크는 광고입니다. 반드시 자체 데이터로 검증하세요. - 명명된 벡터 (Named vectors): 컬렉션이 명명된 벡터를 사용하여 생성되었다면, 쿼리 시
using매개변수를 통해 벡터 이름을 전달해야 합니다. 그렇지 않으면400에러가 발생합니다.
소유 비용 (Cost of ownership): Apache 2.0 하에서 무료이며, Qdrant Cloud(관리형 및 하이브리드)를 사용할 수 있습니다. RAM 요구량은 유연하며, '백만 개당 6 GB' 대신 양자화와 온디스크 원본을 사용합니다.
메커니즘 및 구성 요소 (Mechanics & parts): Qdrant GmbH(베를린)가 개발했으며, 문서화는 업계 최고 수준입니다.
해치백은 스테이션 왜건인 척하지도 않고 철도를 건설하지도 않습니다. 그저 빠르게 운반할 뿐입니다. 그리고 데이터가 트렁크를 초과할 때, API는 변하지 않습니다. 스냅샷을 통해 클러스터로 이동하기만 하면 되고, 애플리케이션은 아무것도 눈치채지 못합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기