.NET 크로스 플랫폼 대결: MAUI vs Uno vs Avalonia (그리고 Avalonia의 승리 이유) | Aaron LaBeau


.NET 크로스플랫폼 프레임워크 비교: MAUI vs Uno vs Avalonia

#dotnet #cross-platform avalonia maui #desktop-development

30년 경력의 .NET 개발자가 SwiftUI로 만든 도구를 Windows로 포팅하면서 MAUI, Uno Platform, Avalonia 세 프레임워크를 직접 비교합니다. Microsoft의 UI 프레임워크 포기 역사(Windows Forms, WPF, Silverlight, UWP, Xamarin)를 언급하며, MAUI의 macOS 성능 저하, Linux 미지원, 서명/패키징 문제를 지적합니다. Uno Platform은 뛰어난 개발 도구와 Hot Design 기능을 갖췄으나 복잡한 프로젝트 구조가 단점입니다. 최종적으로 Avalonia의 우수한 패키징 솔루션(Parcel), SukiUI 라이브러리, Google Flutter팀과 협력한 Impeller 렌더링 엔진 도입 계획 등으로 Avalonia를 선택했으며, MAUI Linux 지원에도 Avalonia 렌더링 레이어가 사용된다는 점이 기술력을 입증합니다.


프로젝트 배경: Edge Debug Helper의 Windows 지원 필요성

저자는 Ditto의 Developer Advocate로서 오프라인 우선 모바일 데이터베이스 플랫폼 관련 업무를 담당합니다. Ditto는 피어-투-피어 메시 네트워킹과 실시간 데이터 동기화를 지원하며, CRDT(Conflict-Free Replicated Data Types)를 사용해 Bluetooth, Wi-Fi, LAN을 통한 기기 간 동기화를 처리합니다.

  • Edge Debug Helper: Ditto 앱 디버깅용 도구로, SwiftUI로 macOS 버전을 빠르게 개발함
  • Windows 지원 필요성: Windows 개발자들과 협업하면서 크로스플랫폼 지원이 필수가 됨
  • Rust 시도: 진정한 크로스플랫폼 기능을 제공하나, UI 라이브러리가 제한적이고 학습 곡선이 가파름
  • .NET 회귀 결정: C#의 생산성과 친숙함으로 .NET 프레임워크 검토 시작

Microsoft의 플랫폼 포기 문제

Microsoft는 UI 프레임워크에서 지속적인 포기 패턴을 보여왔습니다.

  • Windows Forms: 기술적으로는 지원되나 구식임
  • WPF: 20년 된 프레임워크로 Windows 전용임
  • Silverlight: 수많은 개발자를 고립시킨 채 포기됨
  • UWP: “한 번 작성, 어디서나 실행” 약속 후 공식 중단됨
  • WinUI: 불확실한 미래를 가짐
  • Xamarin: 2024년 5월 지원 종료와 함께 MAUI로 강제 마이그레이션됨
  • MAUI: 최신 시도이나 데스크톱 앱에 적합하지 않음

Avalonia 블로그의 WinUI vs WPF vs UWP 비교 글이 Microsoft의 깨진 전략을 잘 분석합니다.

MAUI: 실망스러운 선택

MAUI는 Microsoft의 공식 크로스플랫폼 프레임워크이나, 데스크톱 앱 대상으로는 문제가 많습니다.

macOS 성능 문제

  • Mac Catalyst 사용으로 네이티브 AppKit이 아닌 iOS 앱이 어색하게 데스크톱에 이식된 형태임
  • 개발자 도구로서 필요한 반응성을 제공하지 못함

테마 적용의 어려움

  • Windows 앱을 괜찮게 보이게 만드는 데 과도한 작업 필요함
  • macOS에서 동일 앱을 보기 좋게 만드는 것은 더 어려움
  • 기본 컨트롤이 모든 플랫폼에서 어색함

서명 및 패키징 문제

  • 동료의 Windows 머신에 POC를 배포하려면 앱 서명이 필요함
  • Apple은 Xcode Cloud가 자동 서명을 처리하나, Microsoft는 동등한 서비스가 없음
  • GitHub Actions 워크플로우 구성이 복잡함

