서론
우선 WinUI 3을 말하기 위해선 WinUI 2 를 말해야 할 것 같다.
아마도 WinUI 2 가 뭔지도 모르는 사람이 대다수일 듯 하다.
왜냐면 그만큼 인기가 ㅈ도 없거든.
WinUI 2 는 UWP 기반으로 돌아간다.
UWP 는 뭔가? 하면
Windows 10 을 이용하면서 이런 창을 본 적이 있을거다.
좌측의 프로그램 제거와 우측의 프로그램 제거의 차이가 뭘까?
좌측은 WinUI 2 (UWP), 우측은 Win32 기반으로 개발된 프로그램들 이다.
(일부 Win32 프로그램들이 좌측에도 '등록' 되어 있긴 하다.)
대표적인 예로 3D 그림판은 UWP 로 개발되었고,
2D 그림판은 Win32 로 개발되었다.
(2024년 현재는 2D 그림판도 WinUI 3 로 재설계 되었다.)
MS 에서는 WinUI 2 를 이와 같이 설명한다.
WinUI 2 is a library of controls and styles currently available for use in any UWP app
즉 모든 UWP 앱에서 사용가능한 일종의 컨트롤, 스타일 집합 라이브러리인 셈이다.
WinUI 2
그런데 현재, 주변을 살펴보면 UWP 을 개발하는 곳이 있나?
우리 회사는 물론, 지인 개발자들에게 물어봐도 UWP 로 개발하는곳은 없었다.
내가 실제로 사용하고 있는 UWP 앱도 전체에서 2-3% 정도가 전부이다.
아래 표를 참고해 보자
MFC, WinForms, WPF 는 현업에서 빈번히 되지만 UWP, WinUI 2 는 못 들어봤을 것이다.
그도 그럴것이 치명적인 이유가 있다.
WinUI 2 는 UWP 앱밖에 개발하지 못 하기 때문이다.
WinUI 2.x can be used in UWP applications
and incorporated into new or existing desktop applications using XAML Islands.
사용자와 개발자들은 굳이? 라는 생각을 할 수 밖에 없다.
잘 돌아가는 Win32 를 굳이 버릴 필요가 없었던 것이다.
압도적인 장점이 있는것도 아니니 말이다.
WinUI 3
하지만 WinUI 3 에 와서는 상황이 좀 달라졌다.
WinUI 3 is the path forward for all Windows apps
you can use it as the UI layer on your native UWP or Win32 app
WinUI 3 를 이용해서 Win32 앱을 빌드할 수 있게 되었으며,
무려 C++ 을 지원한다.
C#은 당연히 지원하고..
C++ 에서 MFC를 대체할 디자이너가 Visual Studio 에 탑재될 날이 머지 않았다.
비록 C# WinForm 처럼 쉽고 간편한 형태는 아니겠지만.
WPF(xaml) 정도의 디자인 생산성을 보여줄 수 있을 것으로 생각된다.
기존에 존재했던 MFC, Winform, WPF 가 이른 시일 내에 죽지는 않을것이다.
하지만 WinUI 3 의 등장으로 WinUI 2 는 즉사 할 것으로 생각된다.
WinUI 3 의 결함이 심각하지만 않다면 굳이 WinUI 2 를 사용해야될 이유가 없으며,
내 생각엔 성공적으로 release 된다면
WPF의 영역 도 WinUI 3 로 대체되지 않을까 예측한다
다시한번 위의 표를 살펴보면
나는 최종적으로
WinUI 3, WinForms
두가지만 살아남게 되지 않을까 생각한다.
MFC - 지금도 살아는 있는데, 매우 보수적인 영역에서 사용됨.
WinForms - 디자인이 중요하지 않은 GUI 프로그램 개발에 사용됨.
WPF - 많은부분이 WinUI 3 와 겹치기에, 지원이 차차 줄어들듯
WinUI 2 - WinUI 3 가 버전 2 를 포함하고 있음, 마찬가지로 지원이 줄어들듯.
굳이 왜써?
디자인 때문이라고 생각하는 사람들도 있을것이다.
WinForm 이나 MFC 로 할 수 있는 디자인은 한정적이기 때문이다.
결론부터 말하자면
디자인 때문만은 아니다.
디자인은 부수적인 요소일 뿐이다.
이전부터 Microsoft 는 Apple 처럼 독자적인 견고한 생태계를 만들고 싶어했지만.
Win32 가 지원하는 압도적인 하위호환성으로 인해 그것이 빈번히 저지되어 왔다.
Windows 1.0 에서 제작된 프로그램이 Windows 10 에서도 실행된다.
Win32 는 굉장히 이전에 설계된 구조다.
내가 MS 개발자라면 이 압도적인 하위 호환성을 매번 유지하느라 골머리가 썩어날 것이다.
(특히 보안부분에서)
썩은 가지는 쳐 버릴 필요가 있다, 언제까지고 Win32 를 천년만년 사용할 순 없다.
MS도 같은 의견이였을 것이다.
Xbox, HoloLens, Surface Hub, IoT 등에서 Win32 를 그대로 사용할 순 없었기에
새로운 구조를 만든것이 UWP 이다.
거기에 생각을 넓혀
C# .Net 생태계를 기반으로 모든 영역에서 크로스 플랫폼까지 꿈꾸는듯 하다. (해당 프로젝트를 .NET MAUI 라고 한다)
※ 이전에도 크로스 플랫폼은 지원되긴 했으나. GUI 프로그래밍은 매우 불편했었다.
중요한건 GUI 프로그래밍을 xaml 기반으로 지원할 거라는것이 WinUI 3 / MAUI 의 핵심이다.
IOS, MAC, android, Windows, Linux 를 지원하면 사실상 현존하는 모든 OS 를 지원하는 것이다.
더이상 운영체제로는 '큰 돈' 을 벌지 못한다.
다른 운영체제에 종속되어 있는 사용자를 Windows '플랫폼' 으로 끌고 들어와야 돈을 벌 수 있다.
MS가 사용자에게 친숙한 기업이 되면
'AWS' 쓸거 'Azure' 한번 살펴보게 되고
'Samsung' 노트북 살거 'Surface' 한번 살펴보게 된다.
거기다 다른 운영체제 프로그램을 Visual Studio 로 개발할 수 있게 한다면 추가 수익이 따라올 것이다.
MS 의 본래 계획은 WinUI 2 를 토대로 차차 UWP 로 바꿔 나가는 것이였겠지만,
개발자들은 Win32 프로그램만 개발하였다.
사용자들도 굳이 잘되는 Win32 냅두고 생소한 UWP 를 찾지 않았다.
이러다간 WinUI 2.0 프로젝트 자체가 엎어질 염려가 있었기에 Microsoft 는 WinUI 3.0 을 개발하여
Win32 를 포괄하는 방향으로 선회 한 것이다.
그래도 여전히 MS의 최종 목표는 Win32 를 없애는 것일 거라고 추측된다.
단지 좀더 '친근하게' UWP 를 어필하는 전략이 WinUI 3 라고 생각한다.
MS의 부가적인 목표
현재의 Windows 라이브러리 체계는 좀 지저분하다.
동적 라이브러리 (*.dll, *.lib)
정적 라이브러리 (*.lib)
COM 라이브러리 (1234-12-1234...)
등등 모두 장단점이 있는데 아마도 MS는 앞으로 이런 라이브러리 지원 형태를 모두 없애고
패키지 형태로 이를 배포할 생각인것 같다. (마치 Nuget 과 같이)
아마 WinUI 3.0 C++ 레벨에서는 동적, 정적 라이브러리 사용을 막는건 힘들어 보이지만
최소한 WinUI 3.0 .Net Core 에서는 위 라이브러리 사용의 일반화를 줄이려고 노력하는듯 하다.
지금 개발해 볼수 있나?
이렇게 WinUI 3 를 제작하는 프로젝트를 = 리유니온 프로젝트라고 지칭한다.
리유니온 프로젝트를 Visual Studio 2019 에 설치하면 관련 프로그램을 개발해 볼 수 있다.
하지만, 개인적으로 추천하지 않는다.
아직 불안한점이 많다.
아무것도 손대지 않은 기본 템플릿 에서부터 경고 메세지를 뿜고,
군대군대 #pragma warning restore 로 경고 복구구문이 덧데어져 있고
C++ 로 프로젝트 생성시 intellisense 가 적용되지 않아
자동완성 기능이나, 선언부 참조 등이 아예 먹통이 되기도 한다.
아직은 많이 부족하다.
해외 기사, 리뷰들을 몇개 뒤적여 본 결과
21H2 에서 정식 출시될 것 같다고 추측하는 글들이 많았다.
21H2 == Windows 11 이다.
가능하면 Windows 11 정식 출시 이후 / 1.0 버전이 정식적으로 출시되면 개발해 보는것을 추천한다.
추가사항
2021 - 11 - 29
얼마전에 AppSDK 1.0 버전이 추가 되었다.
아직은 조금 불안정한 모습이나, Windows 11 버전에서 Visual Studio 2022 기반으로 출시된
공식 안정 버전이므로 참고하길 바란다.
위에서 언급한대로 C++, C# 을 지원한다.
2022 - 01 - 08
WinUI 3.0 에서 현재 디자이너가 동작하지 않는다.
토론 내용으로 볼 때, 이는 MS의 의도인듯 하다.
C# 10.0 에서 새로이 추가된 Hot-reload 기능을 이용하여 미세 조정하는걸 지원한다는 이유로 퉁치려는 듯 한데
굉장히 멍청한 방법이라고 생각한다.
Blend 에서도 지원하지 않는건 매한가지이기에,
차라리 UWP 에서 디자인 -> WinUI 이식과 같은 방법을 사용하는것이
XAML 에 익숙하지 않은 사람들에게 훨신 도움이 될 것이다.
결론적으로 아직까지는 WinUI 3.0 을 통해 신규 프로젝트를 진행하는것을 극구 말리고 싶다.
2023 - 04 - 28
현재로서도 WinUI 3 의 Designer 는 지원되지 않다.
재미있는 점은 여전히 xaml 형태이기에 다른 형태(UWP, WPF)로 해당 파일을 열면
Designer 를 이용할 수 있다는 점이다.
솔직히 Microsoft 가 왜 이런 정책 고수하는지 모르겠습니다.
MAUI 의 경우 멀티플랫폼 지원 문제로 인해 아예 Designer 를 지원하지 않는다고 발표 하였다.
There is no visual designer for producing XAML in .NET MAUI apps.
All XAML must be hand-written,
but you can use XAML hot reload to view your UI as you edit it.
여전히 백엔드 개발자 혼자서 WinUI 3 프로젝트를 진행하는것은 그다지 추천하지 않는다.
2023 - 05 - 05
WinUI 3 을 통해 개발해 보려고 한번 이것저것 시도 해 봤다.
경험해 본 봐론 확실히 WPF나 차라리 UWP(이미 죽긴했다)를 쓰는게 아직까진 더 좋다고 느낀다.
Properties 까지는 잘 보이는 모습을 보이지만 기존 WPF, Winform 기반에서 존재했던
Event UI가 보이지 않는다.
물론 해당 기능이 없다고 개발이 불가능한것은 아니지만 상당히 불편한것이 사실이다.
추가로 개선점도 보이는데, Hot-Reload 를 일일히 누르지 않아도 UI 변경이 앱에 즉각적으로 적용된다.
이정도면 사실 디자이너와 차이가 없을정도의 생산성이다.
추가로 안정성도 초창기에 비하면 크게 향상되었다.
'Miscellaneous' 카테고리의 다른 글
TV에서 USB 동영상 안나올때 (0) | 2021.10.11 |
---|---|
MIUI 12.5 후기 (redmi note 7) (0) | 2021.08.19 |
개발자로서 Radeon 이 최악인 이유. (0) | 2021.05.23 |
KTm 알뜰 모바일 APN 설정(핫스팟) (9) | 2021.02.21 |
측지 좌표계, 세계 측지 좌표계란? (0) | 2021.02.01 |