12월, 2025의 게시물 표시

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

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

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

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

장바구니 추천 모델 개선 사례 공유

배달의민족은 음식 배달 서비스뿐만 아니라 장보기도 신속하게 제공하는 기능을 갖추고 있습니다. 특히 고객들이 장바구니에 담은 상품들을 기반으로 연관 상품 추천 시스템을 도입하여, 실제 구매 맥락을 이해하고 알맞은 보완 상품을 제안하는 전략을 추진하고 있습니다. 이번 글에서는 이러한 장바구니 추천 모델 개선 사례를 공유하며, 고객 경험을 어떻게 향상시켰는지에 대해 살펴보겠습니다. 장바구니 추천 시스템의 필요성 장바구니 추천 시스템은 고객의 구매 행동을 이해하고, 실질적인 쇼핑 경험을 개선하는 데 있어 매우 중요한 역할을 합니다. 초기에는 Item2Vec 방식으로 구현된 이 시스템은 상품 간 임베딩 유사도를 기반으로 추천을 진행했습니다. 그러나 이로 인해 대체재 편향과 시퀀스 맥락 부재 문제 풀이 나타났습니다. 고객이 장바구니에 담은 상품들의 구체적인 맥락을 고려하지 않았기 때문에, 추천의 적합성이 낮아지는 결과를 가져왔습니다. 이러한 문제를 해결하기 위해, 배달의민족은 2-stage 파이프라인 방식으로 장바구니 추천 모델을 개선했습니다. 첫 번째 단계에서는 그래프 기반의 상품 및 카테고리 임베딩을 생성하여 상품 간의 구조적 관계를 명확하게 이해하도록 하였습니다. 두 번째 단계에서는 Transformer 모델을 활용하여 고객이 장바구니에 담은 상품들의 맥락을 분석하고, 다음으로 담을 상품을 예측하도록 설계되었습니다. 이러한 개편은 장바구니 추천 시스템의 성능을 획기적으로 향상시켜, 고객에게 보다 효과적인 추천을 제공할 수 있는 기반이 되었습니다. 구매 맥락의 중요성 구매 맥락은 장바구니 추천 모델의 핵심 요소입니다. 고객이 장바구니에 담는 상품의 순서는 단순히 제품의 나열이 아니라, 고객의 구매 의도를 내포하고 있습니다. 이를 반영하지 못한 기존 모델은 고객의 구매 패턴을 충족하지 못하고 효율적인 추천을 제공하기 어려웠습니다. 배달의민족의 개선된 모델에서는 상품 간의 관계뿐만 아니라 고객이 상품을 담는 순서를 함께 고려합니다. 예를 들어, 고객이...

커머프팀의 문화 리팩토링 여정

