Rails 애플리케이션에 MCP 서버를 추가하여 AI 통합하기

Adding MCP to a Rails app | Stanko K.R.

작성자
jeff
발행일
2025년 05월 06일

핵심 요약

  • 1 Rails 애플리케이션에 MCP(Model Context Protocol) 서버를 성공적으로 통합하여 AI 에이전트가 지원 요청을 자동화하고 처리할 수 있도록 구현했습니다.
  • 2 `fast-mcp` 젬 설치 후 Zeitwerk 설정, 개발 환경에서의 도구 로딩 문제 해결 등 Rails 환경에 MCP를 맞추는 과정에서 발생한 기술적 난관과 해결책을 제시합니다.
  • 3 LLM이 도구를 효과적으로 활용하도록 돕기 위해 도구의 입출력 형식, 오류 상태, 열거형 값 등을 매우 상세하게 기술하는 것이 중요하며, 이는 AI의 성능에 직접적인 영향을 미친다는 점을 강조합니다.

도입

지난주 사내 AI 해커톤에서 Rails 애플리케이션에 MCP(Model Context Protocol) 서버를 추가하여 AI 통합을 시도했습니다. 이 프로젝트의 주요 목표는 AI 에이전트가 데이터를 교차 참조하는 것과 같은 반복적인 지원 업무를 자동화하여 지원팀의 업무 부담을 줄이고 응답 시간을 단축하는 것이었습니다. 이를 통해 개발팀 또한 일부 작업에서 벗어나 전반적인 효율성 증대를 기대했습니다. MCP는 LLM(대규모 언어 모델)이 다양한 도구 및 리소스와 상호작용하여 작업을 수행할 수 있도록 하는 프로토콜로, AI가 사람처럼 애플리케이션과 소통할 수 있도록 하는 핵심적인 역할을 합니다.

Rails 애플리케이션에 MCP 서버를 추가하기 위해 fast-mcp 젬을 설치하고 초기 설정을 진행했습니다. 이 과정에서 ApplicationResource 클래스 이름 충돌이 발생하여, 모든 MCP 관련 파일을 app/mcp 디렉토리 아래로 옮기고 Zeitwerk 설정을 재구성하여 MCP 네임스페이스 아래에서 로드되도록 처리했습니다.

Zeitwerk 및 도구 로딩 문제 해결

MCP::ApplicationTool.descendants를 통한 도구 등록 방식은 개발 환경에서 Rails의 eager loading 비활성화로 인해 초기화 시점에 도구 클래스가 로드되지 않는 문제를 야기했습니다. 이를 해결하기 위해 EAGER_LOAD 환경 변수를 통해 개발 환경에서도 필요시 eager loading이 활성화되도록 config/environment/development.rb를 수정하고 서버를 재시작했습니다.

클라이언트 연결 및 도구 개발

서버 실행 후 curl을 통해 SSE 연결을 확인했으며, Zed 텍스트 편집기에 내장된 MCP 클라이언트와 mcp-remote를 활용하여 LLM과 연동했습니다. SearchBuildingsToolSearchAccessLogsTool과 같은 도구를 개발하며 LLM이 여러 도구를 조합하여 복잡한 요청을 처리할 수 있는지 시험했습니다. 초기에는 도구 설명이 불충분하여 LLM이 예상과 다른 쿼리를 생성하는 문제가 발생했습니다.

상세한 도구 설명의 중요성

MCP 프로토콜은 도구의 입력 형식 지정에 한계가 있어 LLM의 오용 가능성이 높았습니다. 이를 극복하기 위해 도구의 description 필드에 입출력 형식, 오류 상태, 가능한 열거형 값, 예상되는 날짜/시간 형식, 허용되지 않는 값 등을 매우 구체적으로 기술하는 것이 필수적임을 깨달았습니다. 예를 들어, SearchAccessLogsTool의 설명은 건물 ID, 쿼리, 로그 시간 범위, 상태 목록 등을 명확히 정의하도록 개선되었습니다. 또한, Llama 3 7b와 같은 소규모 LLM의 입력 값 정규화를 위해 value.presence&.to_s&.strip&.singularize&.underscore와 같은 처리가 유용하다는 점도 확인했습니다.

결론

기존 Rails 애플리케이션에 AI를 통합하는 과정은 예상보다 훨씬 수월했으며, 단 8시간의 해커톤 동안 MCP 서버를 설정하고 클라이언트를 구성하며 수십 가지의 일반적인 지원 요청을 가속화할 수 있는 충분한 도구를 노출하는 데 성공했습니다. 이는 원격 근무 팀으로서 EU와 US 팀의 협업 시너지가 크게 발휘된 결과였습니다. 그러나 이번 통합을 통해 개발자가 고객의 고충을 파악하고 전반적인 경험을 개선하는 기회가 줄어들 수 있다는 우려도 제기되었습니다. 향후 LLM이 오작동할 경우 발생할 수 있는 피해를 방지하기 위한 권한 및 안전 장치 추가, 그리고 반복적인 업무 자동화와 고객 문제점 파악 사이의 균형점을 찾는 것이 중요한 과제로 남아 있습니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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