Ruby on Rails 애플리케이션에 AI 인터페이스 추가하기: Model Context Protocol(MCP) 활용

Paweł Strzałkowski, AI interface in 5 minutes. San Francisco Ruby Conference 2025

작성자
Evil Martians
발행일
2026년 01월 13일

핵심 요약

  • 1 Model Context Protocol(MCP)을 활용하여 Ruby on Rails 애플리케이션에 AI 인터페이스를 통합하는 방법을 소개합니다.
  • 2 새로운 Rails 앱, 기존 레거시 앱, 기성 AVO 기반 앱에 MCP 템플릿을 적용하여 도구를 생성하고 LLM과 연동하는 과정을 시연합니다.
  • 3 MCP 서버의 생산 환경 배포를 위해 OAuth(DCR 및 PKCE)를 통한 강력한 인증 및 권한 부여 구현의 중요성을 강조합니다.

도입

2025년, LLM 챗봇을 통해 여행을 예약하는 미래 시나리오를 시작으로, 현재 LLM과 웹 애플리케이션 간의 직접적인 상호작용이 어렵다는 문제점을 제기합니다. 기존의 M*N 통합 문제와 AI 네이티브 방식의 필요성을 언급하며, 이러한 간극을 메울 수 있는 Model Context Protocol(MCP)의 도입 배경을 설명합니다. 발표자는 Ruby 소프트웨어 하우스 Visuality의 CTO인 Pavo Strokovski로, 20년 이상의 개발 경력을 바탕으로 창의적인 기술 접근을 추구하며, LLM과 웹 앱의 라이브 상호작용을 가능하게 하는 MCP의 중요성을 강조합니다.

Model Context Protocol (MCP) 개요MCP는 LLM에 동적이고 상호작용적인 실세계 컨텍스트를 제공하기 위한 개방형 표준입니다. 2023년 11월 Anthropic이 처음 소개했으며, 이후 Google, OpenAI 등 주요 기업들의 지지를 받았습니다. 이는 LLM이 기존 시스템과 직접 연결될 수 없는 한계를 극복하고, 웹 애플리케이션의 기능을 AI 네이티브 방식으로 활용할 수 있도록 돕습니다.