커머프팀은 조직 내 문화 리팩토링을 통해 유연하고 효율적인 팀 운영 방식을 구축한 사례를 공유합니다. 이 과정에서 팀은 경계 없는 조직 구조를 도입하고, 절차와 소통 방식을 지속적으로 개선하여 팀의 생산성과 협업 능력을 높여왔습니다. 커머프팀의 문화 리팩토링 여정은 다양한 시행착오를 통해 얻은 소중한 교훈으로, 비슷한 상황에 있는 팀에게 유익한 인사이트가 될 것입니다. 경계 없는 조직 구조를 만든 커머프팀 커머프팀은 큰 규모의 팀 구조 속에서 효율적으로 운영하기 위해 기존의 조직 구조를 재검토해야 했습니다. 각 구성원이 특정 업무에 너무 강하게 묶이게 되는 경직된 구조는 급변하는 비즈니스 환경에 유연하게 대처하는 데 어려움을 겪게 만들었습니다. 이에 따라 팀은 '경계 없는 파트'라는 새로운 조직 구조를 채택했습니다. 이를 통해 각 팀원은 고정된 역할 대신 여러 영역에서 자유롭게 활동하며 전체 서비스의 흐름을 이해하고 기여할 수 있는 계기가 마련되었습니다. 팀원들은 명확한 목표인 'ONE COMMERCE'를 향해 나아가는 동시에, 특정 도메인에 얽매이지 않고 다양한 영역에서 협력하는 문화를 형성하였습니다. 조직 체계를 리팩토링하면서 팀은 특정 영역에 고립되지 않고 서로의 업무를 유동적으로 지원할 수 있는 환경을 조성했습니다. 이렇게 함으로써 커머프팀은 각 팀원의 기술적 깊이를 더해 서비스의 통합과 혁신을 동시에 이끌어낼 수 있었습니다. 소통 방식을 재정의한 문화 리팩토링 커머프팀의 많은 구성원은 경계 없는 조직에서 효과적으로 협력하기 위해 소통 방식을 혁신했습니다. 업무의 유연성과 팀원 간의 상호작용을 여행하면서 정보의 흐름이 정체되는 문제를 해결하기 위해 팀은 정기적인 회의뿐만 아니라 비동기적 소통 방법도 도입했습니다. 강화된 소통 체계를 통해 팀원들은 문제를 자유롭게 토론하고, 각자의 경험과 지식을 공유할 수 있었습니다. 팀이 도입한 '불판'이라는 공간은 기술적인 논의를 자유롭게 진행...

잃어버린 접근성 회복 여정

웹 서비스를 개발할 때, 종종 접근성을 간과하는 경우가 많습니다. 하지만 접근성을 소홀히 하면 사용자에게 큰 불편을 초래할 수 있으며, 웹의 창시자 팀 버너스 리의 말처럼 모든 사람이 쉽게 접근할 수 있어야 합니다. 본 글에서는 실제 사용자의 경험을 바탕으로 잃어버린 접근성을 회복한 여정에 대해 소개하겠습니다. 탐색 단위 만들기: 유용한 랜드마크와 머리말 접근성을 어떻게 회복할 수 있을까요? 첫걸음은 스크린 리더 사용자들에게 의미 있는 탐색 단위를 제공하는 것입니다. 우리는 페이지의 구조를 개선하기 위해 랜드마크와 머리말을 추가했습니다. 랜드마크는 웹 페이지의 주요 섹션을 식별하는 역할을 하며, 사용자가 원하는 정보를 빠르게 찾도록 돕습니다. 반면, 머리말은 각 섹션의 내용을 간결하게 요약해 주어, 사용자들이 페이지를 쉽고 효율적으로 탐색할 수 있도록 합니다. 우리는 이 두 가지 요소를 명확하게 설정하여 사용자가 페이지 내에서 자신이 원하는 정보를 금방 찾을 수 있도록 돕기로 결정했습니다. 이 작업을 진행하면서, 문서의 시맨틱 구조가 개선되었으며, 페이지 내에서 모든 사용자가 유용한 정보를 빠르게 찾아낼 수 있는 환경을 조성하는 데 기여했습니다. 또한, 실제로 스크린 리더를 사용해보며 개선된 탐색 단위를 확인하였습니다. 랜드마크와 머리말이 적용된 페이지를 탐색할 때, 사용자들은 이전보다 훨씬 빠르고 쉽게 원하는 정보를 찾을 수 있었습니다. 예를 들어, "혜택"이나 "다른 사람들이 함께 본 상품" 같은 머리말을 통해 쉽게 접근할 수 있었습니다. 이러한 구조적 변화는 사용자가 정보를 찾는 데 필요한 시간을 절약해 주었고, 이는 스크린 리더 사용자들뿐만 아니라 모든 사용자에게도 이점을 제공합니다. 실제로 스크린 리더 사용자들은 이러한 개선 덕분에 페이지를 보다 쉽게 탐색하고, 원하는 기능이나 정보를 보다 정확하게 파악하게 되었습니다. 파편화된 텍스트 통합하여 사용자 경험 향상 두 번째 접근성 회복의 여정...