.NET 9에서도 지속되는 문제

  • 최신 안정 버전에서도 거친 엣지가 존재함
  • .NET 10 베타의 CollectionView 개선을 시도했으나, 기본 기능을 위해 베타에 의존하는 것은 수용 불가함

Linux 지원 부재

  • MAUI의 Linux 지원은 사실상 존재하지 않음
  • uConsole(휴대용 Linux 장치) 구매 후 Linux가 필수 요건이 되어 MAUI는 제외됨

Uno Platform: 인상적인 개발 도구, 그러나 일부 문제 존재

Uno Platform은 즉시 좋은 인상을 줍니다.

최고 수준의 개발 도구

  • AI 지원 Hot Design 기능 제공함
  • 실시간 XAML 업데이트 지원함
  • Figma 통합 기능 포함됨
  • MAUI보다 훨씬 뛰어난 개발 경험을 제공함

복잡한 프로젝트 구조

  • 다수의 프로젝트, 조건부 컴파일, 플랫폼별 구현 등이 필요 이상으로 무거움
  • 풀타임 .NET 개발에서 몇 년간 떨어져 있던 개발자에게 부담됨

Linux 지원

  • MAUI보다는 나으나 완전히 프로덕션 준비 상태는 아님

일부 문제점

  • 라이브스트림에서 문서화한 이슈들이 있었음
  • Uno 팀이 일부 문제를 해결하는 업데이트를 출시함
  • 팀이 개발자 커뮤니티에 관심을 가지며 긍정적인 상호작용을 제공함

게임 체인저: Avalonia의 패키징 솔루션

프로젝트를 몇 달간 보류한 후(9월에 아기 출산), 10월에 다시 시작했을 때 Mike의 LinkedIn 포스트에서 Avalonia의 새 패키징 솔루션을 발견합니다.

  • Xcode Cloud와 유사: AI 어시스턴트에게 "Avalonia 앱을 서명된 DMG로 패키징해줘"라고 말하면 2분 내에 프로덕션 준비 완료된 서명 앱 생성됨
  • 인증서 관리 불필요: 빌드 스크립트나 오후를 낭비하는 일 없음
  • Windows에서 macOS DMG 빌드: 일반적인 방법으로는 불가능한 작업을 가능하게 함

Avalonia로 개발: 빠르고 생산적

로그인 화면과 연결된 Ditto SDK 피어를 표시하는 메인 UI 두 화면으로 시작합니다.

명확하고 포괄적인 문서

  • 두 화면 모두 빠르게 완성됨
  • Avalonia 문서가 우수하며 좋은 예제 제공함
  • 컨트롤이 예상대로 작동함

초기 UI 문제

  • 첫 시도의 UI가 보기 좋지 않음
  • Material Design 지원을 발견했으나 완전하지 않음(아웃라인 텍스트 렌더링 문제 등)
  • Fluent Design은 macOS에서 좋지 않음
  • SwiftUI가 기본 제공하는 세련된 UI에 미치지 못함

SukiUI: 빠진 퍼즐 조각

SukiUI는 Avalonia 전용 포괄적 데스크톱 UI 라이브러리입니다.

설치 및 적용

  • 설치 지침만 따르면 앱이 즉시 더 매력적으로 변함
  • GlassCard 컨트롤로 전문적이고 세련된 모던 UI 구현됨
  • Side Menu로 네비게이션 리팩토링 시 놀라운 변화 발생함
  • “기능적이지만 못생긴” 앱에서 “실제로 사용하고 싶은” 앱으로 변신함

일부 문제점

  • Dock 컨트롤에 이슈가 있었음
  • 포럼에 게시 후 나이틀리 빌드 업그레이드 권장을 받음
  • 안정 버전 유지를 위해 Dock 코드를 임시 제거함
  • 활발한 개발로 이슈가 빠르게 수정됨

성능: Avalonia가 Uno를 앞섬

  • Uno와 Avalonia 간 큰 성능 차이는 없음
  • 두 프레임워크 모두 대상 플랫폼에서 빠르게 렌더링됨
  • Avalonia가 메모리 사용량에서 약간 우위임
  • SukiUI와 함께한 Avalonia 앱의 외관과 느낌이 Uno 구현보다 더 만족스러움
  • Windows, macOS, Linux 모두에서 견고한 성능 제공함

