Milvus
밀버스
오픈소스 벡터 데이터베이스. 대규모 벡터 검색에 특화. RAG, 시맨틱 검색, 추천 시스템의 핵심 인프라로 40,000+ GitHub 스타 달성.
밀버스
오픈소스 벡터 데이터베이스. 대규모 벡터 검색에 특화. RAG, 시맨틱 검색, 추천 시스템의 핵심 인프라로 40,000+ GitHub 스타 달성.
Milvus는 대규모 벡터 유사도 검색을 위해 설계된 오픈소스 벡터 데이터베이스입니다. Zilliz에서 개발했으며, 수십억 개의 벡터를 밀리초 단위로 검색할 수 있어 RAG(Retrieval-Augmented Generation), 시맨틱 검색, 추천 시스템, 이미지/영상 검색의 핵심 인프라로 사용됩니다.
2019년 오픈소스로 공개된 이후, 2025년 현재 40,000개 이상의 GitHub 스타를 달성하며 가장 인기 있는 벡터 DB가 되었습니다. LF AI & Data Foundation의 졸업 프로젝트로, 전 세계 10,000개 이상의 조직에서 프로덕션에 사용 중입니다.
Milvus의 핵심 강점은 분산 아키텍처로 컴퓨팅과 스토리지를 분리하여 독립적으로 확장할 수 있다는 점입니다. HNSW, IVF, DiskANN 등 다양한 인덱스 타입을 지원하며, GPU 가속(NVIDIA CAGRA), 양자화(RaBitQ), mmap 등으로 비용 대비 성능을 극대화합니다. 2.6 버전에서는 내장 임베딩 기능으로 OpenAI, Bedrock, Vertex AI와 직접 연동이 가능해졌습니다.
실무에서는 LLM 기반 챗봇의 지식 베이스, 전자상거래 추천, 이미지 검색 엔진, 문서 유사도 분석 등에 활용됩니다. Elasticsearch 대비 3-4배 높은 처리량을 제공하면서 동일한 재현율을 유지하며, 하이브리드 검색(벡터 + 키워드)도 지원합니다.
| 스펙 | Milvus 2.6 |
|---|---|
| 최대 벡터 수 | 수십억 개 |
| 지원 인덱스 | HNSW, IVF, FLAT, SCANN, DiskANN + GPU(CAGRA) |
| 메모리 최적화 | RaBitQ 1-bit 양자화 (72% 메모리 절감) |
| 하이브리드 검색 | 벡터 + BM25 전문 검색 |
| 내장 임베딩 | OpenAI, Bedrock, Vertex AI, HuggingFace 연동 |
# pip install pymilvus
from pymilvus import MilvusClient, DataType
# 1. Milvus 연결 (Milvus Lite - 로컬 개발용)
client = MilvusClient("./milvus_demo.db")
# 2. 컬렉션 생성 (스키마 정의)
# 방법 1: 자동 스키마 (간편)
client.create_collection(
collection_name="documents",
dimension=1536, # OpenAI embedding 차원
metric_type="COSINE" # 유사도 메트릭: COSINE, L2, IP
)
# 방법 2: 상세 스키마 (프로덕션 권장)
from pymilvus import CollectionSchema, FieldSchema
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="title", dtype=DataType.VARCHAR, max_length=256),
FieldSchema(name="content", dtype=DataType.VARCHAR, max_length=65535),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=1536),
]
schema = CollectionSchema(fields, description="문서 검색용 컬렉션")
# 3. 데이터 삽입
import openai
def get_embedding(text):
"""OpenAI 임베딩 생성"""
response = openai.embeddings.create(
model="text-embedding-3-small",
input=text
)
return response.data[0].embedding
documents = [
{"title": "RAG 소개", "content": "RAG는 검색 증강 생성 기법입니다..."},
{"title": "벡터 DB란", "content": "벡터 데이터베이스는 임베딩을 저장..."},
{"title": "Milvus 가이드", "content": "Milvus는 대규모 벡터 검색에 특화..."},
]
data = []
for doc in documents:
data.append({
"title": doc["title"],
"content": doc["content"],
"embedding": get_embedding(doc["content"])
})
client.insert(collection_name="documents", data=data)
print(f"✅ {len(data)}개 문서 삽입 완료")
# 4. 벡터 유사도 검색
query = "벡터 데이터베이스의 활용 방법"
query_vector = get_embedding(query)
results = client.search(
collection_name="documents",
data=[query_vector],
limit=3, # Top-K
output_fields=["title", "content"],
search_params={"metric_type": "COSINE", "params": {"nprobe": 10}}
)
print("\n🔍 검색 결과:")
for hits in results:
for hit in hits:
print(f"- [{hit['distance']:.4f}] {hit['entity']['title']}")
# 5. 하이브리드 검색 (벡터 + 필터)
results = client.search(
collection_name="documents",
data=[query_vector],
filter='title like "%Milvus%"', # 메타데이터 필터
limit=3,
output_fields=["title", "content"]
)
# 6. 인덱스 생성 (대규모 데이터용)
index_params = {
"index_type": "HNSW", # 고성능 그래프 기반 인덱스
"metric_type": "COSINE",
"params": {"M": 16, "efConstruction": 256}
}
client.create_index(
collection_name="documents",
field_name="embedding",
index_params=index_params
)
print("✅ HNSW 인덱스 생성 완료")
2025년 1월 기준 Milvus 옵션별 비교입니다.
| 옵션 | 가격 | 특징 |
|---|---|---|
| Milvus 오픈소스 | 무료 (Apache 2.0) | 셀프호스팅, 전체 기능 |
| Milvus Lite | 무료 | pip install, 로컬 개발용 |
| Zilliz Cloud Free | 무료 | 1개 클러스터, 1M 벡터 |
| Zilliz Cloud Standard | $0.07 ~ $0.13 / CU-hour | 관리형 서비스 |
| Zilliz Cloud Enterprise | 문의 필요 | SLA, 전담 지원 |
| 성능 지표 | 수치 | 조건 |
|---|---|---|
| 벡터 처리 속도 | ~5,000 QPS | 100만 벡터, HNSW |
| 검색 지연시간 | <10ms (p99) | top-10 검색 |
| 메모리 절감 (RaBitQ) | 72% | 1-bit 양자화 적용 시 |
"RAG 파이프라인 벡터 DB로 Milvus 쓰면 좋을 것 같아요. 문서 500만 개 정도인데 HNSW 인덱스로 10ms 이내 검색 가능하고, 2.6 버전부터는 OpenAI 임베딩 연동이 내장되어 있어서 파이프라인이 단순해집니다."
"Milvus는 분산 벡터 DB로 컴퓨팅과 스토리지가 분리되어 독립 확장이 가능합니다. HNSW, IVF 등 다양한 인덱스를 지원하고, RaBitQ 양자화로 메모리를 70% 이상 줄일 수 있어요. Pinecone 같은 관리형 대비 비용이 저렴하고 온프레미스 배포도 가능합니다."
"pgvector는 소규모에 좋고, Pinecone은 관리형이라 편하지만 비용이 높아요. Milvus는 대규모 + 온프레미스 필요할 때 베스트 초이스죠. Zilliz Cloud 쓰면 관리형 Milvus도 가능하고요."
수백만 벡터에서 인덱스 없이 brute-force 검색하면 수 초 이상 걸립니다. HNSW나 IVF 인덱스를 반드시 생성하세요.
컬렉션 생성 시 dimension과 실제 임베딩 차원이 다르면 삽입이 실패합니다. OpenAI는 1536, Cohere는 1024 등 모델별 차원을 확인하세요.
개발 시 Milvus Lite(파일 기반)로 빠르게 테스트하고, 프로덕션은 Docker Compose나 Kubernetes로 분산 배포하세요. Zilliz Cloud로 관리 부담을 줄일 수도 있습니다.