다음을 통해 공유


Windows Runtime 8.x에서 UWP로 이동하기

Universal 8.1 앱을 보유하고 있는 경우(Windows 8.1, Windows Phone 8.1 또는 둘 다를 대상으로 하는지에 관계없이) Windows 10으로 소스 코드 및 기술이 원활하게 포팅되는지 확인합니다. Windows 10를 사용하면 모든 종류의 장치에 설치할 수 있는 단일 앱 패키지인 Universal Windows Platform(UWP) 앱을 만들 수 있습니다. Windows 10, UWP 앱 및 이 포팅 가이드에서 언급할 적응형 코드 및 적응형 UI의 개념에 대한 자세한 배경은 UWP 앱 가이드를 참조하세요.

포팅하는 동안, Windows 10은 이전 플랫폼과 대부분의 API를 공유하고 XAML 태그, UI 프레임워크 및 도구를 공유하므로 모두 안심할 수 있습니다. 이전과 마찬가지로 C++, C# 및 Visual Basic 중에서 XAML UI 프레임워크와 함께 사용할 프로그래밍 언어를 선택할 수 있습니다. 사용 중인 앱 및 프로젝트의 종류에 따라 현재 앱 또는 앱으로 수행할 작업을 정확하게 계획하는 첫 번째 단계가 달라집니다. 다음의 섹션에는 이에 대한 설명이 있습니다.

Universal 8.1 앱을 보유하고 있는 경우

8.1 Universal App 프로젝트에서 Universal 8.1 앱이 빌드됩니다. 프로젝트의 이름을 AppName_81이라고 하겠습니다. 이는 이러한 하위 프로젝트를 포함합니다.

  • AppName_81.Windows. 이 프로젝트는 Windows 8.1에 대한 앱 패키지를 빌드합니다.
  • AppName_81.WindowsPhone. 이 프로젝트는 Windows Phone 8.1에 대한 앱 패키지를 빌드합니다.
  • AppName_81.Shared. 이는 소스 코드, 태그 파일, 기타 자산과 리소스를 포함하는 프로젝트로, 다른 두 프로젝트 모두에서 사용되는 프로젝트입니다.

8.1 Universal Windows 앱은 종종 Windows 8.1 및 Windows Phone 8.1 양식 모두에서 동일한 기능을 제공(하며 동일한 코드와 태그를 사용)합니다. 이러한 앱은 Universal 장치 패밀리를 대상으로 하는 단일 Windows 10 앱으로 포팅하는 데 이상적인 후보입니다(또한 가장 광범위한 장치에 설치할 수 있음). 기본적으로 공유 프로젝트의 콘텐츠를 포팅하며 다른 두 프로젝트에는 거의 또는 전혀 없으므로 다른 두 프로젝트에서는 거의 또는 전혀 사용하지 않아도 됩니다.

다른 때에는, Windows 8.1 및/또는 Windows Phone 8.1 형식의 앱은 고유한 기능을 포함하고 있습니다. 또는 동일한 기능을 포함하지만 해당 기능을 다른 테크닉이나 다른 기술을 사용하여 구현합니다. 이러한 앱을 사용하면 Universal 장치 패밀리를 대상으로 하는 단일 앱으로 포팅하도록 선택(다른 장치에 맞게 앱이 조정되도록 할 경우)하거나 둘 이상의 앱으로 포팅하도록 선택할 수 있습니다. 하나는 데스크톱 장치 패밀리를 대상으로 하고 다른 앱은 모바일 장치 패밀리를 대상으로 할 수 있습니다. Universal 8.1 앱의 특성에 따라 이러한 옵션 중에서 사용자 사례에 가장 적합한 옵션이 결정됩니다.

  1. 공유 프로젝트의 콘텐츠를 유니버설 장치 패밀리를 대상으로 하는 앱으로 포팅합니다. 해당하는 경우, Windows 및 WindowsPhone 프로젝트의 다른 콘텐츠를 회수하고 해당 콘텐츠를 앱에서 무조건 사용하거나 앱이 실행 중일 때 장치의 조건부로 사용합니다(후자의 동작은 적응형이라고 함).
  2. WindowsPhone 프로젝트의 콘텐츠를 유니버설 장치 패밀리를 대상으로 하는 앱으로 포팅합니다. 해당하는 경우, Windows 프로젝트의 다른 콘텐츠를 무조건부 또는 적응형을 사용하여 회수합니다.
  3. Windows 프로젝트의 콘텐츠를 유니버설 장치 패밀리를 대상으로 하는 앱으로 포팅합니다. 해당하는 경우, WindowsPhone 프로젝트의 다른 콘텐츠를 무조건부 또는 적응형을 사용하여 회수합니다.
  4. Windows 프로젝트의 콘텐츠를 유니버설 또는 데스크톱 장치 패밀리를 대상으로 하는 앱으로 포팅하고 WindowsPhone 프로젝트의 콘텐츠를 유니버설 또는 모바일 장치 패밀리를 대상으로 하는 앱으로 포팅합니다. 공유 프로젝트를 사용하여 솔루션을 만들고 두 프로젝트 사이에서 소스 코드, 태그 파일, 다른 자산 및 리소스를 계속 공유할 수 있습니다. 또는 다른 솔루션을 만들고 링크를 사용하여 동일한 항목을 공유할 수 있습니다.

