배달의민족 Flutter 도입과 아키텍처 설계 교훈

배달의민족은 주문접수 채널에서 Flutter를 도입하여 멀티 플랫폼 대응력을 높이고, Clean Architecture를 통해 효율적인 코드 관리를 실현했습니다. 이 글에서는 Flutter 도입과 아키텍처 설계의 과정에서 얻은 교훈을 바탕으로, 변화하는 비즈니스 요구에 맞추기 위한 혁신적인 접근을 소개합니다. 또한, 이러한 경험이 다른 기업이나 개발자에게도 유용한 전략이 될 수 있도록 공유하고자 합니다. Flutter 도입으로 인한 혁신적인 변화 배달의민족은 Flutter 도입을 통해 플랫폼 전환과 유지보수 측면에서 큰 혁신을 이루었습니다. 기존의 Windows, Android, iOS 플랫폼에 추가하여 macOS와 다양한 Android 디바이스로까지 확장할 필요성을 느꼈습니다. Flutter의 도움으로 단일 코드베이스에 의해 멀티 플랫폼을 동시에 지원할 수 있게 되었고, 이를 통해 개발자 수를 줄이고 생산성을 향상시킬 수 있었습니다. 개발자들은 각 플랫폼에 대해 반복적으로 구현할 필요가 없어졌고, 버그 수정이나 기능 변경 시에도 이전에 비해 적은 시간에 모든 플랫폼에 적용할 수 있게 되었습니다. Flutter의 도입은 크로스 플랫폼 반응형 UI 구현을 가능하게 하여, 사용자 경험의 일관성을 높였습니다. 이제 파트너들은 다양한 OS 환경에서 동일한 경험을 하게 되므로, 학습 비용도 줄어들고, 혼란이 줄어드는 장점을 경험하고 있습니다. 이러한 변화는 단순히 기술적인 접근방식이 아닌, 사업의 방향성을 전환하는 계기로 작용했습니다. 파트너사들이 원하는 효율적인 주문 관리 시스템을 제공하기 위해, 기존의 네이티브 아키텍처에서 벗어나 새로운 기술 스택으로 과감히 옮겨갔습니다. Firebase와 같은 클라우드 서비스를 활용하여 실시간 데이터 업데이트와 동기화가 가능하게 되었고, Flutter의 강점을 극대화하여 사용자 친화적인 UI/UX도 구현됐습니다. 이로 인해 즉각적인 피드백을 수렴할 수 있는 구조가 마련됐습니다. 결국 Flutter의 도입은 배달의...

MCP 서버 구현 해커톤 경험 공유


최근 LLM과 AI Agent에 대한 관심이 높아짐에 따라, 우아한형제들에서는 사내 해커톤을 통해 MCP(Model Context Protocol) 서버를 구현해보는 경험을 공유합니다. 참가자들은 LLM이 프로그램과 연동될 수 있는 프로토콜인 MCP를 배우며, 장보기 쇼핑 서비스와 연계된 기능을 구현했습니다. 이 글에서는 해커톤의 배경과 진행 과정, 그리고 결과에 대해 자세히 소개하겠습니다.

MCP 해커톤의 시작

해커톤이 시작된 날은 2025년 4월 25일, 금요일 저녁 8시였습니다. 이 날은 AI 기술과 관련된 열띤 논의가 이루어졌고, 몇몇 개발자들이 모여 MCP 서버를 구현하기로 결정했습니다. 참가자들은 MCP에 대한 사전 지식이 전혀 없었지만, 새로운 것에 도전하고 싶은 열정으로 가득 차 있었습니다. 특히, MCP의 목적이 LLM과 다양한 프로그램 간의 원활한 연결을 위한 표준 프로토콜을 만드는 것임을 파악하고, 그 가능성을 체험해보기 위해 하나의 목표를 설정했습니다.

팀원들은 배달의민족의 장보기 쇼핑 서비스와 MCP를 연계하여, 사용자가 입력한 상품 정보를 기반으로 가장 저렴한 판매자 목록을 제공하는 기능을 개발하는 데 집중했습니다. 해커톤의 각 팀원들은 샘플 코드를 분석하고, 이를 바탕으로 자신만의 MCP 서버를 구현했습니다. 이 과정에서 실제 사용자가 요청할 수 있는 API를 개발하고, MCP의 구조를 몸소 체험할 수 있었습니다.

