유니버설 윈도우 플랫폼

**유니버설 윈도우 플랫폼**(Universal Windows Platform, **UWP**)은 마이크로소프트가 개발하고 윈도우 10에서 도입한 컴퓨팅 플랫폼이다. 이 플랫폼의 목적은 윈도우 10, 윈도우 10 모바일(단종), 윈도우 11, 엑스박스 원, Xbox Series X/S, 홀로렌즈에서 실행되는 유니버설 앱을 각 기기마다 다시 작성할 필요 없이 개발할 수 있도록 돕는 것이다. C++, C#, VB.NET, XAML을 사용한 윈도우 앱 개발을 지원한다. API는 C++로 구현되었으며, C++, VB.NET, C#, F#, 자바스크립트에서 지원된다. 윈도우 서버 2012와 윈도우 8에서 도입된 윈도우 런타임 (WinRT) 플랫폼의 확장으로 설계된 UWP를 통해 개발자는 잠재적으로 여러 유형의 장치에서 실행될 앱을 만들 수 있다.

UWP는 마이크로소프트 이외의 시스템을 대상으로 하지 않는다. 다른 플랫폼을 위한 마이크로소프트의 솔루션은 2016년부터 마이크로소프트의 자회사가 된 자마린이 만든 오픈 소스 API인 .NET MAUI(이전 명칭 "Xamarin.Forms")이다. Uno Platform과 같이 대상 플랫폼이 아닌 곳을 위한 커뮤니티 솔루션도 존재한다. UWP는 2021년 10월에 중단(deprecated)되었다.

## 호환성

UWP는 윈도우 10, 윈도우 10 모바일 및 윈도우 11의 일부이다. UWP 앱은 이전 버전의 윈도우에서 실행되지 않는다.

이 플랫폼을 구현할 수 있는 앱은 Visual Studio 2015, Visual Studio 2017, Visual Studio 2019 또는 Visual Studio 2022를 사용하여 네이티브로 개발된다. 윈도우 8.1, 윈도우 폰 8.1 또는 두 플랫폼 모두(유니버설 8.1)를 위한 이전 메트로 스타일 앱을 UWP로 마이그레이션하려면 수정이 필요하다.

이후 버전의 일부 윈도우 플랫폼 기능은 UWP 및 UWP용으로 특별히 패키징된 소프트웨어에만 독점적으로 제공되었으며, 기존 WinAPI, WPF, 윈도우 폼과 같은 다른 아키텍처에서는 사용할 수 없었다. 그러나 2019년부터 마이크로소프트는 이러한 애플리케이션 플랫폼 간의 동등성을 높이고 비 UWP 소프트웨어 내에서도 UWP 기능을 사용할 수 있도록 조치를 취했다. 마이크로소프트는 윈도우 10 2019년 5월 업데이트의 일부로 XAML Islands(UWP 컨트롤 및 위젯을 비 UWP 소프트웨어에 삽입하는 방법)를 도입했으며, 패키징되지 않은 소프트웨어 내에서도 UWP 함수와 윈도우 런타임 구성 요소를 호출할 수 있도록 하겠다고 밝혔다.

### API 브리지
UWP 브리지는 다른 애플리케이션 프로그래밍 인터페이스(API)의 호출을 UWP 인터페이스로 변환하여, 해당 API로 작성된 애플리케이션이 UWP에서 실행될 수 있도록 한다. 안드로이드 및 iOS 앱을 윈도우 10 모바일로 이식하기 위한 두 가지 브리지가 2015 빌드 기조연설에서 발표되었다. 2022년 1월까지 마이크로소프트는 윈도우 데스크톱 앱, 프로그레시브 웹 애플리케이션, 마이크로소프트 실버라이트 및 iOS의 코코아 터치 API를 위한 브리지 지원을 유지했다.

#### iOS

Windows Bridge for iOS(코드명 "Islandwood")는 오브젝티브-C로 개발된 iOS 앱을 Visual Studio 2015를 사용하여 엑스코드 프로젝트를 비주얼 스튜디오 프로젝트로 변환함으로써 윈도우 10으로 이식할 수 있게 해주는 오픈 소스 미들웨어 툴킷이다. Windows Bridge for iOS의 초기 빌드는 2015년 8월 6일에 MIT 허가서에 따라 오픈 소스 소프트웨어로 출시되었으며, 안드로이드 버전은 비공개 베타 상태였다.

