Doggie Bus: 한 개발자가 .NET MAUI 및 Azure를 사용하여 "Uber for Dog"를 빌드한 방법
Doggie Bus는 Troy Bergeron이 설립한 뉴올리언스의 스타트업으로, 반려동물 보호자가 반려견을 어린이집, 동물병원 등에 안전하고 편리하게 데려다줄 수 있는 모바일 앱인 '반려견을 위한 우버' 서비스를 제공하고 있습니다. 평생 반려견을 사랑해온 Troy는 Doggie Bus 셔틀을 직접 운전하며 모든 강아지를 가족처럼 대합니다. 그의 목표는 반려동물 운송을 차량 공유 서비스처럼 쉽고 신뢰할 수 있도록 만들어 소유자에게 완전한 안심을 주는 것입니다.
이 비전을 실현하기 위해 Troy는 Mario DeLuca(DeLuca Technologies)와 팀을 이루었습니다. Mario는 숙련된 소프트웨어 엔지니어이자 .NET MAUI(그리고 그 이전의 Xamarin)의 초기 사용자입니다. 이들은 함께 최고의 차량 공유 서비스에 필적하는, 반려동물 보호자를 위한 맞춤형 크로스 플랫폼 모바일 앱을 개발했습니다.



진짜 사람들, 진정한 열정
2024년 초, Doggie Bus는 iOS 및 Android에서 출시되어 반려동물 소유자가 쉽게 승차할 수 있도록 합니다. 반려동물 안전에 대한 Troy의 개인적인 헌신은 이 서비스의 핵심입니다. 모든 신규 고객(인간 및 반려견)을 만나고 투명성을 통해 신뢰를 제공합니다. 보호자는 Doggie Bus를 지도에서 실시간으로 추적할 수 있고 픽업 또는 하차할 때마다 알림을 받을 수 있습니다.
부모만큼이나 보호본능이 강한 반려동물 보호자는 이러한 가시성을 좋아합니다. 이 앱을 사용하면 "복실한 아기"가 항상 어디에 있는지, 보살핌을 받고 있다는 사실을 알 수 있어 안심할 수 있습니다.
기술 측면에서 Mario는 보이지 않는 영웅이었습니다. 오랜 C# 개발자로서 그는 Doggie Bus를 위해 .NET을 처음부터 끝까지 사용하는 것에 매우 기뻐했습니다. 이를 통해 그는 두 플랫폼에서 세련된 네이티브 모바일 경험을 혼자서 만들 수 있었습니다. 파트너십은 원활하게 작동했습니다. Troy는 앱의 첫 번째 사용자로서 깊은 도메인 통찰력과 지속적인 피드백을 제공하며(관리자 모드를 통해 일일 경로를 운영), Mario는 반복 작업을 신속하게 수행했습니다. 두 가지 모두 Troy의 농담처럼 "개도 사용할 수 있을 정도로 쉬운 서비스"를 만들겠다는 사명감에서 비롯된 것입니다.
우리 서비스는 개도 할 수 있을 정도로 쉬워야 합니다."
함께하는 더 나은 해결책 - .NET MAUI로 해결하기
도전 과제: Doggie Bus는 두 플랫폼에서 고품질 모바일 앱을 필요로 했지만, 이중의 노력을 들이지 않고도 이를 달성해야 했습니다. 또한 실시간 통신(실시간 탑승 추적)과 사용자에게 신뢰감을 주기 위한 세련된 사용자 친화적 UI가 필요했습니다. 소규모 스타트업으로서 그들은 제한된 시간과 예산으로 이 모든 것을 제공해야 했습니다.
.NET 솔루션: Azure는 모바일 앱에 .NET MAUI를 선택하여 단일 C# 코드베이스에서 iOS 및 Android를 대상으로 지정할 수 있습니다. 이 결정은 한 코드베이스가 두 개의 네이티브 앱을 생성하므로 개발 시간과 비용을 즉시 절반으로 줄였습니다. ".NET MAUI를 통해 플랫폼 간에 코드의 90% 이상을 공유할 수 있었습니다. 이러한 효율성 덕분에 더 빠르게 움직이고, 유지 관리 오버헤드를 줄이며, iOS와 Android 모두에서 일관된 경험을 제공할 수 있었습니다."라고 Mario는 덧붙였습니다. .NET MAUI 프레임워크는 대규모 팀 없이도 필요한 기본 성능과 유연성을 제공했습니다. 솔루션의 주요 측면은 다음과 같습니다.
- 통합 앱 코드베이스: Doggie Bus 앱 코드의 ~90%가 플랫폼 간에 공유됩니다. 핵심 기능(UI 레이아웃, 탑승 로직, 데이터 모델)은 .NET에서 한 번 작성되었으며, iOS와 Android 모두에서 네이티브로 실행됩니다. 플랫폼별로 조정이 필요한 부분은 몇 가지에 불과했습니다(예: 작은 버스 아이콘에 부드럽게 애니메이션을 적용하기 위해 각 OS에서 사용자 지정 맵 렌더러를 사용). 이 단일 코드베이스 접근 방식은 기능 동등성을 보장하고 유지 관리를 간소화합니다.
- Azure 기반 백 엔드: 팀은 인증, 일정 및 데이터 저장을 처리하기 위해 ASP.NET Core 및 Azure를 사용하여 클라우드 백엔드를 구축했습니다. Azure SignalR을 사용하여 앱은 실시간 업데이트를 달성합니다. Troy가 운전하는 동안 밴의 GPS 위치가 클라우드로 전송되고 즉시 반려동물 소유자의 휴대폰으로 푸시되어 버스가 이동하는 모습을 지도에서 실시간으로 확인할 수 있습니다. 모든 데이터(일정, 반려동물 프로필, 예방 접종 기록)는 Entity Framework를 통해 Azure SQL 데이터베이스에 저장됩니다. 또한 백엔드는 Apple 및 Google과 통합되어 간편하게 로그인할 수 있습니다. 이 엔드투엔드 Microsoft 스택(MAUI 앱 + Azure 서비스)은 처음부터 안정성과 확장성을 보장합니다.
- 최신 개발 도구 및 라이브러리: Azure는 풍부한 .NET 에코시스템을 활용하여 개발을 가속화했습니다. 그는 준비된 UI 구성 요소와 효과를 위해 .NET MAUI 커뮤니티 툴킷을 사용하고, 인증 흐름과 같은 것들을 위해 오픈 소스 라이브러리를 활용했습니다. XAML 핫 다시 로드와 같은 생산성 기능은 신속한 UI 조정을 가능하게 했고, GitHub Copilot은 AI 쌍 프로그래머로 기능하여 상용구 코드를 생성하고 개발 속도를 높였습니다. 결과적으로 Doggie Bus는 개념에서 기능이 풍부하고 세련된 앱으로 발전하는 데 전통적인 다중 팀 개발에 비해 훨씬 짧은 시간만 소요되었습니다.
.NET MAUI를 사용해야 하는 이유는 무엇인가요? 플랫폼 간 효율성 외에도 Doggie Bus는 성능과 통합된 에코시스템을 위해 .NET을 선택했습니다. 이 앱은 AOT(미리 실행) 컴파일을 사용하므로 이전 Android 휴대폰에서도 "부드러운" 성능으로 실행됩니다. 클라이언트와 서버 모두에서 C#을 사용함으로써 팀은 전체 프로젝트에서 코드와 기술을 공유할 수 있습니다. 예를 들어 데이터 모델은 한 번 정의되고 양쪽 끝에서 재사용되어 버그와 불일치를 줄입니다.
Mario는 다른 프레임워크를 잠시 고려했지만, Xamarin으로 앱을 성공적으로 출시한 경험이 있는 그는 네이티브 수준의 결과를 제공하는 .NET MAUI를 신뢰했습니다. "제 생각에는 당연한 선택이었습니다."라고 그는 MAUI를 선택한 이유를 설명했습니다. 이러한 통합 접근 방식은 iOS/Android 개발자를 별도로 고용하고 새로운 언어를 배울 필요가 없으므로 소규모 회사에게는 큰 이점이 됩니다. 실시간 지도 및 소셜 로그인 구현과 같은 문제도 .NET의 유연성과 라이브러리를 통해 원활하게 해결되었습니다.
움직이는 맵 핀 애니메이션을 미세 조정하는 등 장애물이 발생할 때마다 .NET을 사용하면 막다른 골목에 부딪히지 않고 사용자 지정 솔루션을 사용할 수 있습니다. 간단히 말해, .NET은 하나의 플랫폼에서 필요한 모든 것을 제공하므로 Doggie Bus 팀은 더 빠르고, 더 저렴하고, 더 즐겁게 개발할 수 있습니다.
.NET MAUI는 개발 비용을 50% 이상 줄이는 데 도움이 되었습니다. 단일 코드베이스와 공유 백엔드 로직을 통해 작업량을 두 배로 늘리지 않고도 iOS와 Android 모두에 고성능 네이티브 앱을 제공했습니다."
영향과 앞으로의 길
반려동물 소유자를 즐겁게: Doggie Bus는 출시 이후 고객이 반려동물 운송을 관리하는 방식을 혁신했습니다. 이제 앱에서 예약하는 데 몇 초밖에 걸리지 않으며, 예전의 전화 통화나 문자 메시지를 대체했습니다. 몇 번의 탭으로 반려동물 소유자는 픽업을 예약할 수 있으며, 서류 작업이나 번거로운 과정이 필요하지 않습니다. 앱은 중요한 순간(버스가 접근할 때, 개가 픽업될 때, 하차가 완료될 때)에 자동 알림을 보내므로 소유자는 걱정하거나 궁금해할 필요가 없습니다.
특히 실시간 추적 기능을 좋아하는데, Doggie Bus 아이콘이 지도 위에서 실시간으로 움직이는 모습을 보면 안심이 되고 재미도 있습니다. Troy는 "알림에 대한 칭찬을 많이 받습니다."라고 말하며, 많은 사용자들이 이 서비스가 매우 사용하기 쉽다고 말합니다. 이러한 편리함과 투명성은 지역 반려동물 소유자들 사이에서 강력한 채택을 이끌어냈습니다. 이제 많은 클라이언트는 자신의 일상에서 Doggie Bus를 한 주에 여러 번 예약하고 있으며, 신뢰할 수 있고 안전하다는 확신을 가지고 있습니다.
Troy의 운영을 위해 .NET 솔루션은 즉각적인 개선을 가져왔습니다. 모든 일정 관리와 기록 보관이 100% 디지털화되었으며, Troy는 "모든 것이 하나의 앱에 있으며 문서상 기록이 없다"고 말합니다. 더 이상 클립보드나 수동 로그가 필요하지 않으며, 앱의 관리자 기능을 통해 매일의 경로를 관리하고, 개 프로필 및 예방접종 기록을 확인하며, 결제를 모두 한 곳에서 처리할 수 있습니다.
이로 인해 작업이 간소화되고 오류가 감소했습니다. Troy는 서류 대신 강아지를 관리하는 데 집중할 수 있습니다. 재정적으로 .NET을 사용함으로써 회사는 개발 비용을 크게 절감할 수 있었습니다. 별도의 네이티브 앱을 구축하려면 두 명의 개발자나 비싼 아웃소싱이 필요했을 것이며, 이는 감당할 수 없는 비용이었습니다. 대신 한 개발자가 전체 제품을 제공했습니다.
Mario는 .NET MAUI를 선택함으로써 "개발 비용을 대폭 절감"할 수 있었고, 이는 Doggie Bus의 출시에 결정적인 역할을 했다고 평가했습니다. 적은 예산에도 불구하고 최종 앱은 훨씬 더 큰 경쟁사와 동등한 세련된 전문적인 품질을 달성했습니다. 기술 선택은 또한 향후 유지 관리를 간소화했습니다. 새로운 기능을 한 번 추가하면 두 플랫폼 모두에 나타나 지속적인 비용을 낮게 유지할 수 있습니다.
견고한 기술 기반 덕분에 Doggie Bus는 확장할 준비가 되었습니다. Azure의 클라우드 네이티브 아키텍처는 더 많은 차량이나 새로운 위치를 쉽게 지원할 수 있으며, 이는 Troy의 서비스 프랜차이즈 계획과 일치합니다. 팀은 동일한 앱과 백엔드를 최소한의 변경으로 확장할 수 있다는 것을 알고 다른 도시로의 확장을 이미 탐색하고 있습니다. 그들은 또한 예약을 위한 웹 포털(아마도 Blazor WebAssembly로 구축될 것)을 계획하고 있으며, 기존 .NET 코드의 상당 부분을 재사용할 수 있습니다. .NET을 사용하면 확장이 사후 고려가 아닌 기본 제공으로 이루어지며, 플랫폼의 다용성 덕분에 모바일, 웹 및 미래 플랫폼이 모두 하나의 코드베이스와 기술 세트를 공유할 수 있습니다.
Troy와 Mario는 지금까지의 여정을 되돌아보며 .NET을 통해 아이디어를 현실로 만들 수 있었다고 강조합니다. "마리오는 제 꿈을 실현시켜 주었습니다."라고 Troy는 말했으며 Doggie Bus를 실현해 준 기술과 재능에 감사를 표했습니다. Mario는 도구에 대한 칭찬을 아끼지 않았습니다. ".NET이 꿈을 실현시켜 줬습니다." 그는 플랫폼이 소규모 팀이 초기 기대치를 넘어 앱을 제공할 수 있도록 지원했다고 말했습니다. Mario는 계속 이야기했습니다. "이것은 모바일 앱이 아니라 성장을 위해 구축된 확장성 있는 클라우드 연결 플랫폼입니다. .NET MAUI Azure를 통해 간결하고 효율적이며 확장하도록 설계된 미래의 준비 기반을 만들었습니다.". Doggie Bus의 성공은 행복한 반려동물 소유자, 번창하는 비즈니스, 성장의 기반으로 증명됩니다. .NET이 운전석에 앉은 이 "반려견을 위한 Uber"는 자신 있게 도로를 달리고 있으며, 그 여정은 이제 막 시작되었습니다.
.NET과 Microsoft를 사용하면 단순히 소프트웨어를 구축하는 것이 아니라 비전을 실제 솔루션으로 전환할 수 있습니다. 꿈이 현실이 되는 곳입니다."
시작할 준비가 되셨나요?
단계별 자습서는 컴퓨터에서 .NET MAUI을(를) 실행하는 데 도움이 될 것입니다.