Skip to content

Qdrant 컬렉션과 벡터 (Collections)

Qdrant에 벡터를 넣기 전에 가장 먼저 만나는 단위가 컬렉션(Collection) 이에요. 컬렉션은 "이름 붙은 점(point)들의 묶음"인데, 여기서 점 하나는 벡터에 페이로드(메타데이터)를 붙인 레코드를 뜻합니다. 검색은 이 컬렉션 단위로 이뤄지고, 컬렉션끼리는 서로 섞이지 않게 구분돼요. 이 페이지는 소스 문서 Qdrant Collections 를 바탕으로 설명해요.

개요

문서를 벡터화해서 저장하는 일은 곧 "어느 컬렉션에, 몇 차원 벡터로, 어떤 거리 척도로 넣을까"를 정하는 일이에요. 같은 컬렉션 안의 모든 벡터는 차원(dimensionality)과 거리 척도(metric)가 같아야 합니다. 그래야 질문 벡터와 "얼마나 가까운가"를 한 가지 기준으로 비교할 수 있거든요. 이 두 값은 임베딩 모델이 출력하는 벡터의 성질과 맞춰야 해요.

핵심 개념

컬렉션과 점

컬렉션은 "검색할 수 있는 점들의 집합"으로, 각 점은 벡터 + 페이로드로 구성돼요. 같은 컬렉션 안 벡터는 차원과 거리 척도가 동일해야 합니다.

거리 척도(Distance Metric)

두 벡터의 가까움을 재는 기준으로, 임베딩 모델의 학습 방식에 맞춰 선택해요. Qdrant가 지원하는 대표적인 척도는 이렇게 네 가지예요.

  • Dot — 내적(Dot product)
  • Cosine — 코사인 유사도
  • Euclid — 유클리드 거리
  • Manhattan — 맨해튼 거리

우리는 OpenAI 임베딩과 잘 맞는 코사인 유사도(Cosine) 를 기본으로 씁니다.

컬렉션 생성

컬렉션은 벡터의 크기(size)와 거리 척도(distance)를 지정해 만듭니다.

PUT /collections/{collection_name}
{
  "vectors": {
    "size": 1536,
    "distance": "Cosine"
  }
}

이 밖에도 성능·인덱스를 다루는 선택 옵션(hnsw_config, shard_number, quantization_config 등)을 함께 지정할 수 있고, 이후 언제든 대응하는 요청으로 바꿀 수 있어요. Qdrant는 벡터를 기본적으로 디스크에 저장하고, 메모리 계층(memory tier) 설정으로 일부를 메모리에도 올릴 수 있습니다.

네임드 벡터(Named Vectors)

하나의 점에 여러 벡터를 두고 싶으면 이름을 붙여 구분해요. 예를 들어 이미지 벡터와 텍스트 벡터를 각각 다른 차원·거리 대로 한 레코드에 저장하는 것도 가능합니다.

{
  "vectors": {
    "image": { "size": 4, "distance": "Dot" },
    "text":  { "size": 8, "distance": "Cosine" }
  }
}

멀티테넌트 구성

컬렉션을 몇 개나 만들지는 멀티테넌시 설계와 직결돼요. Qdrant는 대부분의 경우 한 컬렉션에 두고 페이로드 기반 파티셔닝으로 테넌트를 구분하는 걸 권장합니다(리소스 부담이 적어요). 사용자가 적고 완전한 격리가 필요할 때만 컬렉션을 여럿 만드는 편이 유연해요.

실제 적용 (데이터스케쳐스)

  • 테넌트별 컬렉션 — 회사·팀마다 컬렉션을 나눠, 검색 시 해당 컬렉션으로만 묶어 다른 테넌트 문서가 절대 섞이지 않게 합니다.
  • text-embedding-3-small 기준 — 벡터 차원을 1536, 거리 척도를 코사인으로 맞춰 컬렉션을 생성합니다.
  • 하이브리드 검색 기반 — 조밀 벡터와 희소 벡터를 한 컬렉션에 함께 두고 prefetch + RRF로 합치는 하이브리드 쿼리를 씁니다.
  • 벡터 마이그레이션 — 임베딩 모델이 바뀌어 차원이 달라지면 새 컬렉션을 만들고 별칭(alias)으로 전환합니다.

더 알아보기