Windows 네이티브 앱 개발은 혼란스러운 상태

4 days ago 6

  • Windows용 유틸리티 앱 개발 경험을 통해 네이티브 앱 개발 환경의 복잡성과 비효율성이 드러남
  • Win32에서 WinUI 3까지 이어지는 UI 프레임워크의 잦은 세대 교체로 인해 일관된 기술 기반 유지가 어려움
  • 최신 Windows App SDK는 필수 기능 미지원, P/Invoke 의존, 불완전한 C# 상호운용성 등으로 실용성이 낮음
  • 배포 과정에서도 MSIX 서명 비용, Store 등록 거절, .NET 런타임 의존성 등 현실적 제약이 큼
  • 결과적으로 많은 개발자가 Electron·Tauri 같은 웹 기반 프레임워크로 이동하며, Microsoft가 네이티브 개발을 우선하지 않는 상황임

Windows 네이티브 앱 개발의 혼란

  • 개인 프로젝트와 문제 인식

    • Windows 전용 유틸리티 앱 ‘Display Blackout’ 개발 과정에서 현재 네이티브 앱 개발 환경의 문제점이 드러남
      • 이 앱은 다중 모니터 환경에서 게임 중 좌우 화면을 검은색 오버레이로 끄는 기능을 제공
      • 필요한 기능은 디스플레이 열거, 경계 계산, 글로벌 단축키 처리, 트레이 아이콘 표시, 시작 시 자동 실행, 설정 저장
    • 기존 AutoHotkey 스크립트나 Microsoft Store 앱이 존재하지만, 학습 목적과 UI 개선을 위해 직접 개발을 시도
    • 결과적으로 Windows 네이티브 앱 개발 환경이 극도로 복잡하고 비효율적임을 확인

Windows 프로그래밍의 역사

  • 초기에는 C 기반 Win32 API가 중심이었으며, 이후 MFC가 객체지향적 추상화를 제공
  • 2002년 .NET 1.0과 함께 C# 및 Windows Forms가 등장해 메모리 관리와 현대적 언어 기반을 제공
  • 2006년 WPF가 도입되어 XAML 기반 UI와 GPU 렌더링을 지원
  • 2012년 WinRT, 2015년 UWP로 이어지며 샌드박스형 앱 모델Microsoft Store 배포를 목표로 함
  • 2021년 Windows App SDKWinUI 3이 등장해 WinRT/UWP 기능을 통합했으나 또 다른 API 계층을 추가
  • UI 프레임워크의 진화 경로는 다음과 같음 Win32 → MFC → WinForms → WPF → WinRT XAML → UWP XAML → WinUI 3

개발 경로의 갈림길

  • WinUI 3 앱 개발에는 C++, C#/XAML (Framework-dependent), C#/XAML (.NET AOT) 세 가지 선택지가 존재
    • C++은 성능이 좋지만 메모리 안전성 부족
    • Framework-dependent 방식은 Windows에 최신 .NET(10)이 기본 포함되지 않아 사용자 설치가 필요
    • .NET AOT는 런타임 전체를 바이너리에 포함, 단순 앱도 9MiB 이상으로 커짐
  • Rust 바인딩 프로젝트는 중단된 상태
  • 배포는 MSIX 패키징이 권장되지만,
    • 코드 서명 인증서 비용(연 $200~300) 이 높고
    • 서명 없는 사이드로딩은 PowerShell 명령 필요 등 사용자 경험이 나쁨
    • Microsoft Store 등록도 “지속적 가치 부족” 사유로 거절됨
  • .NET을 Windows Update로 배포하거나, MSIX 종속 패키지로 제공하는 개선책이 제시됨
  • 현재의 Windows 개발 체계는 “절반만 완성된 상태”로 평가됨

누락된 기능과 기술적 단절

  • Microsoft가 반복적으로 새로운 API 계층을 도입하고 기존 기능을 폐기하면서 각 세대마다 기능 공백이 발생
  • WinUI 3 기반 Windows App SDK의 제약 사항
    • 디스플레이 열거는 가능하지만 변경 감지는P/Invoke 필요

    • 비활성화 상태의 무테 창 생성P/Invoke 필요

    • 글로벌 단축키 처리지원되지 않음

      • 시작 시 실행설정 저장은 가능
      • 트레이 아이콘 및 메뉴 표시표준 API 부재, 서드파티 래퍼에 의존
      • 창 크기 자동 조정 기능도 WPF 이후 사라짐
      • Win32 API와의 상호운용을 위한 CsWin32는 미완성 상태
      • 문자열 구조체 처리 오류C# 언어 한계로 불완전
      • C#은 Win32의 [optional, out] 매개변수를 표현할 방법이 없음
      • C# 언어는 20년간 UI 데이터 바인딩의 반복적 보일러플레이트 문제를 해결하지 못함
      • INotifyPropertyChanged 구현이 여전히 번거롭고 언어 차원의 개선 부재

결론 및 대안

  • 현재 Microsoft는 네이티브 앱 개발을 우선하지 않음
    • 관련 이슈 트래커는 버그와 미응답 보고로 가득
    • Windows App SDK의 변경 로그는 머신러닝 API 추가 중심
    • Visual Studio Code, Outlook, Start 메뉴 등 주요 앱조차 웹 기술 기반으로 작성
  • 커뮤니티는 Avalonia, Uno Platform 같은 서드파티 UI 프레임워크로 이동 중
    • 이들은 WPF 철학을 계승하고 크로스플랫폼 지원을 강화
  • 그러나 현재로서는 Electron이나 Tauri 같은 웹 기반 프레임워크가 더 현실적 선택
    • TypeScript/React/CSS 조합이 C#/XAML보다 생산적이며
    • Win32 API 접근도 가능
    • Tauri시스템 WebView를 활용해Chromium 번들 불필요

      • WebView2 런타임은 4주마다 업데이트, 반면 시스템 .NET은 4.8.1에 고정
      • Microsoft가 Windows App SDK 개선배포 체계 단순화를 추진한다면 회복 가능성이 있으나
      • 현재로서는 대부분의 개발자가 기대하지 않음
      • 결론적으로 “웹 스택을 선택하겠다”는 판단으로 마무리됨

Read Entire Article