Spring AI와 Milvus: Milvus를 Spring AI 벡터 저장소로 사용하기
소개
오늘날 대량의 데이터를 빠르게 처리하고 분석하는 능력은 애플리케이션의 기능을 크게 향상시킬 수 있습니다. 이는 인공지능과 머신러닝 같은 분야에서 특히 그렇습니다. 이러한 분야에서는 데이터가 고차원 벡터 형태로 존재하는 경우가 많습니다. Milvus와 같은 벡터 데이터베이스를 Spring AI 애플리케이션에 통합하면 효율적인 데이터 처리 및 검색 기능을 제공하여 이러한 요구를 충족할 수 있습니다. 이 통합을 통해 개발자는 복잡한 쿼리와 유사도 검색을 빠르고 정확하게 수행할 수 있으며, 더 나은 사용자 경험과 더 지능적인 애플리케이션 동작을 구현할 수 있습니다.
Milvus는 벡터 데이터를 관리할 때 확장성과 성능에 맞춰 설계된 강력한 기능으로 벡터 데이터베이스 분야에서 두각을 나타냅니다. 오픈 소스 플랫폼으로서 고급 애플리케이션 검색 기능을 활용하려는 기업과 개발자에게 유연하고 비용 효율적인 솔루션을 제공합니다. Milvus는 다양한 인덱싱 전략을 지원하며, 이는 대규모 비정형 문서 전반에서 검색 성능을 최적화하는 데 매우 중요합니다. 따라서 이미지 및 동영상 인식, 텍스트 분석, 그리고 유사도 검색이 중요한 모든 도메인을 포함하는 애플리케이션에 탁월한 선택입니다.
Milvus를 Spring Boot 애플리케이션과 통합하기 위한 설정 및 구성
Docker Compose를 사용한 Milvus 설정
Spring Boot 애플리케이션에서 Milvus를 Spring AI와 통합하려면 Docker Compose를 사용하여 Milvus 인스턴스를 설정하는 것부터 시작합니다. 이 방법은 간단하며 개발 환경에 적합합니다.
절차:
Docker Compose YAML 파일 다운로드: 다음 명령을 사용하여 특정 버전의 Milvus Docker Compose 파일을 다운로드합니다:
wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
Milvus 인스턴스 시작: docker-compose.yml 파일이 있는 디렉터리로 이동한 다음 Milvus 인스턴스를 시작합니다:
docker-compose up -d
더 나은 성능과 호환성을 위해 V1보다 권장되는 Docker Compose V2가 설치되어 있는지 확인하세요. 명령 실행이 완료되면 Docker Desktop(Windows)에서 VectorDB의 존재 여부를 확인할 수 있습니다:
linux의 경우 다음 명령을 실행할 수 있습니다:
docker ps
2. Spring Boot 프로젝트 생성
프로젝트 생성: Spring Initializr를 사용하여 새 Spring Boot 프로젝트를 생성합니다. 빌드 도구로 Maven 또는 Gradle(여기서는 Gradle 사용)을 선택하고 'Spring Web' 및 'Spring Data JPA'와 같은 의존성을 추가합니다.
프로젝트 환경 설정: 다운로드 후 zip 파일의 압축을 풀고 선호하는 IDE에서 프로젝트를 엽니다.
Spring Initializr
3. Milvus 및 OpenAI 통합을 위한 의존성 추가
Maven 또는 Gradle 사용 여부에 따라 Milvus 및 OpenAI를 Spring AI와 통합하는 데 필요한 의존성을 추가합니다.
Gradle의 경우 (build.gradle):
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
maven { url 'https://repo.spring.io/snapshot' }
}
dependencies {
implementation 'org.springframework.ai:spring-ai-milvus-store-spring-boot-starter:0.8.1-SNAPSHOT'
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
// Other dependencies
}
Spring AI와 Milvus 연결: 자세한 구성 및 사용법
Spring AI의 맥락에서 Milvus는 벡터 데이터를 저장하고 관리하기 위한 백엔드 역할을 하며, 벡터 유사도를 기반으로 유사한 항목을 빠르고 확장 가능하게 검색할 수 있도록 합니다. 다음은 이 둘을 함께 연결하는 방법입니다.
1. Spring Boot에서 Milvus 및 OpenAI 구성
Milvus에 대한 연결을 구성하고 OpenAI 임베딩을 설정하려면 application.properties 또는 application.yml에 다음 속성을 추가하세요.
application.properties의 경우:
spring.application.name=demo
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
spring.ai.vectorstore.milvus.client.host=localhost
spring.ai.vectorstore.milvus.client.port=19530
spring.ai.vectorstore.milvus.client.username=root
spring.ai.vectorstore.milvus.client.password=milvus
spring.ai.vectorstore.milvus.databaseName=default
spring.ai.vectorstore.milvus.collectionName=vector_store_1
spring.ai.vectorstore.milvus.embeddingDimension=1536
spring.ai.vectorstore.milvus.indexType=IVF_FLAT
spring.ai.vectorstore.milvus.metricType=COSINE
spring.ai.openai.api-key=YOUR_API_KEY
spring.ai.openai.embedding.options.model=text-embedding-ada-002
YOUR_API_KEY를 OpenAI에서 얻은 실제 API 키로 바꾸세요. 이 설정은 Spring AI와 OpenAI를 임베딩에 사용하여 Milvus를 Spring Boot 애플리케이션과 통합하기 위한 기본 구성을 제공합니다. 특정 요구 사항과 환경에 따라 구성 및 의존성을 필요에 맞게 조정하세요.
2. 서비스에서 VectorStore 자동 주입하기
Spring 서비스에서 Milvus 데이터베이스와 상호 작용하려면 VectorStore를 자동 주입하세요. 다음과 같이 수행할 수 있습니다.
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.document.Document;
import org.springframework.ai.vectorstore.SearchRequest;
import java.util.List;
import java.util.Map;
@Service
public class VectorStoreService {
@Autowired
private VectorStore vectorStore;
}
3. 임베딩 생성을 위한 EmbeddingClient 사용
Milvus에 저장할 수 있는 임베딩을 생성하려면 Spring AI에서 제공하는 EmbeddingClient를 사용하세요. 다음과 같이 수행할 수 있습니다.
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.ai.embedding.EmbeddingClient;
import org.springframework.ai.embedding.EmbeddingResponse;
import java.util.List;
import java.util.Map;
@RestController
public class EmbeddingController {
private final EmbeddingClient embeddingClient;
@Autowired
public EmbeddingController(EmbeddingClient embeddingClient) {
this.embeddingClient = embeddingClient;
}
}
Java 코드 예제: 벡터 저장소 구현
벡터 데이터 저장 및 검색
Spring AI 애플리케이션 내에서 Milvus를 벡터 저장소로 효과적으로 활용하려면 개발자는 벡터 데이터를 저장, 검색, 관리하는 방법을 이해해야 합니다. 아래는 이러한 기능을 보여주는 Java 코드 예제입니다.
Milvus에 문서 추가:
@Service
public class VectorStoreService {
@Autowired
private VectorStore vectorStore;
public void addDocuments() {
List<Document> documents = List.of(
new Document("Exploring the depths of AI with Spring", Map.of("category", "AI")),
new Document("Navigating through large datasets efficiently"),
new Document("Harnessing the power of vector search", Map.of("importance", "high"))
);
vectorStore.add(documents);
}
}
유사한 문서 검색:
public List<Document> searchSimilarDocuments() {
return vectorStore.similaritySearch(
SearchRequest.query("Efficient data processing and retrieval")
.withTopK(3)
.withSimilarityThreshold(0.1)
);
}
OpenAI로 임베딩 생성:
임베딩은 벡터 기반 검색에 매우 중요합니다. Spring AI 애플리케이션 내에서 OpenAI의 서비스를 사용하여 임베딩을 생성하는 방법은 다음과 같습니다:
@RestController
public class EmbeddingController {
private final EmbeddingClient embeddingClient;
@Autowired
public EmbeddingController(EmbeddingClient embeddingClient) {
this.embeddingClient = embeddingClient;
}
@GetMapping("/ai/embedding")
public Map<String, Object> embed(@RequestParam(value = "message", defaultValue = "What's the latest in AI?") String message) {
EmbeddingResponse embeddingResponse = this.embeddingClient.embedForResponse(List.of(message));
return Map.of("embedding", embeddingResponse);
}
}
고급 구성 및 사용자 지정
Milvus는 벡터 저장 및 검색을 최적화하기 위한 여러 고급 설정을 제공합니다. 여기에는 사용자 지정 인덱싱 전략과 성능 튜닝 옵션이 포함됩니다.
Milvus의 고급 구성 예시:
spring.ai.vectorstore.milvus.indexType=HNSW
spring.ai.vectorstore.milvus.metricType=EUCLIDEAN
이러한 속성은 application.properties 파일에서 설정하여 Hierarchical Navigable Small World (HNSW)와 같은 다양한 인덱싱 전략과 거리 계산을 위한 EUCLIDEAN 같은 다양한 메트릭 유형을 사용할 수 있습니다.
Spring AI에서 Milvus의 사용 사례 및 실용적 애플리케이션
추천 시스템:
Milvus는 사용자 및 아이템 임베딩을 저장하고 유사도 검색을 수행함으로써 다양한 산업 전반의 추천 시스템을 지원합니다. 이 접근 방식은 영화, 음악, 제품 및 콘텐츠 피드에 대한 개인화 추천에서 특히 효과적입니다. 예를 들어, 영화 추천 시스템은 Milvus를 사용하여 사용자 선호도를 영화 벡터와 의미적으로 매칭함으로써, 명시적인 사용자 쿼리 없이도 개인의 취향에 맞는 영화를 제안할 수 있습니다. 자세한 내용은 여기를 참조하세요.
콘텐츠 검색 엔진: 대규모 비정형 텍스트 콘텐츠 데이터셋을 다루는 애플리케이션의 경우, Milvus는 텍스트를 벡터 형태로 변환하고 다양한 방법론을 통해 효율적인 유사도 검색을 수행할 수 있습니다. 이 기능은 키워드 매칭을 넘어 사용자 쿼리의 의미적 맥락을 이해하는 정교한 검색 엔진을 개발하는 데 매우 중요하며, 이를 통해 검색 결과의 관련성과 정확성을 향상시킵니다.
과제와 해결책
- 데이터 확장성
방대한 양의 벡터 데이터를 처리하는 것은 어려울 수 있습니다. Milvus는 파티셔닝 및 샤딩과 같은 기능을 통해 이를 해결하며, 이러한 기능은 데이터를 여러 노드에 분산하여 대규모 데이터셋을 관리하는 데 도움을 주고, 성능과 확장성을 향상시킵니다.
- 쿼리 지연 시간
인덱스 매개변수를 최적화하고 Milvus 클러스터를 효과적으로 확장하면 쿼리 지연 시간을 줄일 수 있습니다. Milvus는 HNSW, IVF, Product Quantization과 같은 다양한 인덱스 유형을 지원하며, 속도와 정확도의 균형을 맞추기 위해 특정 사용 사례에 맞게 조정할 수 있습니다.
고급 사용 사례
이미지 및 비디오 인식
Milvus는 비디오 중복 제거 시스템 및 이미지 유사도 검색과 같은 고처리량 이미지 및 비디오 분석 애플리케이션에 사용됩니다. 예를 들어, Shopee와 같은 플랫폼은 Milvus를 활용하여 실시간 비디오 회수 및 저작권 매칭 검색 기능을 강화합니다.
AI 기반 챗봇 및 고객 지원
Milvus를 AI 모델과 통합하면 RAG 기반 챗봇을 개발하여 사용자 쿼리를 높은 관련성과 정확도로 이해하고 응답할 수 있습니다. PayPal 및 Farfetch와 같은 기업은 Milvus를 사용하여 고객 지원 및 개인화된 쇼핑 경험을 위한 대화형 AI를 구동합니다.
결론
Milvus는 벡터 데이터의 효율적인 관리와 검색을 제공함으로써 Spring AI 애플리케이션의 기능을 크게 향상시킵니다. 전자상거래와 엔터테인먼트부터 헬스케어와 금융 서비스에 이르기까지 다양한 도메인에서의 다재다능함은 더 지능적이고, 반응성이 뛰어나며, 개인화된 애플리케이션 기능을 가능하게 함으로써 산업을 변화시킬 잠재력을 보여줍니다. 개발자들은 애플리케이션을 최적화하고 AI 기반 솔루션의 새로운 가능성을 탐색하기 위해 Milvus의 고급 기능과 유연한 구성 옵션을 활용할 것을 권장합니다.
계속 읽기

Data Deduplication at Trillion Scale: How to Solve the Biggest Bottleneck of LLM Training
Explore how MinHash LSH and Milvus handle data deduplication at the trillion-scale level, solving key bottlenecks in LLM training for improved AI model performance.

Introducing Zilliz MCP Server: Natural Language Access to Your Vector Database
Developers can easily manage and query vector databases with natural language via Zilliz MCP Server in AI-native environments.

Zilliz Cloud Introduces Advanced BYOC-I Solution for Ultimate Enterprise Data Sovereignty
Explore Zilliz Cloud BYOC-I, the solution that balances AI innovation with data control, enabling secure deployments in finance, healthcare, and education sectors.


