🧐 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."
}
이번 블로그에서는 Spring AI와 MCP를 활용하여 AI 챗봇을 구축하는 방법을 살펴봤습니다. MCP를 통해 챗봇이 웹 검색, 파일 시스템 작업, 맞춤형 비즈니스 로직을 수행할 수 있도록 확장되었습니다.
🚀 MCP를 활용하면 AI 애플리케이션이 더욱 강력한 기능을 수행할 수 있으며, 다양한 도구 및 데이터 소스와 쉽게 통합할 수 있습니다.
'인공지능' 카테고리의 다른 글
LG AI ‘엑사원 딥’, 글로벌 AI 시장을 뒤흔들다! (0) | 2025.03.19 |
---|---|
Spring AI의 새로운 도구 호출 기능: AI와 API의 강력한 연동 방법! (0) | 2025.03.18 |
Vibe Coding: AI와 함께하는 새로운 개발 패러다임 (0) | 2025.03.18 |
앤드류 응이 말하는 "AI 시대에도 프로그래밍을 배워야 하는 이유" (0) | 2025.03.17 |
Gemma 3 + Unsloth: 더 빠르고 효율적인 AI 모델 학습 방법 (0) | 2025.03.17 |