본문 바로가기

인공지능

Spring AI와 Model Context Protocol(MCP) 활용하여 지능형 챗봇 구축하기

728x90
반응형

 

🧐 MCP(Model Context Protocol)란?

최근 AI 기반 애플리케이션에서는 단순한 질문-답변을 넘어 다양한 외부 데이터 소스를 활용한 더욱 정교한 답변이 요구됩니다. 하지만 검색 엔진, 데이터베이스, 파일 시스템 등 여러 소스를 효과적으로 연결하는 것은 큰 도전 과제입니다.

이를 해결하기 위해 Anthropic에서 도입한 **Model Context Protocol(MCP)**은 AI 모델과 외부 데이터 소스를 표준화된 방식으로 연결하는 프로토콜입니다. MCP를 활용하면 AI 애플리케이션이 보다 강력한 기능을 수행할 수 있습니다.

이번 블로그에서는 Spring AI를 활용하여 MCP 기반의 챗봇을 구축하는 방법을 살펴보겠습니다. 이를 통해 웹 검색, 파일 시스템 조작, 사용자 정의 비즈니스 로직과 통합된 AI 챗봇을 구현할 수 있습니다.

반응형

🚀 MCP의 기본 개념과 아키텍처

MCP는 클라이언트-서버 아키텍처를 따르며, 주요 구성 요소는 다음과 같습니다.

🔹 MCP 구성 요소

  • MCP 호스트(Host): LLM(대형 언어 모델)을 통합하고 외부 데이터 소스에 연결하는 주요 애플리케이션
  • MCP 클라이언트(Client): MCP 서버와 1:1 연결을 유지하는 컴포넌트
  • MCP 서버(Server): 외부 데이터 소스와 통합되어 기능을 노출하는 구성 요소
  • 도구(Tools): MCP 서버에서 제공하는 실행 가능한 기능

🔹 MCP 통신 방식

  • Stdio (표준 입출력): 로컬 프로세스 및 명령줄 도구와 통신
  • SSE (Server-Sent Events): HTTP 기반으로 클라이언트와 서버 간의 이벤트 스트림을 제공

🛠 Spring AI를 이용한 MCP 챗봇 구축하기

이제 MCP 아키텍처를 활용하여 Spring AI 기반의 챗봇을 구현해 보겠습니다.

1️⃣ 프로젝트 환경 설정

📌 필요한 의존성 추가 (pom.xml)

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-anthropic-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>

Anthropic API 및 MCP 클라이언트 스타터를 추가합니다.

📌 Spring Milestones 저장소 추가 (pom.xml)

    
        spring-milestones
        Spring Milestones
        https://repo.spring.io/milestone
    

Spring Milestones 저장소를 추가하여 최신 마일스톤 버전을 사용할 수 있도록 합니다.

📌 Anthropic API 키 및 모델 설정 (application.yaml)

spring:
  ai:
    anthropic:
      api-key: ${ANTHROPIC_API_KEY}
      chat:
        options:
          model: claude-3-7-sonnet-20250219

환경 변수에서 API 키를 로드하고, Claude 3.7 Sonnet 모델을 사용하도록 설정합니다.


2️⃣ MCP 클라이언트 설정

📌 Brave Search 및 파일 시스템 MCP 서버 등록 (application.yaml)

spring:
  ai:
    mcp:
      client:
        stdio:
          connections:
            brave-search:
              command: npx
              args:
                - "-y"
                - "@modelcontextprotocol/server-brave-search"
              env:
                BRAVE_API_KEY: ${BRAVE_API_KEY}

            filesystem:
              command: npx
              args:
                - "-y"
                - "@modelcontextprotocol/server-filesystem"
                - "./"
  • Brave Search MCP 서버: 웹 검색 기능 제공
  • 파일 시스템 MCP 서버: 로컬 디렉토리에서 파일 생성 및 읽기

이 설정을 통해 챗봇이 검색 및 파일 작업을 수행할 수 있습니다.


3️⃣ 챗봇 구현하기

📌 ChatClient 생성

@Bean
ChatClient chatClient(ChatModel chatModel, SyncMcpToolCallbackProvider toolCallbackProvider) {
    return ChatClient
      .builder(chatModel)
      .defaultTools(toolCallbackProvider.getToolCallbacks())
      .build();
}

Claude 모델과 MCP 서버의 기능을 통합하는 ChatClient를 생성합니다.

📌 챗봇 서비스 구현

String chat(String question) {
    return chatClient
      .prompt()
      .user(question)
      .call()
      .content();
}

사용자의 질문을 AI 모델에 전달하고 응답을 반환하는 chat() 메서드를 정의합니다.

📌 REST API 엔드포인트 생성

@PostMapping("/chat")
ResponseEntity<ChatResponse> chat(@RequestBody ChatRequest chatRequest) {
    String answer = chatbotService.chat(chatRequest.question());
    return ResponseEntity.ok(new ChatResponse(answer));
}

record ChatRequest(String question) {}
record ChatResponse(String answer) {}

챗봇과 상호작용할 수 있는 REST API를 생성합니다.


🛠 사용자 정의 MCP 서버 만들기

MCP 서버는 기본 제공되는 서버 외에도, 특정 비즈니스 로직을 수행하는 커스텀 서버를 구현할 수 있습니다.

1️⃣ MCP 서버 의존성 추가

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>

2️⃣ 사용자 정의 MCP 도구 정의

class AuthorRepository {
    @Tool(description = "Get author details by article title")
    Author getAuthorByArticleTitle(String articleTitle) {
        return new Author("John Doe", "john.doe@example.com");
    }

    record Author(String name, String email) {}
}

특정 기사 제목을 기반으로 저자 정보를 조회하는 getAuthorByArticleTitle() 메서드를 MCP 도구로 등록합니다.

3️⃣ MCP 클라이언트 설정 (application.yaml)

spring:
  ai:
    mcp:
      client:
        sse:
          connections:
            author-tools-server:
              url: http://localhost:8081

SSE 기반 MCP 서버를 추가하여 챗봇이 저자 정보를 조회할 수 있도록 합니다.


💡 챗봇 테스트하기

📌 웹 검색 기능 테스트

http POST :8080/chat question="How much was Elon Musk's initial offer to buy OpenAI in 2025?"

응답 예시:

{
    "answer": "Elon Musk's initial offer to buy OpenAI was $97.4 billion. [Source](https://www.reuters.com/technology/...)"
}

📌 파일 생성 기능 테스트

http POST :8080/chat question="Create a text file named 'mcp-demo.txt' with content 'This is awesome!'"

응답 예시:

{
    "answer": "The text file named 'mcp-demo.txt' has been successfully created."
}

728x90

이번 블로그에서는 Spring AIMCP를 활용하여 AI 챗봇을 구축하는 방법을 살펴봤습니다. MCP를 통해 챗봇이 웹 검색, 파일 시스템 작업, 맞춤형 비즈니스 로직을 수행할 수 있도록 확장되었습니다.

🚀 MCP를 활용하면 AI 애플리케이션이 더욱 강력한 기능을 수행할 수 있으며, 다양한 도구 및 데이터 소스와 쉽게 통합할 수 있습니다.

https://www.baeldung.com/spring-ai-model-context-protocol-mcp?fbclid=IwZXh0bgNhZW0CMTEAAR2zVEe-7peGXsvixrI7gUPD6cZeqLYUcUZ4lS3CNnYjIRYHARCSGX5pwkg_aem_31R8zN6CQvs4vkl37gY6rQ

728x90
반응형