1. 통합 방식 비교 분석
| 방식 | 장점 | 단점 | 적합한 사용 시나리오 |
| Spring AI MCP Boot Starter |
Spring Boot 네이티브 지원으로 스프링 생태계와 원활한 통합; 표준화된 설정과 자동 도구 등록 제공 |
Spring Boot 버전 의존성 (예: 3.x), 유연성 낮음; 디버깅 도구 부족 |
엔터프라이즈급 Java 애플리케이션, 빠른 MCP 통합 필요 시 |
| LangChain4j MCP 통합 |
다양한 전송 프로토콜 지원 (HTTP/SSE/stdio), 유연한 MCP 서비스 어댑터; 다양한 디버깅 도구 (트래픽 로그 등) |
전송 层과 도구 제공자 수동 설정 필요; 학습 곡선 높음 |
복잡한 도구 체인 또는 비 Spring 환경 |
2. Spring AI MCP Boot Starter 통합 상세 가이드
2.1 핵심 의존성
<!-- WebFlux 모드 (生产 환경 권장) -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-webflux-spring-boot-starter</artifactId>
<version>1.0.0-M6</version>
</dependency>
<!-- 클라이언트 의존성 (선택) -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-client-webflux-spring-boot-starter</artifactId>
<version>1.0.0-M6</version>
</dependency>
2.2 설정 예시
# application.yml
spring:
ai:
mcp:
server:
name: weather-service
version: 1.0.0
sse:
enabled: true
endpoint: /sse # SSE 엔드포인트
client:
sse:
connections:
remote-service:
url: http://external-mcp-service:8080
sse-endpoint: /sse
2.3 도구 등록 및 디버깅
- 자동 등록:
@Tool 애너테이션으로 메서드를 노출하면 Spring AI가 자동으로 MCP 도구로 등록합니다.
- 디버깅 방법:
3. LangChain4j MCP 통합 상세 가이드
3.1 핵심 의존성
<!-- LangChain4j MCP 핵심 라이브러리 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-mcp</artifactId>
<version>1.1.0-beta7</version>
</dependency>
<!-- HTTP 전송 지원 (SSE 필요 시) -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-mcp-http</artifactId>
<version>1.1.0-beta7</version>
</dependency>
3.2 설정 예시
// 1. HTTP 전송 프로토콜 생성 (SSE 지원)
McpTransport httpTransport = new HttpMcpTransport.Builder()
.sseUrl("http://localhost:8080/sse")
.logRequests(true) // 요청 로깅 활성화
.logResponses(true) // 응답 로깅 활성화
.build();
// 2. MCP 클라이언트 생성
McpClient mcpClient = new DefaultMcpClient.Builder()
.transport(httpTransport)
.build();
// 3. 도구 제공자 생성 (클라이언트 바인딩)
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(mcpClient))
.build();
// 4. AI 서비스 빌드 및 호출
AiService aiService = AiServices.builder(ToolsAiService.class)
.chatLanguageModel(chatModel) # 모델预先 설정 필요 (예: OpenAI GPT-4o-mini)
.toolProvider(toolProvider)
.build();
String response = aiService.chat("서울 날씨는 어때요?");
3.3 디버깅 기법
- 트래픽 로그:
logRequests와 logResponses로 상세 로그 활성화
- 프로토콜 디버깅:
4. 방식 비교 및 추천
| 시나리오 | 권장 방식 | 이유 |
| 빠른 통합 |
Spring AI MCP Boot Starter |
Spring Boot 네이티브 지원, 설정 간단, 엔터프라이즈 애플리케이션에 적합 |
| 복잡한 도구 체인 |
LangChain4j MCP |
다중 프로토콜 및 사용자 정의 전송 지원, 다양한 MCP 서비스 유연한 어댑터 가능 |
| 높은 디버깅 필요 |
LangChain4j MCP |
상세 트래픽 로그 및 프로토콜 디버깅 도구 제공, 문제 해결 용이 |
5. 전체 예시: Spring AI + LangChain4j 하이브리드 통합
5.1 서버측 (Spring AI MCP Boot Starter)
@Service
public class WeatherService {
@Tool(description = "실시간 날씨 조회")
public String fetchWeather(String city) {
return String.format("현재 기온: 25℃, 날씨: 맑음 (도시: %s)", city);
}
}
5.2 클라이언트측 (LangChain4j MCP)
// Spring AI MCP 클라이언트 설정 (LangChain4j를 통해 호출)
McpTransport httpTransport = new HttpMcpTransport.Builder()
.sseUrl("http://localhost:8080/sse")
.build();
McpClient mcpClient = new DefaultMcpClient.Builder()
.transport(httpTransport)
.build();
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(mcpClient))
.build();
AiService aiService = AiServices.builder(ToolsAiService.class)
.chatLanguageModel(chatModel)
.toolProvider(toolProvider)
.build();
String response = aiService.chat("서울 날씨 알려주세요.");
System.out.println(response); // 출력: 현재 기온: 25℃, 날씨: 맑음 (도시: 서울)
6. 일반적인 문제 해결
- 연결 실패:
- 서버 URL과 포트 일치 여부 확인
- SSE 엔드포인트 활성화 확인 (
spring.ai.mcp.server.sse.enabled=true)
- 도구 미등록:
@Tool 애너테이션 적용 여부 확인, 로그로 도구 등록 상태 확인
- 스트리밍 응답 블로킹:
- WebFlux 모드에서
Flux 또는 Mono 반환 타입 사용 확인
- LangChain4j 모드에서 전송 프로토콜 설정 확인 (예:
HttpMcpTransport.Builder().sseUrl())