MCP와 통신 프로토콜

Gamchan Kang·2025년 7월 28일
0

ML/DL

목록 보기
14/14

MCP는 Model Context Protocol의 약자로, LLM 혹은 LLM 어플리케이션이 외부 도구 혹은 데이터를 접근하기 용이하도록 구상된 통신 규약(Protocol) 이다.
MCP는 크게 3가지로 구성되어 있다. 일반적인 네트워크 프로토콜과 비교하면서 보자.

Host

  • 네트워크: 고유 주소(IP)를 가지고 참여하는 모든 장치 (e.g. 컴퓨터, 라우터)
  • MCP: 서버와 클라이언트가 같이 참여하는 어플리케이션 (e.g. Claude Desktop, Cursor)

Server

  • 네트워크: 서비스를 제공하기 위해 기다리는 측 (e.g. 웹 서버, DB 서버)
  • MCP: 해당 호스트의 실제 서비스 로직을 구현해 요청을 처리하는 컴포넌트(함수 혹은 핸들러)

Client

  • 네트워크: 서버에 요청을 보내고 응답을 받아 처리하는 측
  • MCP: 다른 호스트의 MCP 서버에 요청을 보내는 애플리케이션 모듈.

즉, 네트워크, MCP 모두 Host는 공간을, ServerClient는 공간 위에서 상호 작용하는 모듈을 나타내는 용어라고 볼 수 있다.

위 3가지 모두 요청 - 응답 구조를 따른다는 공통점을 가지고 있다.
다만, 일반적인 네트워크 프로토콜은 TCP/IP 계층 부터 애플리케이션 계층까지 다양하게 정의된 반면, MCP는 오직 애플리케이션 계층으로 한정된 개념이다. 어쩌면 포함 관계로 볼 수도 있겠다.

더 나아가서는 일반적인 네트워크 프로토콜(HTTP/REST)은 JSON과 일반 Text 기반 통신인 반면, MCP는 MsgPack, Protobuf 등 역직렬화를 지원하여 경량화, 유연성, 확장에 최적화 되어 있다.

Further Readings
(MCP는 JSON-RPC 2.0 프로토콜을 채택하여 구성된 프로토콜이다. JSON-RPC 2.0 프로토콜의 세부 구성 요소로 MsgPack, Protobuf가 있다. 이 부분에 대해서는 추가로 공부해야겠다.)

그리고 이러한 최적화를 기반으로 MCP는 총 3개, 현재는 2개의 통신 방법으로 동작한다.

SSE(Server-Side-Event, 현재는 Deprecated)

  • 클라이언트가 HTTP로 초기 연결 후, 서버가 일방향으로 텍스트 스트림을 지속 전송
  • 스트림 재개(resumable streams) 미지원, 리소스 관리 및 가용성 관리 부담, 단방향 통신의 한계로 25년 3월부터 MCP에서 Deprecated된 방법

Stdio(Standard Input/Output)

  • 한 프로세스의 stdout(표준 출력)을 다른 프로세스의 stdin(표준 입력)으로 받아서 연결
  • 별도의 네트워크 소켓 없이 통신 가능 -> 보안에 좋음!
  • 동일 머신에서만 사용 가능 -> stdio를 사용하기 때문...

Streamable HTTP

  • HTTP/1.1 Chunked Transfer Encoding과 HTTP/2 Frame Based Streaming을 망라한 개념. (대충 하나로 툭 던지는게 아니라, 조금씩 흘려서 전송하는 방식)
  • 일반 HTTP는 작은 정적 리소스 전송에 최적화된 반면, Streamable HTTP는 대용량 리소스(라이브 로그, 오디오, 서버 푸쉬) 전송에 최적화.
  • 네트워크 계층을 거친다 -> 로드 밸런서, 프록시 등 확장성과 기존 웹 인프라를 그대로 활용할 수 있다. -> MCP에서 제일 권장하는 방식.

위 3가지 방식은 FastMCP 서버를 .run 메소드로 실행할 때, transport인자에 따라 달라진다. 아주 간단하게 넘겨주는 인자만 달라지지만, 전체 서비스 운영 측면에서는 큰 차이가 있겠다. 예를 들어 stdio로 run 한 FastMCP 서버는 외부로부터, 외부로의 접근이 차단되죠. 이렇게 된다면 서버 인스턴스 관리 전략부터 전체적인 인프라 설계까지 달라질 수 있겠다.

참고 자료:
1. MCP 공식 문서: https://modelcontextprotocol.io/docs/learn/architecture
2. JSON-RFC 공식 문서: https://www.jsonrpc.org/specification
3. Godspeed 공식 문서: https://godspeed.systems/docs/saarthi/features/mcp/server-transports
4. fka 블로그: https://blog.fka.dev/blog/2025-06-06-why-mcp-deprecated-sse-and-go-with-streamable-http/

profile
Someday, the dream will come true

0개의 댓글