Windows 8.1 앱을 보유하고 있는 경우

프로젝트를 유니버설 또는 데스크톱 장치 패밀리를 대상으로 하는 앱으로 포팅합니다. 유니버설 장치 패밀리를 선택하고 앱이 데스크톱 장치 패밀리에서만 구현된 API를 호출하는 경우, 이러한 호출을 적응형 코드로 보호하면 됩니다.

Windows Phone 8.1 앱을 보유하고 있는 경우

프로젝트를 유니버설 또는 모바일 장치 패밀리를 대상으로 하는 앱으로 포팅합니다. 유니버설 장치 패밀리를 선택하고 앱이 모바일 장치 패밀리에서만 구현된 API를 호출하는 경우, 이러한 호출을 적응형 코드로 보호하면 됩니다.

여러 폼 팩터에 맞게 앱을 조정하기

이전 섹션에서 선택한 옵션은 앱 또는 앱이 실행되는 장치의 범위를 결정하며, 이는 매우 광범위한 장치일 수 있습니다. 모바일 장치 패밀리로 앱을 제한해도 지원되는 다양한 화면 크기는 그대로 유지됩니다. 따라서 앱이 이전에 지원하지 않았던 폼 팩터에서 실행 중인 경우, 해당 폼 팩터에서 UI를 테스트하고 필요한 변경 내용을 적용하여 각각에 맞게 UI가 조정되도록 합니다. 이를 포팅 후 작업 또는 포팅 스트레치 목표라고 간주할 수 있으며, 몇몇 실제 예시가 Bookstore2QuizGame 사례 연구에 있습니다.

계층별 포팅 접근하기

Universal 8.1 앱을 UWP 앱에 대한 모델로 포팅할 때, 거의 모든 지식과 환경이 대부분의 소스 코드 및 태그 및 사용하는 소프트웨어 패턴과 마찬가지로 전송됩니다.

  • 보기. 보기(보기 모델과 함께)는 앱의 UI를 구성합니다. 이상적으로 보기는 보기 모델의 관찰 가능한 속성에 바인딩된 태그로 구성됩니다. 코드 숨김 파일의 명령적 코드가 UI 요소를 직접 조작하는 것은 또 다른 패턴(일반적이고 편리하지만 단기간에만)입니다. 두 경우 모두에서 UI 태그 및 디자인(및 UI 요소를 조작하는 명령적 코드도)은 포팅하기 쉽습니다.
  • 보기 모델 및 데이터 모델입니다. (MVVM과 같은) 문제 분리 패턴을 공식적으로 수용하지 않더라도 보기 모델 및 데이터 모델의 기능을 수행하는 코드가 필연적으로 앱에 존재합니다. 보기 모델 코드는 UI 프레임워크 네임스페이스의 형식을 사용합니다. 보기 모델 및 데이터 모델 코드는 모두 비 시각적 운영 체제 및 .NET Framework API(데이터 액세스용 API 포함)를 사용합니다. 이러한 API를 UWP 앱에서도 사용할 수 있으므로, 대부분의 경우 이 코드가 변경되지 않고 포팅됩니다.
  • 클라우드 서비스입니다. 일부 앱(아마도 많은 앱)이 클라우드에서 서비스 형태로 실행되고 있는 것 같습니다. 해당 장치에 클라이언트 장치에서 실행되는 앱의 일부가 연결됩니다. 이는 클라이언트 부분을 포팅할 때 변경되지 않고 남을 가능성이 가장 큰 분산 앱의 일부입니다. 이러한 것이 아직 없는 경우 UWP 앱에 적합한 클라우드 서비스 옵션은 Microsoft Azure Mobile Services로, 강력한 백 엔드 구성 요소를 제공하여 앱이 라이브 타일 업데이트에 대한 간단한 알림부터 서버 팜에서 제공할 수 있는 강력한 확장성까지 다양한 서비스를 호출할 수 있도록 합니다.