이 "WinObjC" 프로젝트는 깃허브에서 오픈 소스로 제공된다. 여기에는 Cocotron 및 그누스텝과 같은 기존 코코아 터치 구현체의 코드뿐만 아니라 UWP 방식을 사용하여 iOS 프레임워크를 구현한 마이크로소프트의 자체 코드가 포함되어 있다. 또한 LLVM clang 컴파일러 버전을 사용한다.

#### 안드로이드
Windows Bridge for Android(코드명 "Astoria")는 자바 또는 C++로 작성된 안드로이드 앱을 윈도우 10 모바일에서 실행하고 마이크로소프트 스토어에 게시할 수 있게 해주는 런타임 환경이었다. 윈도우 개발자 플랫폼의 기술 책임자인 케빈 갈로는 이 레이어에 몇 가지 제한 사항이 있다고 설명했다. 구글 모바일 서비스 및 특정 핵심 API를 사용할 수 없으며, 메시징 소프트웨어와 같이 "백그라운드 작업에 깊이 통합된" 앱은 이 환경에서 제대로 실행되지 않을 것이라고 밝혔다.

2016년 2월, 마이크로소프트는 iOS가 이미 멀티 플랫폼 개발의 기본 플랫폼이고 Windows Bridge for iOS가 OS 수준의 에뮬레이터 없이 네이티브 코드를 생성한다는 점을 들어, 중복성을 이유로 Windows Bridge for Android의 개발을 중단한다고 발표했다. 대신 마이크로소프트는 발표 전 인수한 자마린의 도구를 사용하여 C#을 통한 멀티 플랫폼 앱 개발을 권장했다. 2021년, 마이크로소프트는 윈도우 11에서 OS 수준의 에뮬레이터를 통해 안드로이드 앱을 실행하고 스토어에서 앱을 설치할 수 있도록 허용했다.

## 배포
UWP는 CoreApplication 클래스와 윈도우 런타임(WinRT)을 기반으로 한 애플리케이션 모델을 제공한다. UWP를 사용하여 생성된 유니버설 윈도우 앱은 더 이상 매니페스트 빌드에서 특정 OS용으로 작성되었음을 표시하지 않는다. 대신 유니버설 윈도우 플랫폼 브리지를 사용하여 PC, 스마트폰, 태블릿 또는 엑스박스 원과 같은 하나 이상의 장치 제품군을 대상으로 한다. 이러한 확장을 통해 앱은 현재 실행 중인 특정 장치에서 사용할 수 있는 기능을 자동으로 활용할 수 있다. 유니버설 앱은 휴대폰이나 태블릿 중 하나에서 실행되어 각각에 적합한 경험을 제공할 수 있다. 스마트폰에서 실행되는 유니버설 앱은 휴대폰이 데스크톱 컴퓨터나 적합한 도킹 스테이션에 연결되었을 때 PC에서 실행되는 것처럼 작동하기 시작할 수 있다.

## 평가
UWP용으로 개발된 게임은 멀티 그래픽 카드 구성과의 비호환성, 게임 모딩의 어려움, 게임 플레이 중심의 채팅 클라이언트용 오버레이 또는 키 바인딩 관리자 사용 문제 등 기술적 제한의 대상이 된다. UWP는 DirectX 11.1 이상만 지원하므로, 이전 DirectX 버전으로 제작된 게임은 작동하지 않는다. 빌드 2016 기간 동안 마이크로소프트 엑스박스 부문 책임자인 필 스펜서는 PC 게임을 위한 UWP의 실행 가능성을 개선하기 위해 문제를 해결하려 노력 중이라고 발표하며, 마이크로소프트가 "전체 화면 게임의 성능 기대치를 충족하거나 초과함은 물론 오버레이, 모딩 등을 포함한 추가 기능을 지원하도록 보장하는 데 전념하고 있다"고 밝혔다. 이후 AMD 프리싱크 및 엔비디아 G-Sync 기술 지원과 V-sync 비활성화 기능이 UWP에 추가되었다.