우테코 7기 크루 서비스 론칭 경험 공유

우아한테크코스(우테코) 7기 크루들은 10개월 동안 다양한 서비스 개발 경험을 쌓았습니다. 이 과정에서 기획부터 개발까지 전부 직접 수행하며 함께 성장하는 기회를 가졌습니다. 그들의 경험을 바탕으로 여러 서비스를 론칭하게 되었으며, 많은 사용자들에게 유용한 가치를 제공하는 데 주력했습니다. 직접 기획하고 개발한 서비스 우테코 7기 크루들은 다양한 프로젝트를 통해 기획과 개발 과정을 직접 경험했습니다. 각 팀은 아이디어에서 출발하여 실제 서비스로 구현하기까지 모든 단계를 책임지고 진행했습니다. 이는 크루들에게 기술적 능력뿐만 아니라 문제 해결 능력, 소통, 협업의 중요성을 깨닫게 하는 소중한 경험이었습니다. 첫 번째 서비스인 픽잇은 함께하는 식사 선택의 고민을 줄이기 위해 개발되었습니다. 이 서비스는 참여자들의 취향을 반영하여 최적의 식사 선택을 돕는 플랫폼입니다. 팀 내에서 의견이 엇갈리는 순간에도 빠른 프로토타입 개발과 사용자 피드백을 통해 지속적으로 서비스 방향을 조정했습니다. 크루들은 이러한 과정에서 "협업은 단순한 역할 분담이 아니라 서로의 판단 기준을 맞추는 일"이라는 귀중한 교훈을 얻었습니다. 또한, 보따리는 사용자가 잊지 않고 물건을 챙길 수 있도록 돕는 체크리스트 서비스로 탄생했습니다. 팀원들은 "사용자의 기억을 대신 챙겨주는 동반자"를 목표로 하여 기능을 설계하고 개선했습니다. 개인 체크리스트 기능을 바탕으로 팀 간 협업 체크리스트를 통해 함께 짐을 챙기는 새로운 경험을 제공하고자 했습니다. 이 과정에서 "기술은 문제를 해결하는 도구일 뿐"이라는 것을 다시 한번 느꼈습니다. 실제 사용자 피드백과 서비스 개선 크루들은 서비스를 개발하는 과정에서 수차례의 데모데이를 통해 실제 사용자로부터 피드백을 받았습니다. 이는 서비스의 방향성을 조정하고, 지속적으로 개선하는 기회를 제공합니다. 사용자 피드백의 중요성을 체감한 크루들은 초기 기획안에서 벗어나 유연하게 대처할 줄 아는 능력을...

AI 테스트 자동화 플러그인 개발과 성과