유사한 용도의 코드가 포팅 전이나 포팅 중에 레이어에 함께 수집되고 임의로 분산되지 않도록 앱을 리팩터링하여 앱을 개선할 수 있는지 여부를 고려합니다. 위에서 설명한 것과 같은 계층으로 앱을 팩터링하면 앱을 더 쉽게 수정하고, 테스트한 다음, 앱을 읽고 유지할 수 있습니다. 기능을 더 재사용하기 위해 MVVM(Model-View-ViewModel) 패턴을 따를 수 있습니다. 이 패턴은 앱의 데이터, 비즈니스 및 UI 부분을 서로 분리합니다. 상태와 동작을 시각적 개체와 분리하고 별도로 테스트할 수 있도록 UI 내에서도 유지할 수 있습니다. MVVM을 사용하는 경우, 데이터 및 비즈니스 논리를 작성하고 나면 모든 장치에서 UI에 관계없이 사용할 수 있습니다. 보기 모델의 대부분을 다시 사용하고 여러 장치에서 파트를 볼 수도 있습니다.

토픽 설명
프로젝트 포팅하기 포팅 프로세스를 시작하는 경우 두 가지 옵션이 있습니다. 하나는 앱 패키지 매니페스트를 포함하여 기존 프로젝트 파일의 복사본을 편집하는 것입니다(해당 옵션의 경우, 프로젝트 파일을 앱 마이그레이션에서 Universal Windows Platform(UWP)으로 업데이트하는 방법에 대한 정보 참조). 다른 하나의 옵션은 Visual Studio에서 새로운 Windows 10/11 프로젝트를 만들고 파일을 복사하는 것입니다.
문제 해결 이 포팅 가이드를 끝까지 읽는 것을 강력하게 권장하지만, 직접 프로젝트를 빌드하고 실행하는 단계로 빨리 진행하고자 한다는 것도 알고 있습니다. 이를 위해 필수적이지 않은 코드를 주석으로 처리하거나 스텁한 다음, 나중에 해당 부채를 갚기 위해 돌아와서 일시적인 진전을 이룰 수 있습니다. 다음의 몇 가지 토픽을 읽는 대신 이 테이블의 문제 해결 증상 및 해결 방법을 사용하는 것은 불가능하지만, 이 테이블의 문제 해결 증상 및 해결 방법을 사용하는 것은 이 단계에서 도움이 될 수 있습니다. 이후의 토픽을 진행할 때 항상 테이블을 다시 참조할 수 있습니다.
XAML 및 UI 포팅하기 UI를 선언적 XAML 태그 형식으로 정의하는 방법은 Universal 8.1 앱에서 UWP 앱으로 매우 잘 해석됩니다. 사용 중인 시스템 리소스 키 또는 사용자 지정 템플릿을 일부 조정해야 할 수도 있지만, 대부분의 태그가 호환된다는 것을 알 수 있습니다.
I/O, 장치 및 앱 모델에 대해 포팅하기 사용자의 입력 및 출력이 장치 자체 및 해당 센서와 통합되는 코드에 포함됩니다. 또한 데이터 처리가 포함될 수 있습니다. 그러나 일반적으로 이 코드는 UI 계층 또는 데이터 계층으로 생각되지 않습니다. 이 코드는 진동 컨트롤러, 가속도계, 자이로스코프, 마이크 및 스피커(음성 인식 및 합성과 교차), (지리적) 위치 및 터치, 마우스, 키보드 및 펜과 같은 입력 형식과의 통합을 포함합니다.
사례 연구: Bookstore1 이 토픽은 매우 간단한 Universal 8.1 앱을 Windows 10 및 Windows 11 UWP 앱으로 포팅하는 사례 연구를 제공합니다. Universal 8.1 앱은 Windows 8.1애 대한 앱 패키지 하나 및 Windows Phone 8.1에 대한 다른 앱 패키지를 빌드하는 앱입니다. Windows 10 및 Windows 11로 다양한 장치에 설치할 수 있는 단일 앱 패키지를 만들 수 있으며, 이는 이 사례 연구에서 수행하게 될 작업입니다. UWP 앱 가이드를 확인하세요.
사례 연구: Bookstore2 이 사례 연구는 SemanticZoom 컨트롤에 제공된 정보를 기반으로 합니다. 보기 모델에서 Author 클래스의 각 인스턴스는 해당 저자가 쓴 책의 그룹을 나타내며, SemanticZoom에서는 저자별로 그룹화된 책 목록을 보거나 축소하여 저자의 점프 목록을 볼 수 있습니다.
사례 연구: QuizGame 이 토픽은 작동하는 피어 투 피어 퀴즈 게임 WinRT 8.1 샘플 앱을 Windows 10 및 Windows 11 UWP 앱으로 포팅하는 사례 연구를 제공합니다.

문서