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

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

제민희 AI UX라이터의 개발 여정과 성과

우아한형제들이 새롭게 개발한 AI UX라이터 ‘제민희’는 UX라이터와 개발자들이 협력하여 많은 시행착오를 겪으며 완성한 프로젝트로, 디지털 프로덕트에서 사용자의 상호작용을 원활하게 돕는 역할을 합니다. 이 과정에서 문제 정의, 기술 검증, RAG 기반의 AI 발전 등 다양한 단계들이 있었으며, 이를 통해 효율적인 라이팅 업무를 구현하기 위해 노력했습니다. 따라서 제민희는 앞으로 사용자의 의도를 더욱 깊이 이해하고 창의적인 라이팅을 지원하는 목표로 진화해 나갈 것입니다.

‘진짜 문제’ 정의와 효율화의 시작

제민희 프로젝트의 첫 단추는 문제를 정의하는 것이었습니다. 프로젝트 초반, UX라이터와 개발자는 서로의 전문성에 대한 이해가 부족했습니다. UX라이터는 자기의 역할과 필요성에 대해 설명했지만, 개발자는 기술적 제약을 먼저 논의했습니다. 여기서 문제가 다소 비협조적으로 엉켜버린 것입니다. 이러한 상황을 극복하기 위해, UX라이터들은 기존의 작업 요청을 분석했습니다. 그 결과 ‘가이드 원칙의 일관성 체크’와 ‘의미 전달을 명확히 하기 위한 문구 수정’ 요청이 전체의 상당 부분을 차지하고 있다는 사실을 발견했습니다. 한마디로, 규칙을 패턴화할 수 있는 여지가 굉장히 크다는 것이었습니다. 이를 기반으로 간결하고 일관된 답변을 전달하는 방향으로 범위를 좁히고, 기술적 판단 기준을 세우는 데 성공했습니다. 이후, 프로젝트는 기존 라이팅 업무의 비효율성 문제를 해결하기 위해 ‘자동화’라는 대안을 중심으로 구성하게 됩니다. 하지만 비록 그 길이 순조롭지만은 않았습니다. 규칙 기반 툴을 구현하기 위한 기술 검증 단계에서는 예상한 것보다 많은 복잡성이 뒤따랐고, 각종 문장부호, 날짜 및 금액 표기 등 다양한 규칙을 포함해야 했습니다. 이에 따라, 빠르게 적용할 수 있는 기존 맞춤법 검사기나 오픈소스 형태소 분석기의 활용 가능성을 점검하게 되었습니다. 그러나 이 과정에서 업체의 기술 지원 중단이나 방대한 데이터 처리의 어려움 등 많은 도전에 직면하게 되었고, 이로 인해 규칙 기반 툴이 현실화하는 데 한계가 있다는 결론에 이르게 되었습니다. 개발자들은 문제 해결을 위해 규칙 기반 접근법을 유지하며 고민하기로 했고, 이는 곧 방향 전환으로 이어지게 됩니다.

AI 친화적인 가이드 설계와 컨텍스트 엔지니어링

규칙 기반 접근법이 실패로 끝난 후, 팀은 AI를 활용한 검색 증강 생성(RAG)이라는 새로운 대안을 모색했습니다. 데이터의 일관성을 높이고 사용자 제안의 신뢰도를 향상시키기 위해 도입된 이 방법은 AI가 먼저 참고 자료를 검색한 다음 답변을 생성하게 하는 방식입니다. RAG가 구현되면서, UX라이터들은 기존의 사람 친화적 문구를 AI 중심으로 변환하기 위해 많은 노력을 기울였습니다. 예를 들어, 특정 문구에 대한 직관적인 해석이 아닌 명확한 지침을 텍스트로 작성해야 했습니다. 이러한 과정을 통해, AI가 이해하기 쉬운 형태의 가이드를 만들고, 사용자에게 정확한 정보를 전달하는 것이 가능해질 수 있었습니다. 특히, AI가 스스로 최적의 답변을 할 수 있도록 명확한 작업 규칙을 디자인하는 것 또한 후속 목표로 이어졌습니다. UX라이터는 AI가 의도한 대로 사고하고 답변할 수 있도록 '정보 환경'과 '사고 과정'을 구성하는 작업을 통해 ‘컨텍스트 엔지니어링’이라는 개념을 적용하였습니다. 이 과정에서 요청 처리 순서, 의사결정 과정, 예외 처리 및 답변 포맷 등을 표준화하여 업무 전개가 더욱 체계화될 수 있었습니다. 이를 통해 사용자는 동일한 경험을 느낄 수 있었고, AI의 응답 형태도 획일화되었습니다. 이처럼 명확한 규칙과 일관된 답변 포맷을 설계함으로써 제민희는 더욱 신뢰할 수 있는 동료로 자리매김하게 되었습니다.

제민희의 구현과 향후 발전 방향

제민희의 프로젝트가 마무리 단계에 이르러서는 개발자와 UX라이터의 전문성이 균형을 이루어야 했습니다. 다양한 LLM(Large Language Model) 후보군 중에서 제민희에 적합한 AI 모델을 선정하는 과정이 그 중 하나였습니다. 이를 위해, 각 모델의 한국어 이해도, 응답 속도, 멀티모달 지원 여부, 논리적 추론 능력을 평가하여 Gemini라는 모델을 최종 선택으로 결정했습니다. Gemini는 설계 초기 단계부터 특정한 추론을 강조하고 있어 복잡한 문장을 다루는 데 취약점을 줄일 수 있었습니다. 이와 함께, 컨텍스트를 효과적으로 유지하려는 노력도 기울였습니다. 추가적으로, RAG의 개념을 효과적으로 구현하기 위한 방안으로, UX라이터가 작성한 가이드를 바탕으로 AI에게 필요한 지식을 그대로 프롬프트에 통합하는 방식을 채택하기로 했습니다. 이 과정에서 서버 없이도 대화의 맥락을 유지하기 위해 브라우저의 IndexedDB 기술을 활용했습니다. 이는 사용자가 보다 편리하게 질문할 수 있도록 하여 AI의 정확도를 높이는 데 기여했습니다. 또한, 사용자의 언어를 시스템의 언어로 변환할 수 있도록 설계하여 다양한 사용 패턴을 확보하기 위해 지속적인 데이터 축적도 가능해졌습니다.

이 모든 과정을 통해 제민희 AI UX라이터는 본격적인 사용자 피드백과 데이터 수집에 발을 내딛게 되었습니다. 사용자의 의도를 깊이 이해하고, 기존의 비효율을 넘어서 창의적인 문구 작성에 기여하는 든든한 동료로 자리매김하기 위해 지속적으로 개선해 나갈 것입니다. 앞으로의 여정에 많은 응원 바랍니다!

이 블로그의 인기 게시물

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

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

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