AI와 함께하는 테스트 자동화는 최근 소프트웨어 개발의 혁신적인 방법론으로 부상하고 있으며, 특히 IntelliJ 기반의 플러그인 개발을 통해 획기적인 성과를 이루었습니다. 작업 시간 단축과 코드 품질 향상은 물론, 팀의 협업을 강화해 개발자가 한층 쾌적한 환경에서 작업할 수 있도록 합니다. 이러한 자동화의 가능성을 탐구하고, 실제로 적용된 사례를 통해 어떤 성과를 이끌어냈는지 알아보겠습니다. AI 기반 테스트 자동화의 필요성 저희 팀에서는 여러 레포지토리에서 필수적인 테스트코드는 수행하고 있으나, 엣지케이스와 예외 상황을 다루는 데에는 자원이 부족했습니다. 이로 인해 발생한 커버리지 문제는 운영의 안정성에 직접적인 영향을 미쳤습니다. 어려운 테스트 케이스를 작성해야 하지만 압박감 속에서 그에 따른 중요한 테스트 코드 작성이 지연되고 말았습니다. 이러한 문제를 해결하기 위해 AI 테스트 자동화 플러그인을 개발하게 된 것은 팀 전체의 업무 부담을 덜고, 코드 품질을 높이기 위한 필수적인 접근이었습니다. 플러그인을 통해 컴파일 보장 템플릿을 생성하여 Amazon Q와 연계할 수 있었고, 이를 통해 단 30분 만에 100개의 테스트를 자동으로 생성하는 성과를 거두었습니다. AI와의 협업, 플러그인 개발 과정 플러그인 개발의 첫 번째 목표는 팀 내에서 사용하고 있는 다양한 테스트 패턴을 자동으로 학습하는 것이었습니다. 이를 통해 기존의 수작업으로 작성해야 했던 반복 작업을 통해 팀의 시간을 절약하는 동시에, 기존 테스트의 손실 없이 새로운 테스트를 추가할 수 있도록 했습니다. 초기 버전에서는 AI가 코드 생성의 대부분을 담당하는 방식으로 시작했으나, 코드의 정확성 및 컴파일의 안정성을 보장하는 데에는 한계가 있었습니다. 항목별 테스트 생성을 위한 다양한 경우의 수를 고려하고, class와 method의 종속성을 정확하게 반영하기 위한 구조적 분석이 필요했습니다. 이러한 점에서 플러그인은 AI가 필요로 하는 템플릿을 보장하고, 코드의 정확성 및 동작 가능...

장애 탐지 시스템의 효과적 구축과 성과

배달의민족은 고객들에게 항상 기대되는 식사 경험을 제공합니다. 그러나 시스템 장애가 발생하면 이러한 기대가 무너질 수 있습니다. 이를 방지하기 위해 우아한형제들은 장애를 놓치지 않고 신속하게 탐지하는 방법을 공유하며, 이 시스템의 도입으로 장애 대응이 얼마나 효과적으로 이루어질 수 있는지 설명합니다. 장애 탐지 시스템 구축의 필요성 우아한형제들은 고객의 예상을 지키기 위해 장애 탐지 시스템을 구축해야 할 필요성을 느꼈습니다. 특히, 배달의민족의 서비스가 고객들에게 중요한 순간에 영향을 미칠 수 있는 만큼, 장애가 발생했을 때 이를 즉시 탐지하고 대응하는 것이 필수적입니다. 서비스의 변화에 따라 다양한 요인이 장애를 유발할 수 있으므로, 이에 대한 체계적인 모니터링이 필요합니다. 장애 탐지 시스템은 CPU 사용률, 메모리 사용량 등 전통적으로 사용되던 모니터링 방식으로는 모든 장애를 놓칠 수 있다는 사실을 인식했습니다. 이러한 한계를 극복하기 위해 우아한형제들은 서비스 이상 탐지 시스템을 구축하였습니다. 이 시스템은 서비스 지표를 실시간으로 모니터링하여 고객 경험에 직접적인 영향을 미칠 수 있는 사항을 주의 깊게 살펴볼 수 있도록 설계되었습니다. 서비스 지표는 실시간 로그인 수, 주문 수, 결제 성공률 등의 항목으로 구성되어 있으며, 이는 고객의 행동과 밀접한 관계를 맺고 있습니다. 이러한 데이터를 통해 장애 발생을 조기에 탐지하고 신속한 대응을 할 수 있는 기반이 마련되었습니다. 따라서 이 시스템의 구축은 우아한형제들이 장애로부터 고객을 지킬 수 있도록 하는 매우 중요한 첫걸음이 되었습니다. 장애 탐지 시스템 성과 장애 탐지 시스템을 도입한 후, 우아한형제들은 많은 성과를 달성하게 되었습니다. 무엇보다 가장 두드러진 성과는 경보 정밀도의 향상이었습니다. 초기 시스템에서는 경보가 발생해도 오탐인지 실제 장애인지 확인이 어려워, 직원들의 피로도와 걱정을 가중시켰습니다. 하지만 새롭게 구축된 서비스 이상 탐지 시스템의 도입으로 경보 정밀도...