티스토리 뷰
🧠 Milvus란?
Milvus는 **벡터 데이터베이스(Vector DB)**로,
대규모 임베딩 데이터(문서, 이미지 등)를 저장하고 유사도 기반 검색을 빠르게 수행할 수 있는 오픈소스 DB입니다.
특징설명
| 특징 | 설명 |
| 제작사 | Zilliz (Faiss 만든 Facebook 출신들이 창업) |
| 성능 | 수억 개 벡터를 빠르게 검색 (GPU 지원 가능) |
| 사용 예 | RAG 시스템, 이미지 검색, 추천 시스템 등 |
| LLM 연동 | LangChain, LlamaIndex 등과 완벽 호환 |
✅ 1. Milvus 설치 방법
🔹 권장 설치 방식: Docker (로컬 테스트 & 개발용)
✅ 1-1. Docker 설치 (이미 되어 있다면 건너뛰세요)
✅ 1-2. Milvus Standalone 설치
| docker run -d --name milvus \ -p 19530:19530 \ -p 9091:9091 \ milvusdb/milvus:v2.3.0 |
포트설명
| 포트 | 설명 |
| 19530 | gRPC API |
| 9091 | HTTP REST API |
설치가 완료되면 Milvus가 백그라운드에서 실행됩니다.
🔍 Milvus 상태 확인
|
docker ps
# 또는 Python에서 연결 확인: from pymilvus import connections connections.connect(host='localhost', port='19530') print("Milvus 연결 성공") # 파이썬 클라이 언트 설치 pip install pymilvus |
✅ 2. Python 클라이언트 설치
pymilvus는 Milvus와 통신할 수 있는 Python SDK입니다.
✅ 3. Milvus 사용법 (기본)
🔹 3-1. 벡터 컬렉션 생성
| from pymilvus import connections, Collection, CollectionSchema, FieldSchema, DataType connections.connect(host='localhost', port='19530') # 필드 정의 (벡터 + ID + 메타데이터) fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128) ] schema = CollectionSchema(fields, description="예제 컬렉션") collection = Collection(name="example_collection", schema=schema) |
🔹 3-2. 벡터 데이터 추가
| import numpy as np data = [ [np.random.rand(128).astype("float32") for _ in range(10)] ] collection.insert(data) collection.load() # 검색 전에 반드시 load() |
🔹 3-3. 검색 (유사 벡터 찾기)
| query_vector = [[float(i) for i in np.random.rand(128)]] results = collection.search( data=query_vector, anns_field="embedding", param={"metric_type": "L2", "params": {"nprobe": 10}}, limit=3 ) for hit in results[0]: print(f"Score: {hit.distance}, ID: {hit.id}") |
✅ 4. LangChain과 Milvus 연동 (RAG 구축)
| pip install langchain sentence-transformers |
🔹 4-1. 임베딩 모델 준비
| from langchain.embeddings import HuggingFaceEmbeddings embedding = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") |
🔹 4-2. Milvus 벡터스토어에 문서 저장
| from langchain.vectorstores import Milvus texts = [ "서울은 대한민국의 수도입니다.", "OpenAI는 인공지능 연구 회사입니다.", "GPT-4는 대형 언어 모델입니다." ] db = Milvus.from_texts( texts=texts, embedding=embedding, collection_name="langchain_docs", connection_args={"host": "localhost", "port": "19530"} ) |
🔹 4-3. 검색 + GPT 응답 생성
| from langchain.vectorstores import Milvus texts = [ "서울은 대한민국의 수도입니다.", "OpenAI는 인공지능 연구 회사입니다.", "GPT-4는 대형 언어 모델입니다." ] db = Milvus.from_texts( texts=texts, embedding=embedding, collection_name="langchain_docs", connection_args={"host": "localhost", "port": "19530"} ) |
✅ 5. Milvus 장점과 주의사항
항목내용
| 항목 | 내용 |
| ✅ 장점 | 초고속 검색, GPU 지원, 대용량 처리 |
| ⚠️ 단점 | 설치 복잡, 설정 많음 (인덱스, 파라미터 등) |
| ✔️ 추천 | 10,000개 이상의 벡터 또는 서비스 운영 목적일 때 |
| ❌ 피해야 할 경우 | 단순 POC / 소규모 테스트 → Chroma, FAISS 추천 |
✅ 6. 실전 구축을 위한 설정 팁
| 요소 | 추천설정 |
| metric_type | "L2" 또는 "IP" |
| index_type | IVF_FLAT, IVF_SQ8, HNSW (대용량에 적합) |
| nprobe | 10~64 범위 조절 |
| 벡터 차원 | 384~1024 (임베딩 모델에 따라 다름) |
| 검색 속도 | GPU 사용 시 훨씬 빠름 (Milvus GPU 설치 필요) |
✅ 마무리 : Milvus는 RAG 시스템, 벡터 검색, 추천 시스템의 최적의 벡터DB 중 하나입니다.
추가적인 사항 : Milvus + FastAPI 기반 RAG 서버 만든 내용 기록해서 블로그에 적어둘것!!
Docker Compose 템플릿 만들어서 테스트 기록해둘것!
또는 Supabase + Milvus 통합 버전 생성해서 첨부로 티스토리 만들어 기록해둘것!
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- RAG
- CVE 취약점 점검
- 5.4.0.1072
- Chroma
- 쿠버네티스
- 코로나19
- VectorStore
- Oracle
- kiwipiepy
- poetry
- RangChain
- llm
- open ai
- n8n
- AWS
- Weaviate
- chunking
- Ai
- embedding
- K8s
- 테라폼
- MSA
- 오라클
- KoSimCSE
- llama
- Qdrant
- 임베딩
- faiss
- 버쳐박스
- MCP
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
글 보관함