MCP 아키텍처 및 기본 요소MCP 시스템은 주로 세 가지 구성 요소로 이루어집니다:<ul><li>MCP Host: ChatGPT와 같은 사용자 대면 챗 애플리케이션 또는 개발자 도구(예: Corsor)입니다. LLM과 사용자 간의 인터페이스 역할을 합니다.</li><li>LLM: 대규모 언어 모델입니다. MCP Host로부터 전달받은 컨텍스트를 기반으로 사용자의 요청을 처리하고 적절한 도구 호출을 결정합니다.</li><li>MCP Servers: 웹 애플리케이션으로, HTTP 연결(또는 로컬 환경에서는 표준 입출력)을 통해 MCP Host에 컨텍스트를 제공합니다.</li></ul>MCP에서 컨텍스트는 다음 세 가지 기본 요소(Primitives)로 구성됩니다:<ul><li>Tools: MCP 서버가 수행할 수 있는 기능(예: 날씨 예측, 게시물 발행)의 정의입니다. LLM은 이 정의를 바탕으로 어떤 도구를 사용할지 결정합니다.</li><li>Resources: LLM에 유용한 데이터 파일, 레코드, 로그, 이미지 등 모든 종류의 데이터입니다.</li><li>Prompts: LLM 애플리케이션 사용을 위한 표준화된 지침 또는 레시피입니다.</li></ul>### MCP 작동 방식 예시여행사 및 날씨 예측 MCP 서버를 활용한 시나리오를 통해 MCP의 상호작용 과정을 설명합니다.<ul><li>사용자가 LLM 챗 앱을 열면, MCP Host는 MCP 서버들(여행사, 날씨 예측)로부터 도구 및 리소스 정의를 가져옵니다.</li><li>사용자가 “낭만적인 유럽 주말 여행을 예약해 줘, 날씨는 좋아야 해”와 같은 프롬프트를 입력합니다.</li><li>LLM은 프롬프트와 도구 정의를 받아 “list romantic trips” 도구를 호출하도록 응답합니다.</li><li>MCP Host는 해당 도구의 실행을 요청하고, 서버는 가능한 여행 목록을 반환합니다. 이 목록은 새로운 컨텍스트로 추가됩니다.</li><li>LLM은 업데이트된 컨텍스트를 바탕으로 각 도시의 날씨 예측을 위해 “get weather forecast” 도구를 여러 번 호출하도록 요청합니다.</li><li>MCP Host는 날씨 예측 서버에 도구를 실행하고, 그 결과를 받아 다시 LLM에 전달합니다.</li><li>최종적으로 LLM은 여행 예약 도구를 호출하여 실제 예약을 완료하도록 지시합니다. 이 과정을 통해 LLM은 복잡한 조건부 로직을 스스로 처리하며 여러 애플리케이션과 상호작용합니다.</li></ul>### Ruby on Rails 애플리케이션에 AI 인터페이스 추가발표자는 Ruby on Rails 애플리케이션에 MCP를 쉽게 통합하기 위한 Rails 템플릿을 제공합니다. 이 템플릿은 다음 기능을 추가합니다:<ul><li>공식 Ruby SDK for Model Context Protocol Gem 설치</li><li>/mcp 엔드포인트 추가 (MCP 서버 노출 지점)</li><li>MCP 도구 생성기 (명령줄에서 새 도구 생성)</li><li>Rails 스캐폴드 컨트롤러 확장 (새 모델 스캐폴드 시 CRUD MCP 도구 자동 생성)</li></ul>세 가지 유형의 Rails 애플리케이션에 대한 시연이 진행됩니다:<ul><li>새로운 Rails 애플리케이션: 부동산 리뷰 앱을 생성하고, rails g scaffold 명령을 통해 PropertyPropertyReview 모델을 스캐폴드합니다. 이때 MCP 템플릿에 의해 자동으로 CRUD 관련 MCP 도구들이 생성되며, ngrok을 사용하여 로컬 서버를 공개 URL로 노출한 후 Cloud Desktop과 연동하여 도구의 작동을 확인합니다.</li><li>레거시 애플리케이션: 37signals의 오픈소스 프로젝트인 Campfire에 MCP 템플릿을 적용합니다. rails generate mcp_tool alert_all_rooms_tool 명령으로 특정 로직(모든 채널에 메시지 경고)을 가진 도구를 수동으로 생성하고, Cloud Desktop을 통해 해당 도구를 실행하여 실시간으로 메시지가 전송되는 것을 보여줍니다.</li><li>기성 애플리케이션 (Off-the-shelf): AVO 기반 애플리케이션에 locations_index_tool을 생성하여 사용 가능한 위치 목록을 가져오는 도구를 만듭니다. 이후, 이 세 가지 MCP 서버(AVO, 새 앱, Campfire)를 동시에 연동하여, AVO에서 위치 목록을 가져와 새 앱에 부동산으로 추가하고, 각 부동산에 대한 리뷰를 생성한 후 Campfire에 알림을 보내는 복합적인 AI 워크플로우를 시연합니다.</li></ul>### 생산 환경을 위한 MCP 서버 준비현재 MCP 서버는 기본적으로 인증 기능이 부족하여 URL을 아는 누구나 접근할 수 있습니다. 이를 해결하기 위해 MCP 표준에서 정의하는 OAuth 구현이 필수적입니다. 특히 DCR(Dynamic Client Registration)PKCE(Proof Key for Code Exchange)와 같은 OAuth 흐름을 Doorkeeper Gem과 함께 사용하여 인증된 사용자 컨텍스트에서 MCP 도구가 작동하도록 해야 합니다. OAuth가 적용된 AVO 앱 시연을 통해, 사용자가 브라우저에서 명시적으로 권한을 부여해야만 Cloud Desktop이 MCP 서버에 연결되고, 이후 모든 도구 호출이 해당 사용자의 권한 수준에 따라 이루어짐을 보여줍니다.

결론

결론적으로, Model Context Protocol(MCP)을 활용하면 어떠한 Ruby on Rails 애플리케이션이든 AI 인터페이스를 손쉽게 통합할 수 있습니다. 발표자가 제공하는 Rails 템플릿을 통해 새로운 앱이든 레거시 앱이든 관계없이 MCP 서버를 구축하고, LLM과의 상호작용을 위한 도구를 자동 또는 수동으로 생성할 수 있습니다. 특히, 생산 환경에서 안전하고 신뢰할 수 있는 AI 인터페이스를 제공하기 위해서는 OAuth(DCR, PKCE 포함)를 통한 강력한 인증 및 권한 부여 메커니즘을 반드시 구현해야 합니다. 이는 AI가 실제 사용자 권한 내에서 애플리케이션 기능을 활용하도록 보장합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

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