Spring-MCP와 LangChain4j의 MCP 통합 비교 가이드

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 도구로 등록합니다.
  • 디버깅 방법:
    • 트래픽 로그 활성화: logging.level.org.springframework.ai.mcp=DEBUG 추가
    • curl로 SSE 요청 시뮬레이션:
      curl -N http://localhost:8080/sse \
        -H "Accept: text/event-stream" \
        -H "X-MCP-Method: getWeather" \
        -H "X-MCP-Params: [\"서울\"]"
      

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 디버깅 기법
  • 트래픽 로그: logRequestslogResponses로 상세 로그 활성화
  • 프로토콜 디버깅:
    • HTTP: Postman 또는 curl로 MCP 엔드포인트 직접 호출
    • stdio: Docker로 MCP 서비스 실행 후 표준 입출력 연결:
      docker run -p 8080:8080 mcp/github:latest
      

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. 일반적인 문제 해결

  1. 연결 실패:
    • 서버 URL과 포트 일치 여부 확인
    • SSE 엔드포인트 활성화 확인 (spring.ai.mcp.server.sse.enabled=true)
  2. 도구 미등록:
    • @Tool 애너테이션 적용 여부 확인, 로그로 도구 등록 상태 확인
  3. 스트리밍 응답 블로킹:
    • WebFlux 모드에서 Flux 또는 Mono 반환 타입 사용 확인
    • LangChain4j 모드에서 전송 프로토콜 설정 확인 (예: HttpMcpTransport.Builder().sseUrl())

태그: spring-boot Spring-AI LangChain4j MCP java

8월 4일 04:04에 게시됨