Post
EN

Spring AI, MCP, LangChain

Spring AI를 이용하여 MCP, RAG를 구성한 부분에 대해서 정리해본다.

꽤 오랜 시간이 지나서 틀릴 수도 있지만 (왜 남긴 내용이 없는거지..?)

Spring AI는 최근 Agent AI 를 개발하기 위한 방법중에 빠르게 진행중인 Spring Project로 보인다.

기존 LLM을 활용한 애플리케이션 개발은 개발자가 설계해둔 flow에 llm을 활용해서 결과를 만들어내는 과정을 진행하는 것인데, AI Agent는 목표 달성을 위해서 스스로 판단하기 위한 소프트웨어 개발을 나타낸다고 한다.

Agentic AI와 Agent AI가 뭔데 이럴 수 있는데, Agentic AI는 에이전트처럼 행동하도록 설계된 AI의 방식(패러다임) 을 나타낸다고 함

https://docs.spring.io/spring-ai/reference/

사실 작년에 1.0.0-m3? 1.0.0-m4 정도가 나올 무렵에 MCP를 만들어 봤는데, 그때 봤던 개념과 지금 아는 개념이 꽤 많이 다르다는 것을 알게 됨

우선 MCP부터 들어가보자면, Module Context Protocol 의미는 AI 모델(LLM)이 다양한 외부 도구, 데이터, 애플리케이션과 표준화된 방식으로 통신하고 연동될 수 있도록 하는 개방형 통신 규약(프로토콜) 임,

앤트로픽사에서 개발하고 오픈소스로 배포하여, LLM 진영에서 사용하기 시작하였고, 사용 방법은 여러가지로 나눌 수 있지만 익숙한 것은 Tool Calling( 도구 호출 방식)임

자세한 내용은 아래 link를 참고하면 됨

- https://docs.spring.io/spring-ai/reference/api/tools.html

그 밖의 다양한 기능들을 제공해주는 것을 확인했음, 하지만 모든 개념을 다 MCP라고 최초에 생각했던게 나의 무지에서 비롯된 것이였음

우선 demo를 작성한 내용은 아래 repo에서 확인할 수 있음

- https://github.com/audtjddld/spring-ai-mcp-demo

위 예제 프로젝트는 todo(mcp server) 항공권 예약 (flight mcp server)와 mcp client를 구성하여 prompt 기반으로 어떻게 동작하는지 확인해본 내용임

여기서 얻은 뷰는 mcp server는 앞서 설명한 도구 호출용 도구들이었음.

이 도구를 이용하여 어떤 동작을 할지는 mcp client에 등록한 llm이 판단하는 것.

예제로는 이런 예제들을 작성함

2025년 10월 1일에 청소해야 되는 일정을 추가해줘

↓ mcp client (prompt 접수) ↓ 어떤 도구들이 있는지 확인 ↓ todo mcp server의 도구 목록 확인 ↓ todo 등록 도구에 맞는 파라미터 정보를 가공해서 입력 ↓ 등록 완료

프롬프트(자연어)로 이야기 하면 내가 원하는 동작을 LLM이 판단하여 도구를 호출한 뒤 결과를 만들어내는 것

이 부분이 나에게는 엄청 새로운 개념으로 다가왔고, 앞으로의 개발 방식이 매우 달라질 수도 있을 것이라는 생각이 들었음

예를 들면 mcp server 즉 도구들을 아주 작은 단위의 기능으로 만들어놓고, llm이 도구들을 잘 이용해서 원하는 결과를 만들어 낸다면 가능할 것으로 생각했음.

이 말을 좀더 정리해보면, 특정 비즈니스 로직이라는 것은 즉 저런 원자적인 동작을 하는 기능들을 합성하여 만드는 것이 비즈니스 로직이라고 생각하고 있음, 잘 분해된 기능들을 이용하여 mcp client에게 프롬프트로 (예:) 항공일정을 조회한 뒤 가능한 좌석을 가격이 낮은 항공권으로 구매해줄 수 있어? 또는 선물하기 기능 요건인 이러한데 이런 기능을 현재 구현할 수 있을까? 라는 물음에 llm이 도구를 확인 하여 가능하다, 불가능하다 여부를 알려줄 수 있고, 가능하다면 기능을 이미 하나의 feature로 구성하여 사용할 수 있을 것이라 생각함.