에픽게임즈 설립자인 팀 스위니는 UWP가 담장 친 정원(walled garden)이라고 비판했다. 기본적으로 UWP 소프트웨어는 마이크로소프트 스토어를 통해서만 게시 및 설치할 수 있으며, 외부 소프트웨어를 설치하려면 (안드로이드와 유사하게) 시스템 설정 변경이 필요하기 때문이다. 또한 특정 운영체제 기능은 UWP 전용이며 대부분의 비디오 게임과 같은 비 UWP 소프트웨어에서는 사용할 수 없다. 스위니는 이러한 조치를 PC를 폐쇄형 플랫폼으로 전환하려는 "마이크로소프트가 지금까지 했던 조치 중 가장 공격적인 조치"라고 규정했으며, 이러한 움직임이 스팀과 같은 제3자 게임 스토어에 불이익을 주기 위한 것이라고 느꼈다. 마이크로소프트가 "기능이 완비된 PC 소프트웨어를 설치할 사용자의 자유를 제한하고 고객과 직접적인 관계를 유지할 개발자 및 퍼블리셔의 권리를 훼손하고 있다"는 이유에서였다. 따라서 스위니는 최종 사용자가 비 UWP 소프트웨어와 동일한 방식으로 UWP 소프트웨어를 다운로드하고 설치할 수 있어야 한다고 주장했다.

윈도우 부사장 케빈 갈로는 스위니의 우려에 대해 "윈도우 10 11월 업데이트에서 사용자가 별도의 UX 없이도 기본적으로 앱을 쉽게 사이드로딩할 수 있게 했다. 우리는 사용된 기술에 관계없이 윈도우를 최고의 개발 플랫폼으로 만들고 싶으며, HTML/자바스크립트, .NET 및 Win32, C++ 및 오브젝티브-C의 기존 코드 베이스를 가진 개발자가 코드를 윈도우로 가져와 UWP 기능을 통합할 수 있도록 돕는 도구를 제공하고 싶다. 자마린을 통해 UWP 개발자는 모든 윈도우 10 장치에 도달할 수 있을 뿐만 아니라, 이제 C# 코드의 상당 부분을 사용하여 iOS 및 안드로이드를 위한 완전한 네이티브 모바일 앱 경험을 제공할 수 있다"고 답했다.

E3 2016 기간 중 자이언트 밤과의 라이브 인터뷰에서 스펜서는 UWP 독점 출시에 대한 엇갈린 반응에 대해 "모든 것이 순조롭게 진행된 것은 아니다. 일부는 잘 되었다"고 옹호하며, "UWP와 우리 스토어가 악의적인 방식으로 연결되어 있다는 우려가 여전히 분명히 존재하지만, 그렇지 않다"고 밝혔다. 또한 스팀과 같은 제3자 개발자 및 유통사와의 관계에 대해 논의하며, 해당 서비스를 "윈도우에서 게임의 성공에 있어 중요한 부분"으로 간주하고 마이크로소프트가 자사 플랫폼뿐만 아니라 해당 플랫폼을 통해서도 게임을 계속 출시할 계획이라고 밝혔다. 하지만 "협력할 부분도 있고 경쟁할 부분도 있을 것이다. 최종 결과는 게이머에게 더 좋을 것"이라고 덧붙였다. 스펜서는 또한 자신이 스위니의 친구이며 그와 자주 연락하고 있다고 언급했다.

2019년 5월 30일, 마이크로소프트는 마이크로소프트 스토어에서 Win32 게임의 배포를 지원할 것이라고 발표했다. (당시 CEO 사티아 나델라에게 직접 보고하는 마이크로소프트 모든 게임 운영 책임자로 승진한) 스펜서는 개발자들이 해당 아키텍처를 선호하며, 그것이 "개발자와 플레이어가 개방형 윈도우 게임 생태계에서 기대하게 된 커스터마이징과 제어를 가능하게 한다"고 설명했다. 또한 윈도우용으로 출시되는 향후 엑스박스 게임 스튜디오의 타이틀들은 마이크로소프트 스토어 독점이 아닌 스팀과 같은 제3자 스토어에서도 이용 가능할 것이라고 발표했다.

## 각주

## 외부 링크
* Guide to Universal Windows Platform (UWP) apps
* 
* Comparison of UWP, Android, and iOS from a Programmer's point of view

분류:닷넷 프레임워크
분류:윈도우 API
분류:윈도우 기술
분류:엑스박스 원