Avalonia의 밝은 미래

차세대 렌더링

Avalonia는 Google Flutter팀과 협력하여 Impeller 렌더링 엔진을 탐색 중입니다.

  • Impeller 특징: 부드럽고 일관된 성능, 높은 평균 프레임 속도, 감소된 VRAM 사용량 제공함
  • GPU 우선 설계: 예측 가능한 성능과 전력 효율이 필수인 현대 하드웨어에 이상적임
  • 안정적 접근: 기존 SkiaSharp 백엔드를 제거하지 않고 다중 렌더링 백엔드 옵션 제공함

MAUI Linux 렌더링

Avalonia가 MAUI의 Linux 렌더링 레이어를 제공합니다. Microsoft의 프레임워크가 Linux 지원을 위해 Avalonia에 의존한다는 것은 Avalonia 기술 기반의 주목할 만한 검증입니다.

최종 평가: Avalonia 승리

MAUI, Uno, Avalonia에서 POC를 구축한 후 Avalonia를 선택한 이유입니다.

SukiUI로 아름다운 앱 구현

  • 최소한의 노력으로 전문적인 외관 구현됨
  • 컴포넌트 라이브러리 작업이 원활함

강력한 문서와 커뮤니티

  • Avalonia 문서가 포괄적이고 명확함
  • 커뮤니티가 활발하고 도움이 됨
  • 질문에 빠른 답변을 받음

DevTools와 Parcel의 필수성

  • Avalonia DevToolsParcel이 게임 체인저임
  • Uno의 디자이너 도구가 일부 면에서 더 나으나, Parcel의 패키징/서명 자동화가 이를 보완함
  • 구독 비용이 소규모 팀에도 적당함
  • 서명/패키징 문제를 해결한다면 충분히 가치 있음

모든 플랫폼에서 견고한 성능

  • Windows, macOS, Linux 모두 잘 작동함
  • Mac Catalyst 타협 없음
  • 플랫폼별 문제 없음
  • 일관되고 반응 좋은 앱 제공함

POC 단계를 넘어섬

  • Avalonia로 POC에서 기능 개발로 빠르게 전환함
  • 좋은 문서와 광범위한 예제 코드로 생산성 확보됨
  • 프레임워크와 싸우지 않음

Uno Platform에 대한 평가

Uno Platform은 진정으로 인상적입니다.

  • 개발자 도구가 업계 선두임
  • 팀이 개발자에 관심을 가짐
  • Microsoft 에코시스템에 깊이 투자했거나 특정 기능이 필요하면 좋은 선택임
  • 도구 혁신으로 전체 .NET UI 에코시스템을 발전시킨 공로가 있음

MAUI에 대한 평가

macOS, Linux, Windows 데스크톱 지원이 필요한 진지한 크로스플랫폼 개발에는 MAUI를 추천할 수 없습니다.

  • macOS 성능이 낮음
  • Linux 지원이 사실상 없음
  • 거친 엣지가 프로덕션 준비 상태가 아님을 시사함
  • 30년간 .NET 개발을 하며 이 패턴을 여러 번 봤음
  • Uno와 Avalonia 같은 소규모 회사가 거대 기업 Microsoft보다 나은 솔루션을 만듦
  • Microsoft가 MAUI에 충분히 투자하지 않는 것으로 보임

앞으로의 계획

저자는 휴가 기간에 을 완성할 예정입니다.

  • Avalonia가 빠르고 안정적이며 진정한 크로스플랫폼임이 증명됨
  • 문서가 우수하고 커뮤니티가 강력함
  • 도구가 .NET 데스크톱 개발의 고질적 문제점을 제거함
  • 30년간의 .NET 개발(Windows Forms, WPF, Silverlight, UWP, Xamarin, MAUI) 후 장기적으로 신뢰할 수 있는 프레임워크를 발견함
  • Microsoft 제품이 아니라는 점이 오히려 작동하는 이유일 수 있음

크로스플랫폼 .NET 앱을 구축한다면 Avalonia를 진지하게 검토하는 것을 권장합니다. MAUI가 되었어야 할 프레임워크입니다.

참고 자료