Polrax 사례를 통해 본 Ruby on Rails 애플리케이션용 MCP 서버 구축 및 도전 과제

Adding MCP to a legacy web application - Cezary Kłos [EN]

작성자
Visuality.pl
발행일
2025년 09월 02일

핵심 요약

  • 1 Polrax는 Rails 7.2 기반의 오픈 에어 레이스 추적 애플리케이션으로, 인터넷 환경이 불안정한 현장에서 참가자의 DNF/DNS 상태를 수동으로 처리하는 비효율적인 문제를 겪고 있었습니다.
  • 2 MCP(Model Context Protocol)는 LLM에 애플리케이션 컨텍스트를 표준화된 방식으로 전달하는 프로토콜로, Fast MCP와 Ruby SDK를 활용하여 Polrax의 문제 해결을 위한 PoC 서버를 구축했습니다.
  • 3 MCP는 빠른 진화, 미완성된 기능, 인증의 어려움, 대중적인 무료 클라이언트 부족 등 여러 도전 과제를 안고 있으나, 미래에 M*N 문제를 해결하는 강력한 표준이 될 잠재력을 가지고 있습니다.

도입

본 발표는 Ruby on Rails 기반의 오픈 에어 레이스 추적 애플리케이션인 Polrax의 사례를 통해 MCP(Model Context Protocol) 서버를 구축한 경험과 그 과정에서 마주한 도전 과제를 다룹니다. Polrax는 현장에서 인터넷 연결이 불안정하여 참가자의 'DNF(Did Not Finish)' 또는 'DNS(Did Not Start)' 상태를 수동으로 처리해야 하는 비효율적인 워크플로우를 가지고 있었으며, 이는 Polrax 팀에 상당한 부담으로 작용했습니다. 이에 발표팀은 해커톤을 통해 MCP 서버 PoC를 구축하여 이러한 문제를 해결하고, MCP 생태계에 대한 지식을 공유하고자 했습니다.

발표팀은 Polrax 애플리케이션의 비효율적인 상태 관리 문제를 해결하기 위해 MCP 서버 PoC를 구축하는 것을 목표로 했습니다. MCP는 애플리케이션의 컨텍스트를 LLM에 표준화된 방식으로 전달하는 프로토콜로, 클라이언트-서버 아키텍처를 따르며 HTTP를 통해 통신합니다. 클라이언트는 AI 기반 애플리케이션(예: Cloud Code)이며, 서버는 프로토콜에 따라 응답하는 소프트웨어입니다. Ruby 생태계에는 Fast MCP, Ruby SDK, Action MCP 등의 서버가 존재합니다.

MCP 서버 구축 과정

  • Fast MCP 활용: 초기에는 Fast MCP 젬을 추가하고 제너레이터를 통해 설정 및 샘플 도구를 생성한 후, 필요한 도구를 구축했습니다. Fast MCP는 Rails 미들웨어로 작동하며 /mcp 경로에 트래픽을 노출합니다. localhost_only 플래그 설정 및 하드코딩된 토큰 인증 방식은 실제 환경 적용 시 제한 사항으로 작용했습니다.
  • Ruby SDK로 마이그레이션: Fast MCP에서 Ruby SDK로의 마이그레이션은 Pavo의 아티클을 참고하여 진행되었습니다. MCP 젬을 추가하고 컨트롤러를 생성하여 MCP::Server.new를 통해 도구를 정의했습니다. Cloud Desktop과의 연동 시 표준 200 응답 대신 202 응답을 요구하는 버그가 발견되어 우회책을 적용해야 했습니다. Ruby SDK는 Shopify에서 공식적으로 지원하는 구현체라는 장점이 있습니다.

테스트 및 배포

  • 테스트 도구: MCP Inspector는 프로토콜의 모든 기능을 제공하며 인증 설정 및 디버깅에 매우 유용한 도구로 활용되었습니다. Cursor, Ruby LM MCP, Cloud Code와 같은 개발자 클라이언트를 통해 LLM이 도구를 올바르게 사용하는지 테스트하고 프롬프트 및 도구를 개선했습니다.
  • 클라이언트 배포: 최종 사용자용 클라이언트로는 Chat GPT 또는 Cloud Desktop과 같은 ‘일반 사용자용’ 도구를 선택했습니다. 개발 환경을 인터넷에 노출하고(ngrok 활용), HTTPS를 적용하여 Cloud Desktop에 MCP 서버를 등록했습니다. 라이브 데모를 통해 참가자 정보 조회, DNF/DNS 상태 설정(이미지에서 번호 추출 포함) 등의 기능이 성공적으로 시연되었습니다.

MCP의 원시 기능 (Primitives)

  • 도구 (Tools): 코드 내 함수 호출 기능을 제공합니다.
  • 리소스 (Resources): 클라이언트 및 LLM에 데이터를 노출합니다.
  • 프롬프트 (Prompts): 사용자가 재활용할 수 있는 저장된 프롬프트입니다.

클라이언트 기능

  • 샘플링 (Sampling): 서버가 클라이언트에 LLM과의 통신을 요청하고 응답을 받습니다.
  • 엘리시테이션 (Elicitation): 사용자에게 특정 작업 수행 권한을 요청합니다.
  • 로깅 (Logging): 서버가 클라이언트에 로그를 전송하여 검사 또는 저장을 가능하게 합니다.

결론

MCP는 현재 빠르게 진화하고 있어 도구 유지보수자들이 프로토콜의 변화를 따라잡기 어려운 상황입니다. 인증 메커니즘의 부족, 기능 미완성, 대중적인 무료 클라이언트의 부재 등 여러 '거친 모서리'가 존재합니다. Fast MCP와 Ruby SDK는 각각 SSE 지원 여부, Rails 통합 수준, 공식 지원 여부 등에서 차이를 보이며 빠르게 발전 중입니다. 현재로서는 AI 통합 시 MCP 대신 직접 클라이언트를 구축하고 도구 호출 기능을 활용하는 것이 더 간단할 수 있습니다. 그러나 MCP의 핵심 아이디어인 'M*N 문제' (다수의 클라이언트가 단일 엔드포인트를 통해 애플리케이션과 상호작용) 해결 잠재력은 매우 크며, 만약 MCP가 표준으로 자리 잡는다면 미래 AI 통합의 핵심 기술이 될 것입니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!