회사에서 AI를 활용한 업무 자동화나 AI 개발 대회 등을 통해 AI로 업무 능률을 높이는 부분을 강조하고 있어, 저 역시 실제 업무나 개발 과정에서 활용할 수 있도록 AI 기술에 관심을 가지고 학습해보려고 합니다.
대학교에서 추천 시스템, 컴퓨터 비전, 자연어 처리 등을 이론적으로 배우고 프로젝트에도 적용해본 경험은 있지만, 이미 만들어진 AI 서비스나 모델을 실제 서비스와 연계하여 개발 생산성을 높이는 방식으로 활용해본 경험은 많지 않았습니다...
그래서 먼저 MCP(Model Context Protocol)에 대해 공부해보려고 합니다.
MCP가 무엇인가요?

MCP란 LLM이 외부의 다양한 도구(tool)와 구조화된 방식으로 상호작용할 수 있도록 설계된 프로토콜입니다.
과거에는 AI가 외부 기능이나 데이터에 접근하기 위해서 각 도구마다 별도의 연동 코드를 작성해야하는 불편함이 있었습니다. MCP는 외부 시스템들과 연동하는 방법, 과정을 표준화하여 훨씬 더 단순하고 일관된 구조를 제공합니다.
MCP를 공부하기 전에 확실히 알아야 할 부분은 MCP란 LLM이 외부 시스템을 호출할 수 있게 하는 인터페이스라는 점입니다. MCP를 새로운 AI 모델이나 에이전트 프레임워크처럼 이해하는 경우가 있는데, 실제로는 LLM이 데이터베이스 조회, 웹 검색, 내부 API 호출과 같은 외부 기능을 사용할 수 있도록 표준화된 방식으로 연결할 수 있도록 해준다고 이해하고 내용을 이어가겠습니다.
MCP 아키텍처

MCP는 클로드 데스트톱, 커서와 같은 MCP Host는 사용자의 입력을 받아, 필요한 기능을 실행하기 위해 MCP 서버에 요청을 전달하는 Client -Server 아키텍처를 따릅니다.
MCP의 Client-Server 구조에서 Client는 2개의 구성 요소로 나누어 이해할 수 있습니다. 사용자와 직접 상호작용을 하는 MCP Host와, MCP Host 내부에 포함되어 LLM이 선택한 도구에 대한 요청을 외부 MCP 서버로 전달하는 MCP Client가 있습니다.
그럼 MCP Host, MCP Client, MCP Server에 대해서 알아보겠습니다.

1. MCP Host
MCP Host는 사용자가 직접 상호작용하는 AI 어플리케이션 인터페이스입니다. 사용자의 요청을 입력받고, LLM을 통해 요청을 해석한 뒤 결과를 사용자에게 보여주는 역할을 합니다.
대표적인 MCP Host의 예시로는 Claude Desktop이나 Cursor가 있습니다.
2. MCP Client
MCP Client는 MCP Host 내부에서 동작하는 컴포넌트로, LLM이 특정 도구(Tool)를 사용해야 한다고 판단했을 때, 해당 요청을 MCP Server로 전달하고 MCP Server에서 실행된 결과를 받아 MCP Host로 전달하는 역할을 합니다.
3. MCP Server
MCP Server는 각 도구(Tool) 기능을 실제로 수행하는 주체로, 클라이언트와 LLM이 생성한 요청(tool_use)에 응답하고, 결과 메시지(tool_result)를 반환하는 서버 역할을 합니다.
MCP Server는 크게 Tools, Resources, Prompts라는 3가지 핵심 구성 요소가 있습니다.
3-1. Tools (@mcp.tool())
- 도구(Tool)는 LLM이 호출할 수 있는 외부 함수로, 사용자가 요청한 작업을 실행하는 역할을 합니다.
- MCP에서는 @mcp.tool()로 등록하여 사용합니다.
3-2. Resources (@mcp.resource())
- 리소스는 LLM이 참고할 수 있도록 문맥이나 데이터를 사전에 제공하는 역할로, 사용자 프로필, 회사 정보, 시스템 로그처럼 LLM이 참고할 수 있는 배경 정보나 맥락을 보완하는 용도로 활용합니다.
- MCP에서는 @mcp.resource()를 사용해 리소스를 등록하고 활용합니다.
3-3. Prompts (@mcp.prompt())
- 프롬프트는 LLM에 주어지는 지시문 또는 입력 문장으로, 사용자의 요청을 일관된 방식으로 해석하고 처리할 수 있도록 도웁니다.
- MCP에서는 @mcp.prompt() 또는 add_prompt()를 사용해 프롬프트를 등록합니다.
MCP 통신 방식
MCP에서는 클라이언트와 서버 간의 요청과 응답을 주고 받기 위해서 Stdio(표준 입출력), SSE(Server-Sent Events), Streamable HTTP를 지원합니다. 사용자는 사용 환경이나 구현 목적에 따라서 전송 방식을 선택할 수 있습니다.
Stdio 방식

