Java·Spring·MCP 연결
같은 Java 조회 함수를 HTTP 요청과 MCP 도구로 불러 보고 프레임워크의 역할을 찾습니다.
선택학습 (필수 아님) · 먼저 HTTP 결과를 바꾸는 함수 하나만 찾아봅니다. MCP가 궁금하면 같은 함수를 다른 방식으로 부르는 실험까지 이어가세요. 기본 진도·완료율·교사 확인에 들어가지 않습니다.
Java·MCP 프로젝트 ZIP 다운로드 · 자율 프로젝트 목록
Java의 클래스·메서드와 HTTP 요청·응답을 접해 봤다면 시작하기 좋습니다. 가상의 교실 두 곳을 조회하는 예제이며 실제 학생 정보·DB·모델 API 키는 사용하지 않습니다.
첫 성공 · 웹 요청은 어떤 Java 함수를 부를까?
JDK 21을 준비하고, 압축을 푼 10-자율프로젝트/02-java-mcp 폴더에서 실행합니다. 포함된 Maven Wrapper가 필요한 빌드 도구와 라이브러리를 받으므로 첫 실행에는 인터넷 연결이 필요합니다.
macOS·Linux:
./mvnw spring-boot:runWindows PowerShell:
.\mvnw.cmd spring-boot:run가상 교실 lab 조회를 브라우저로 엽니다. 주소 마지막을 studio로 바꾸면 다른 결과가 나옵니다.
GET /api/rooms/lab → RoomController.room → RoomService.getRoom
→ Java 결과를 JSON으로 변환 → HTTP 응답src/main/java/school/explore 아래의 두 파일을 봅니다.
| 파일 | 찾아볼 것 |
|---|---|
RoomController.java | @GetMapping의 주소와 getRoom(name) 호출 |
RoomService.java | lab과 studio에 돌려주는 가짜 데이터 |
RoomService.java에서 lab의 좌석 수 하나를 바꿔 봅니다. 서버를 Ctrl+C로 끈 뒤 같은 명령으로 다시 켜고 브라우저를 새로고침합니다. 응답의 availableSeats가 바뀌었나요?
어느 함수의 값이 HTTP 응답이 되는지 설명할 수 있으면 첫 성공입니다. 여기서 멈춰도 됩니다.
바꿨는데 화면이 그대로라면
파일을 저장했는지, 기존 서버를 끄고 다시 실행했는지, 브라우저에서 같은 교실 이름을 조회했는지 확인합니다. 소스 파일을 저장하는 것과 실행 중인 Java 프로그램이 바뀌는 것은 다릅니다. 시작 자체가 안 되면 java -version 결과와 처음 나온 오류를 교사에게 보여 주세요.
궁금하면 · 같은 함수를 MCP 도구로 부르기
MCP는 Model Context Protocol의 약자로, 프로그램의 도구와 데이터를 다른 애플리케이션이 정해진 형식으로 알아보고 사용하게 하는 통신 규칙입니다. MCP 자체가 AI 모델은 아닙니다. Spring AI는 Java 메서드를 MCP 도구로 연결할 수 있도록 돕습니다. Spring AI의 MCP 서버 설명
서버를 켜 둔 상태에서 같은 폴더의 두 번째 터미널을 엽니다. 관찰 도구는 Node.js 24 이상으로 실행합니다.
node scripts/inspect.mjs이 도구는 실제 HTTP 요청을 보내고 결과를 출력합니다. 모델이 스스로 도구를 고르는 에이전트는 아니며, 정해진 순서대로 호출을 관찰하는 작은 클라이언트입니다.
| 출력에서 볼 이름 | 이번에 하는 일 |
|---|---|
initialize | 사용할 통신 버전과 기능 확인 |
tools/list | 서버가 제공하는 get_room과 필요한 입력 알아보기 |
tools/call | name: "lab" 등의 입력으로 도구 실행 |
목록에 get_room이 있고 입력에 name이 보이는지, 실행 결과가 방금 HTTP로 본 결과와 같은지 찾아보세요. 준비한 관찰 도구가 lab·studio·없는 이름의 결과를 각각 비교합니다.
HTTP: GET /api/rooms/lab → Controller → getRoom("lab")
MCP: POST /mcp → tools/call(get_room, name="lab") → getRoom("lab")이번 MCP 연결은 HTTP로 MCP 메시지를 주고받는 Streamable HTTP 방식입니다. MCP가 HTTP를 대체한 것이 아니라 HTTP 본문에 도구 이름과 입력 등의 규칙을 더한 사례입니다. MCP에는 다른 전송 방식도 있습니다. MCP 전송 방식
세 군데만 연결해 보기
| 코드 | 맡는 역할 |
|---|---|
@GetMapping | HTTP 주소를 처리 메서드에 연결 |
| Controller의 생성자 | Spring이 준비한 RoomService를 받아 사용 |
@McpTool | 같은 조회 메서드를 MCP 도구 이름·설명·입력과 연결 |
웹소켓 실험에서 직접 처리했던 수신·형식 해석을 여기서는 서버와 프레임워크가 맡습니다. Spring MVC의 DispatcherServlet은 요청 처리를 연결하는 공통 진입점입니다. 프레임워크 안쪽 전체를 외우기보다 “내가 바꿀 처리 함수까지 누가 요청을 전달하는가?”를 찾아보면 충분합니다. Spring MVC 요청 처리
MCP 도구 연결은 Spring AI의 @McpTool 설명, 목록과 호출의 약속은 MCP 도구 명세에서 필요한 부분만 읽어 봅니다.
조금 더 바꿔 보고 싶다면
lab의 상태 문자열을 바꿔 HTTP와 MCP에서 모두 달라지는지 비교하세요. 다음에는 RoomController.java의 HTTP 경로만 바꾸어 MCP 도구 이름과 조회 결과도 함께 바뀌는지 예상해 봅니다. 경로를 바꾸면 관찰 도구의 HTTP 비교 주소도 맞춰야 합니다. 한 번에 한 곳만 바꾸고 변경 전 코드와 비교하세요.
이번 예제는 내 컴퓨터의 고정 가짜 데이터를 읽는 도구입니다. 실제 계정 연결이나 배포 없이도 입구가 달라도 같은 처리 함수를 사용할 수 있다는 점을 관찰할 수 있습니다. 막혔다면 질문 네 줄을 AI나 교사와 함께 정리해 보세요.