개요
최근 회사에서 AI 프로젝트를 진행하여 이전에 초창기 MCP에 비해서 조금은 성숙해진 상태이기에
실제 프로덕션에서 사용할 MCP 프레임워크를 무엇을 이용할지에 대한 분석을 진행했었다.
일단 결론을 먼저 말자하면 우리는 Python + FastMCP를 이용하는 방향을 선택했는데 이에 대한 과정을 말해보겠다.
MCP가 무엇인가?
여기 말고도 검색해보면 MCP에 대해서 알려주는 블로그는 많을 터이니 그냥 간단하게 개념만 짚고 가겠다.
원래 LLM을 손쉽게 이용할 수 있도록 도움을 주는 Lang Framework는 Tool이라는 기능을 제공하는데 기본적으로 이는 비표준적인 방법이었다.
이에 cluade의 제작사인 엔트로픽에서 표준화를 위한 스펙을 공개하게 되는데 이게 바로 MCP였다.
사실상 크게 다를것 없이 비표준적이던 Tool을 표준적인 Tool로 옮긴것과 다를것이 없는데 얻는 이점이라면 Tool을 독립적인 애플리케이션으로 옮길 수 있고
로컬에 없더라도 연결이 가능하다는 점일까?
아무튼 기본 컨셉 자체는 LLM이 특정 상황에 대응할 수 있는 도구를 쥐어주는 것이기에 Tool을 더 고도화 시킨 개념이다.
우리 회사의 현실
우리 회사 특히 우리팀은 항공이라는 도메인을 다루고 있다.
거기다 우리는 여러 항공사와 연동을 하고 있기 때문에 때에따라 지연이 상당히 높다.
여기에 서버 자체적인 문제까지 겹쳐서 레이턴시가 상당한 편인데… 그래도 지금은 많이 개선되긴 했지만 여전히 느린편이다.
그렇다면 MCP는 어떤 방식의 구현이 좋을까?
Event-Driven
가장 먼저 떠올린건 이벤트 기반의 응답이다.
흙 먹는 개발자…
Spring 진형이라면 Reactive Java인 WebFlux를 먼저 떠올릴 것이지만 Node건 FastAPI건 가림없이 주워먹던 필자의 경우 제일먼저 떠올린건 사실 Node였다.
오픈소스라면 발전에 대한 여지가 많기는 하지만 여전히 AI의 절대강자는 Python이다.
결과적으로 Python 진형에서 제공하는 엔트로픽의 FastAPI가 비동기를 지원하는가?가 중점이 되어 조사를 시작했다.
Fast MCP
엔트로픽은 초기에 다양한 언어에서 이용이 가능하도록 MCP 연동을 위한 라이브러리를 공개했다지만
이미 절대 다수가 LangChain을 사용하는 상황에서 당연히 Python이 압도적일 수 밖에 없다.
Star 수도 2배 가량 차이난다.
결과적으로 빠른 보안패치와 많은 Referance를 누릴 수 있는 방향은? Python이 답이라고 생각했다.
여기에 하나 더 덧붙이자면, 러닝커브도 생각했다.
타입스크립트도 좋다지만 당연히 강타입보다는 약타입인 파이썬이 다른 팀원이 처음 다뤄볼때 익숙해지기가 편할 것이라고 생각했다.
→ 그럼 휴면에러도 많아지는거 아니냐 생각할 수 있는데
사실 꼬리를 물자면 끝도 없기 때문에 너무 깊게까지는 생각하지 않았다. 다만, 얻는 이점이 잃는 이점보다는 크다고 생각했다. 파이썬 짱짱맨
비동기를 지원할까?
파이썬 WAS는 대표적으로 Flask, Django, FastAPI가 있다.
하지만 개인적인 생각에는 대다수 FastAPI로 대세가 기우는것 같은데 요즘 올라오는 오픈소스들만 보더라도 FastAPI를 기반으로 만들고 있다.
아무튼 비동기를 지원하는 ASGI를 지원하는 FastAPI는 Starletter를 뿌리를 두고있는데
확인해본 결과 엔트로픽에서 공개한 Python-SDK는 해당 starletter를 기반으로 하고 있기 때문에 비동기를 지원하는것으로 확인했다.
마치며
사실 결정 과정이 대단치는 않다.
그런데 필자가 Node도 Python도 해본 결과 많은 오픈소스가 쏟아지는 진형에서는 신뢰할 수 있는 오픈소스 라이브러리를 쓰는게 아주아주 중요하다고 생각했다.
당연히 Node도 신뢰도 있는 라이브러리지만 얻는 이점을 생각했을때 python이 더 적절하다고 생각했을 뿐이다.
항상 생각하지만 뭔가를 결정할때 그 이유가 참 중요한것 같다.
나도 예전에는 힙하다는 이유로 결정하고 그랬는데 연차가 늘어갈 수록 왜? 라는게 더욱 중요하게 다가오는 나날들이다.