Stdio 방식은 MCP 서버와 클라이언트가 표준 입출력(stdin, stdout)을 통해 직접 데이터를 주고 받는 통신 방식입니다.MCP 서버는 명령 프롬프트나 터미널 환경에서 실행되며, 클라이언트는 표준 입출력을 통해 서버와 직접 데이터를 주고 받습니다.이러한 통식 방식은 일반적으로 클라이언트와 서버가 동일한 컴퓨터에서 실행될 때 사용되며, 로컬 테스트나 개발 중인 MCP 서버를 빠르게 실행해보기 위한 환경에 적합합니다.
SSE(Server-Sent Events) 방식 (권장 X)

MCP Server가 HTTP 기반의 스트리밍 통신을 통해 클라이언트에게 실시간으로 데이터를 전송하는 방식입니다.
기본적인 HTTP 요청/응답은 클라이언트가 요청(Request)을 한 번 보내고 서버가 응답(Response)을 한 번 보내고 연결이 끝납니다. 그러나 MCP 서버에서는 하나의 요청을 처리하는 과정에서 긴 작업이 수행될 수 있으며, 이 과정에서 중간 진행 상황을 전달하거나 응답을 여러 조각으로 나누어 스트리밍 형태로 전송해야 하는 경우가 있습니다.
SSE 방식에서는 클라이언트가 SSE 엔드포인트에 한 번 연결(구독)하면, 서버는 해당 연결을 유지하면서 서버에서 새로운 이벤트나 응답이 발생할 때마다 이를 실시간으로 클라이언트에 전송할 수 있는 구조입니다.
그러나, 2025-03-26 버전부터 FastMCP에서는 SSE 방식의 통신은 더 이상 권장되지 않는 방식이며, Streamable HTTP 방식을 사용할 것을 권장하고 있습니다.
Streamable HTTP 방식

Streamable HTTP는 기존 SSE(Server-Sent Events) 방식의 한계를 보완하기 위해 도입된 MCP의 새로운 통신 방식입니다. 단일 HTTP 엔드포인트를 통해 요청과 응답을 처리하면서, 필요에 따라 스트리밍 응답도 지원하도록 설계되었습니다.
기존 SSE 방식에서는 클라이언트가 별도의 SSE 엔드포인트에 연결하고, 서버는 SSE 연결을 통해서만 클라이언트로 메시지를 전달하는 구조였습니다. 이 방식은 서버가 장시간 SSE 연결을 유지해야 하고, 다수의 클라이언트의 연결을 관리해야하는 문제가 발생할 수 있었습니다.
Streamable HTTP는 별도의 SSE 엔드포인트 대신에 모든 통신을 하나의 HTTP 엔드포인트로 통합하고, 서버는 클라이언트 요청의 유형에 따라 일반적인 HTTP 응답 또는 SSE 스트리밍 방식 중 하나를 선택할 수 있습니다.
'AI 개발' 카테고리의 다른 글
| [AI Agent 구현하기] LangGraph에 대해서 알아보자 - 기초편 (0) | 2026.06.21 |
|---|---|
| [AI Agent 구현하기] LangChain에 대해서 알아보자 (0) | 2026.06.03 |