구조는 아래와 같음

API 요청 -> API 서버 -> llm(원하는 동작을 할 수 있는 prompt 입력) -> 결과

(prompt는 버저닝)

이런식으로 특정 API를 호출 받을 수 있는 진입점을 마련하고 만들어 놓은 prompt를 입력해서 실행시키면 원하는 결과가 나오지 않을까? 하는 기대감이 들었다.

다만 속도적인 측면에서는 고객을 상대하는 서비스 보다는 백오피스에서 사용하는 형태로 만들어야 할 것으로 생각했다.

이런 형태로 구성하다보니 기본적인 설계는 계약에 의한 설계를 고려해야 하며, 각 단계별 검증을 어떤 방식으로 처리할지 고민도 필요해보였다.


이런 내용을 알게 된 뒤 멀티 ai agent를 이용하여 소규모 프로젝트를 진행했었는데, 내용은 다음과 같다.

특정 나라에 대한 트렌드, 법률전문가, 디자인 전문가 등의 페르소나를 가지고 있는 ai agent를 만들고, 프롬프트 기반으로 웹사이트를 만들어보는 것을 해봤는데,

사는 회사에서 사람들이 일하는 모습을 본따서 일하는 방식을 설정하고, 구현을 진행했다. 이때 claude code pro max를 결제해서 진행했는데, 정말 내가 생각한 방식으로 구현은 가능하더라

대략적인 업무 플로우는 이렇다.

프롬프트 입력 -> PM ai agent 분석 -> 업무 분배 (트렌드 or 디자인 or 법률전문가) -> 결과물 web dev 전달 -> web dev 개발 완료 후 자체 평가 -> peer review (pm, 트렌드, 디자인, 법률 전문가 등) -> 수정사항 있을 시 내용을 web dev로 전달하여 재작업 진행 -> 완료 후 peer review -> 완성

이런 방식으로 구현해서 진행을 해봤다.

이때 같은 팀에 있는 분들은 lang chain 또는 lang graph를 이용해서 만들어야 한다고 하더라.

두 가지 개념이 없었는데 최근에 해당 내용을 학습하다보니 어떤 내용인지 이해할 수 있었다.

랭체인은 LLM이 스스로 추론(Reason)하고 행동(Act)하는 동적 시스템

행동 흐름은

입력 -> 추론(“무엇을 해야할까?”) -> 도구 선택/사용 -> 판단 -> 반복 -> 최종 출력

매번 llm이 스스로 판단해서 진행

이 내용을 보다보니, spring ai를 이용하여 작성했던 예제의 동작 방식과 유사하다는 생각이 들었다,

그래서 알아본 결과 아래와 같다. (gpt 5.2)

**

LangChain이 제시한 ‘Agent + Tool’ 개념을 **

Spring AI는 ‘엔터프라이즈 아키텍처’로 재구성한 것이 MCP다.

MCP 구조에 대한 이해

- MCP Server

- 실제 동작을 수행하는 “도구(tool)”의 집합

- 각 도구는 아주 **원자적인 기능 단위**

- 스스로 판단하지 않음

- 무엇을 할 수 있는지만 명확히 정의

- MCP Client

- LLM이 등록되어 있음

- 자연어 프롬프트를 입력받음

- 어떤 도구를 사용할지 **LLM이 판단**

- 도구의 파라미터 스펙에 맞게 입력값을 가공

- 도구를 호출하고 결과를 취합

즉,

**

판단과 추론은 LLM(MCP Client)이 하고, 실제 행위는 MCP Server(도구)가 수행한다.**

나는 앞서 spring ai를 이용해서 동작하는 방식을 이해했고 이어서 랭체인의 개념을 익혔는데 spring ai에서는 해당 개념을 이미 해석해서 적용하고 있었다는 점에 매우 놀랐다.

좀더 나아가면 RAG도 tool로 등록하고, 사용하게 하면 괜찮게 사용할 수 있을 거라는 생각이 들었다.

https://docs.spring.io/spring-ai/reference/api/effective-agents.html#_agentic_systems


RAG 이후에 작성 예정

This article is licensed under CC BY 4.0 by the author.