결국, 더미 코드를 통해서도 사용자의 요청을 처리하는 기초적인 서버를 구성하였고, 아이디어를 구체화하여 MCP 프로토콜이 요구하는 형식으로 기능을 연계할 수 있었습니다. 처음 마주하는 MCP의 재미와 기대감 속에서, 각 팀원들은 개인의 역량을 최대한 발휘하여 좋은 결과물을 만들기 위해 최선을 다했습니다.

기능 구현의 과정

해커톤의 주요 목표는 여러 판매자에서 상품의 정보와 가격을 비교해 가장 저렴한 옵션을 제안하는 도구를 구현하는 것이었습니다. 이를 위해 팀원들은 사용자가 입력한 상품 목록을 받아들일 수 있는 API를 구축하는 작업에 착수했습니다.

우선, 팀원들은 공통적으로 사용할 수 있는 API의 스펙을 문서화하기 위해 Swagger를 활용했습니다. 각자 맡은 기능을 정의하고, 그에 대한 코드를 작성하는 과정에서 상대방과의 협력이 중요했습니다. 팀원들은 각자 만든 코드에 대해 리뷰를 진행하고, 개선점을 찾아 수정해 나갔습니다. 이러한 과정 속에서 서로의 작업을 이해하고, 어떻게 MCP와 연계할 수 있을지를 고민했습니다.

코드를 작성한 후, 성공적으로 MCP 서버를 실행하고 Cursor IDE에 등록하는 단계가 있었습니다. Cursor는 MCP tool을 통해 입력받은 정보를 바탕으로 서버와 연결하게 되었고, 이를 통해 상품 정보를 조회할 수 있는 기능이 완성되었습니다. 각자의 아이디어가 합쳐져 만들어진 이 기능은 단순한 데모가 아니라 실제로 사용자들에게 도움을 줄 수 있는 서비스로 다가설 수 있음을 실감하게 해주었습니다.

결과의 의미

해커톤이 끝나고 결과물이 기대에 부응하며, 팀원들은 성공적으로 상품 정보를 조회할 수 있는 시스템을 구현했다고 자부했습니다. 이 과정에서 개발자들은 원하는 기능을 구현하는 데 필요한 여러 가지 접근 방식을 배웠고, MCP의 구조와 동작 원리에 대한 깊은 이해를 쌓을 수 있었습니다.

결과적으로 팀은 주어진 목표를 단순히 달성하는 것에 그치지 않고, LLM이 프로그램과 어떻게 연결될 수 있는지에 대한 구체적인 경험을 쌓았습니다. 이 성과는 단순히 기술적인 발전을 의미하는 것뿐만 아니라, 향후 개발 과정에서 각자 분리된 주제를 연결할 수 있는 기회를 만들어주는 중요한 발판이 되었습니다.

해커톤의 결과물은 우리 팀에게 새로운 가능성을 열어주었고, 앞으로의 프로젝트에 있어서도 많은 도움이 될 것이란 확신을 주었습니다. 또한, 함께한 팀원들과의 협업은 더없이 소중한 경험으로 남아, 서로의 개발 스킬을 공유하고 성장할 수 있는 기회가 되었습니다.

이번 해커톤을 통해 우아한형제들은 MCP 서버 구현 경험을 통해 AI와 프로그램의 연동 가능성을 탐구하고, 서로 협력하여 좋은 결과를 만들어냈습니다. 다음 단계로는 이러한 경험을 바탕으로, 실제 서비스를 적용해보고 데이터를 분석하여 더욱 발전된 시스템을 구축하는 것이 필요합니다. AI 기술을 활용해 더 나은 사용자 경험을 제공하기 위해 지속적인 연구와 개발에 힘쓰겠습니다.

이 블로그의 인기 게시물

우아한형제들의 실시간 알림 혁신: SSE(Server-Sent Events)로 이룬 효율성과 안정성

우아한 디버깅 툴 개선으로 QA 업무 효율화

물어보새의 진화와 지식 공유 확장