Qdrant (벡터 DB)¶
RAG에서 검색을 하려면 벡터(실수 배열)를 저장해두고, 질문 벡터와 가장 가까운 벡터를 빠르게 찾는 곳이 필요해요. 그 역할을 하는 전용 저장소를 벡터 DB(Vector Database) 라고 합니다. Qdrant는 그 벡터 DB 중 하나로, 우리 RAG 파이프라인의 벡터 저장·검색을 담당하는 도구로 쓰고 있어요.
Qdrant는 Rust로 작성되어 속도와 안정성에서 강점을 보이고, 컬렉션(collection) 단위로 데이터를 나눠 멀티테넌트 격리에 잘 맞습니다.
상황부터 — 벡터를 어디에 둬야 하나¶
일반 DB는 정확한 값 매칭(구조적 질의)에 강한 반면, "가장 가까운 벡터" 같은 유사도 검색엔 설계 목적이 아니에요. 임베딩 결과는 수백~수천 차원의 실수 배열이라, 그것을 빠르게 근사 탐색해 상위 K개를 뽑는 게 벡터 DB의 핵심 기능입니다. Qdrant는 이 근사 최근접 이웃(ANN) 탐색을 HNSW 그래프로 수행합니다.
핵심 개념¶
- 컬렉션(Collection) — 벡터를 묶는 단위. 테넌트(회사·팀)마다 컬렉션을 나눠 절대 다른 테넌트의 문서가 검색되지 않게 격리합니다.
- 벡터 + 페이로드(Payload) — 벡터와 함께 문서 id·태그·날짜 같은 메타데이터를 붙여 저장합니다.
- 거리 함수(Distance) — 두 벡터의 가까움을 재는 기준. 코사인 유사도(cosine similarity)를 기본으로 씁니다.
- Upsert(삽입·갱신) — 문서를 청킹·임베딩해 upsert로 넣습니다. 문서가 바뀌면 전체가 아니라 바뀐 부분만 다시 넣어요.
- 하이브리드 검색 — 의미(조밀) 벡터와 키워드(희소) 벡터를 함께 두고,
prefetch+ RRF로 두 검색 결과를 합치는 하이브리드 검색을 지원합니다. (검색 챕터) - 메타데이터 필터링 — 벡터 계산 전에 페이로드 필터(문서 종류·날짜)로 검색 범위를 미리 좁혀 비용을 줄입니다.
- 별칭(Alias) 롤백 — 컬렉션에 별칭을 붙여, 새 버전 배포 후 문제가 생기면 이전 컬렉션으로 즉시 복구할 수 있습니다(로드맵).
임베딩 모델과 차원¶
- text-embedding-3-small 🔵 적용 — OpenAI 임베딩(1536차원). 컬렉션 생성 시 벡터 차원과 거리 함수를 이 모델에 맞춰 정합니다.
- KURE-v1 🟡 로드맵 — 고려대 한국어 특화 임베딩. 한국어 문서가 많은 테넌트에 적용 검토 중입니다.
- BGE-M3 🟡 로드맵 — BAAI 다국어 임베딩. 긴 문맥(최대 8192 토큰)과 조밀·어휘·멀티벡터 모드를 한 모델로 제공해 하이브리드 후보로 봅니다.
사용 사례 / 실제 적용¶
- 멀티테넌트 격리 — 컬렉션 단위로 테넌트를 나눠, 검색 시 해당 컬렉션으로만 묶습니다.
- Notion 문서 벡터화 — 노션 페이지 조각을 임베딩해 upsert하고, 수정된 섹션만 다시 임베딩합니다.
- 하이브리드 검색 — 키워드 매칭과 의미 검색을 함께 쓰고 RRF로 순위를 합칩니다.
- 벡터 마이그레이션 — 임베딩 모델 버전이 바뀌면 벡터 차원이 달라질 수 있어, 새 컬렉션에 다시 넣고 별칭으로 전환하는 절차를 둡니다.
Qdrant 하위 챕터¶
- 컬렉션과 벡터 — 컬렉션 단위, 거리 척도, 멀티테넌트 구성
- 페이로드와 필터링 — 메타데이터 저장과 검색 범위 좁히기
- 검색 쿼리와 스코어링 — Query API, 거리 척도, 쿼리 플래닝
더 알아보기¶
- 공식 문서 (1차): Qdrant Documentation, Qdrant 벡터 개념, Qdrant 하이브리드 쿼리
- 큐레이션/블로그 (2차): Qdrant 블로그, Qdrant 하이브리드 검색 가이드