저는 지난 3년간 기업용 검색 증강 생성(RAG) 시스템을 구축하며 벡터 데이터베이스의 한계를 여러 차례 체감했습니다. 수백만 건의 문서를 실시간으로 검색해야 하는 환경에서 단일 노드 Milvus의 한계는 저에게 비용과 응답 속도 모두에서 민감한 문제였습니다. 이번 글에서는 Milvus 분산 클러스터를 활용한 엔터프라이즈 RAG 시스템 구축 방법을 실제 프로젝트 경험을 바탕으로 설명드리겠습니다. 특히 HolySheep AI 게이트웨이를 통해 AI 모델 호출 비용을 최적화하며 시스템 전체의 비용 효율성을 높이는 전략도 함께 다룹니다.

왜 분산 Milvus인가?

단일 노드 Milvus는 약 1,000만 개의 벡터를 지원하지만, 엔터프라이즈 환경에서는 수억 개의 벡터를 다루는 경우가 흔합니다. 제가 참여한 한 금융 프로젝트에서는 5억 개 이상의 임베딩을 실시간 검색해야 했는데, 분산 클러스터 없이 이를 해결하는 것은 불가능에 가까웠습니다.

Milvus 분산 아키텍처 핵심 구성요소

분산 Milvus 클러스터 설치

실제 프로덕션 환경에서는 Kubernetes 기반 Helm 차트로 배포하는 것이 관리와 스케일링 측면에서 가장 효율적입니다. 저의 경우 AWS EKS 환경에서 3개의 가용 영역에 걸쳐 클러스터를 구축했으며, 이를 통해 가용성과 성능 모두에서 안정적인 결과를 얻었습니다.

사전 요구사항

# Milvus Operator 설치
kubectl create namespace milvus-operator
helm repo add milvus-operator https://milvus-operator-charts.storage.googleapis.com
helm repo update
helm install milvus-operator milvus-operator/milvus-operator -n milvus-operator --wait

네임스페이스 생성

kubectl create namespace milvus

S3 자격 증명 시크릿 생성

kubectl create secret generic my-s3-secret \ --from-literal=accessKey=YOUR_AWS_ACCESS_KEY \ --from-literal=secretKey=YOUR_AWS_SECRET_KEY \ -n milvus
# production-values.yaml
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
  name: milvus-cluster
  namespace: milvus
spec:
  mode: cluster
  dependencies:
    etcd:
      external:
        endpoints:
          - etcd-0.etcd.monitoring.svc:2379
          - etcd-1.etcd.monitoring.svc:2379
          - etcd-2.etcd.monitoring.svc:2379
    storage:
      type: S3
      s3:
        endpoint: s3.amazonaws.com
        bucketName: my-milvus-bucket
        secretName: my-s3-secret
        useSSL: true
        useIAM: false
  components:
    queryNode:
      replicas: 6
      resources:
        limits:
          cpu: "4"
          memory: 16Gi
        requests:
          cpu: "2"
          memory: 8Gi
    dataNode:
      replicas: 3
      resources:
        limits:
          cpu: "2"
          memory: 8Gi
    indexNode:
      replicas: 3
      resources:
        limits:
          cpu: "8"
          memory: 32Gi
    rootCoordinator:
      replicas: 2
    queryCoordinator:
      replicas: 1
    dataCoordinator:
      replicas: 1
  config:
    log:
      level: info
    queryNode:
      stats:
        publishInterval: 1000
    dataNode:
      segment:
        maxSize: 536870912  # 512MB
        sealProportion: 0.25
    common:
      retentionDuration: 432000  # 5 days
# Milvus 클러스터 배포
kubectl apply -f production-values.yaml -n milvus

배포 상태 확인

kubectl get milvus -n milvus kubectl get pods -n milvus -w

서비스 엔드포인트 확인

kubectl get svc -n milvus

포트 포워딩 (로컬 테스트용)

kubectl port-forward svc/milvus-cluster 19530:19530 -n milvus &

Python SDK로 분산 검색 구현

Milvus 클러스터가 배포되면 실제 RAG 파이프라인에 연결해야 합니다. 저는 HolySheep AI의 GPT-4.1 모델을 사용하여 문서 임베딩 생성 및 검색 결과를 재순위화하는 파이프라인을 구축했습니다. HolySheep의 단일 API 키로 여러 모델을 호출할 수 있어 코드 관리가 훨씬 간결해졌습니다.

# requirements.txt

milvus-pymilvus==4.4.0

openai==1.30.0

langchain==0.2.0

langchain-milvus==0.0.2

faiss-cpu (선택)

import os from openai import OpenAI from pymilvus import ( connections, Collection, CollectionSchema, FieldSchema, DataType, utility, Collectionomm )

HolySheep AI 설정 - 단일 API 키로 모든 모델 통합

HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY" HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1" client = OpenAI( api_key=HOLYSHEEP_API_KEY, base_url=HOLYSHEEP_BASE_URL )

Milvus 클러스터 연결

connections.connect( alias="default", host="milvus-cluster.milvus.svc.cluster.local", port="19530", user="root", password="Milvus123" ) def create_collection_if_not_exists(collection_name: str, dimension: int = 1536): """엔터프라이즈 RAG용 컬렉션 생성""" if utility.has_collection(collection_name): collection = Collection(collection_name) collection.load() return collection # 스키마 정의 - 메타데이터 포함 fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), FieldSchema(name="document_id", dtype=DataType