장님이 코끼리 만지고 설명하기(Model Context Protocol)
MCP란 무엇일까? 한번 맞춰보자
"AI한테 팔다리 기능 달아주는 거 아님?"
"컨텍스트 공유 표준화하는 거 아니에요?"
"그거 그냥 규칙 아니에요?"
정답은 3번이다. 그냥 규칙이다.
AI한테 기능적으로 팔다리 달아주는 것도 맞고, 데이터 적으로 표준화하는 것도 맞다.
MCP는 그냥 USB 같은 거라고 생각해보자
컴퓨터에 USB 포트 뚫어야 웹캠도 달고, 서로 짝짜꿍이 맞아야 데이터도 교환할 것이다.
규칙, 말 그대로 프로토콜이라고 하면 편한데
막상 USB 프로토콜 구조 알아보고 상세하게 설명하자면 복잡해질 것이다.
MCP도 마찬가지다.
USB가 포트 규격+장치 식별/전력/전송 규칙을 묶듯, MCP도 도구 조회, 호출, 리소스 주입, 프롬프트 실행을 묶는다
MCP 사용하기
ChatGPT는 2024년 6월까지의 데이터만 학습되어 있다.
즉 최신 데이터를 모른다.
"ChatGPT야 오늘 주식시장 어때?"
"불장이네요"
MCP 이전에 GPT는 오늘의 시장을 모르기에 불장을 보고 가즈아를 외치면 당신의 계좌는 불타 사라질 것이다.
그럼, 지금 GPT는 어떻게 최신 데이터를 가져오는 것일까?
바로 웹 브라우징, 검색이다.
주식 종목 검색하면 주가 데이터 검색용 기능도 호출해서 쓸 것이다.
데이터는 어떻게 공유함?
JSON-RPC 2.0 포멧으로 교환한다.
JSON은 익숙할 것이다.
{
"user": "김윤교",
"tags": ["개발자", "주식꼬라박음"]
}
RPC 2.0은 그냥 필수 필드랑 응답 형식 명시해두는거다
{
"jsonrpc": "2.0", // 이거 필수로 넣어야함
"method": "add", // 뭐하고 싶은지 알려
"id": 99 // 응답 필요하면 넣어줘
}
JSON이 한국말이라면 AI가 지들끼리 아는 언어로 "응 어쩔티비~" 하면 "저쩔티비~" 하겠다는 것이다.
기능은 어떻게 호출함?
아까 봤던 "method"에다가 "tools/list"넣고 도구 목록 조회하거나 "tools/call" 넣고 기능 호출한다.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}
method 달리니깐 JSON-RPC 2.0 규격이라고 오해할 수 있는데 이제는 MCP에 영역이다.
MCP도 프로토콜, 규격이다.
https://modelcontextprotocol.io/docs/learn/architecture#understanding-the-tool-discovery-request
MCP 구현 구조(지금부터는 조금 복잡해짐)
MCP를 구성하는 아키텍처는 다음과 같다.
MCP 호스트(우리가 쓰는 AI 애플리케이션, cursor 같은거)
MCP 클라이언(호스트랑 서버 사이에서 중개함)
MCP 서버(실제 기능과 리소스 제공함)
호스트가 최상위 계층이라 해서 헷갈릴 수 있는데, 사용자 - 호스트 - 클라이언트 - 서버 구조다.
MCP 호스트는 물리적으로 내 PC에서 구동되는 프로그램이다.
MCP 서버는 당연히 어딘가 물리적인 서버에서 제공될 것이다.
MCP 클라이언트? 하기 나름이다.
대부분 내 PC에서 호스트 내부 컴포넌트로 모듈로 동작하지만, 예외도 있다.
여기서 하나 알아야 할 점은 호스트 - 서버 사이의 관계는 n:n이 아닌 클라이언트를 낀 1:1 방식이라는 것이다.
호스트-서버 간 통신을 할 때마다 새롭게 클라이언트가 생성된다.(예외도 존재함)
중간유통업자가 가격을 올리듯이 이 클라이언트 개념은 MCP에 복잡도를 책임진다.
이걸 왜 알아야 함?
"그냥 파이썬으로 호출하고, 데이터 던지면 되는 거 아님?"
이라고 생각한다면 사실 어느 정도 가능은 하다. 빠르기도 하고.
MCP는 "여러 앱, 여러 모델, 여러 도구를 오래, 반복하면서, 팀 단위로" 다룰 때 필요한 것이다.
사내 에이전트를 생각해보자.
내부적으로 다양한 로컬 리소스와 연결해야 할 툴이 존재하는가? AI는 그것을 모른다. 우리가 연결해줘야 한다.
또한 만약 회사 규모가 크다면 성능을 고려한 분산 처리가 필요할 것이다.
개발 기본 원칙을 생각해보자 개방-폐쇠 원칙, 의존성 역전 원칙
모델이 바뀌고 확장되더라도 시스템은 유지되어야 한다.
AI 시대 기능 개발은 쉬워도 운영은 여전히 어렵다는 것을 명시하자.