Windows Phone Silverlight에서 UWP로 이동하기

Windows Phone Silverlight 앱을 사용하는 개발자는 자신의 기술과 소스 코드를 Windows 10으로 이동하는 과정에서 최대한 활용할 수 있습니다. Windows 10를 사용하면 모든 종류의 장치에 설치할 수 있는 단일 앱 패키지인 Universal Windows Platform(UWP) 앱을 만들 수 있습니다. Windows 10, UWP 앱 및 이 포팅 가이드에서 언급할 적응형 코드 및 적응형 UI의 개념에 대한 자세한 배경은 Universal Windows Platform(UWP) 앱 가이드를 참조하세요.

Windows Phone Silverlight 앱을 Windows 10 앱으로 포팅하면 Windows Phone 8.1에서 도입된 모바일 기능을 따라잡을 수 있으며, 앱 모델 및 UI 프레임워크가 모든 Windows 10 장치에서 범용인 UWP(Universal Windows Platform)를 사용할 수 있습니다. 이를 통해 PC, 태블릿, 휴대폰 및 다양한 종류의 다른 장치를 하나의 코드 베이스와 하나의 앱 패키지에서 지원할 수 있습니다. 이렇게 하면 앱의 잠재 고객을 늘리고 새로운 가능성을 만들기 위해 공유 데이터, 구매한 소모품 등을 사용할 수 있습니다. 새로운 기능에 대한 자세한 정보는 Windows 10 개발자를 위한 새로운 기능을 참조하세요.

선택하는 경우, 고객에게 Windows Phone Silverlight 버전의 앱 및 Windows 10 버전을 동시에 제공할 수 있습니다.

참고 이 가이드는 Windows Phone Silverlight 앱을 Windows 10으로 수동으로 포팅하는 데 도움이 되도록 설계되었습니다. 이 가이드의 정보를 사용하여 앱을 포팅하는 것 외에도, Mobilize.NET Silverlight Bridge의 개발자 미리 보기를 사용하여 포팅 프로세스를 자동화할 수 있습니다. 이 도구는 앱의 소스 코드를 분석하고 Windows Phone Silverlight 컨트롤 및 API에 대한 참조를 해당 UWP 컨트롤로 변환합니다. 이 도구는 아직 개발자 미리 보기에 있으므로, 아직 모든 변환 시나리오를 처리하지는 않습니다. 하지만 대부분의 개발자는 약간의 시간과 노력을 절약하기 위해 이 도구로 시작할 수 있어야 합니다. 개발자 미리 보기를 시도하려면 Mobilize.NET의 웹 사이트를 방문하세요.

XAML 및 .NET 또는 HTML?

Windows Phone Silverlight의 XAML UI 프레임워크는 Silverlight 4.0 기반으로 하므로, .NET Framework 버전과 Windows Runtime API의 일부 하위 집합에 대해 프로그래밍합니다. Windows Phone Silverlight 앱에서 XAML(Extensible Application Markup Language)을 사용했기 때문에, 대부분의 소스 코드 및 사용하는 소프트웨어 패턴과 마찬가지로 대부분의 지식과 환경이 전송되므로 Windows 10 버전에서 XAML을 선택할 수 있습니다. UI 태그 및 디자인도 쉽게 포팅할 수 있습니다. 관리되는 API, XAML 태그, UI 프레임워크 및 도구는 모두 안심할 수 있으며, UWP 앱에서 XAML과 함께 C++, C# 또는 Visual Basic을 사용할 수 있습니다. 그 과정에서 한두 가지 어려움이 있더라도 프로세스가 비교적 얼마나 쉬운지 놀랄 수 있습니다.

C# 또는 Visual Basic으로 작성한 UWP(Universal Windows Platform) 앱에 대한 로드맵을 참조하세요 .

주의 Windows 10은 Windows Phone Store 앱보다 훨씬 많은 .NET Framework를 지원합니다. 예를 들어, Windows 10에는 System.Net, System.Net.NetworkInformation 및 System.Net.Sockets뿐만 아니라 여러 System.ServiceModel.* 네임스페이스도 있습니다. 이제 Windows Phone Silverlight를 포팅하고 .NET 코드를 컴파일하여 새 플랫폼에서 작업할 수 있는 좋은 시기입니다. 네임스페이스 및 클래스 매핑을 참조하세요. 기존 .NET 소스 코드를 Windows 10 앱으로 다시 컴파일하는 또 다른 큰 이유는 MSIL을 고유하게 실행 가능한 컴퓨터 코드로 변환하는 미리 컴파일 기술인 .NET Native의 이점을 활용하기 때문입니다. .NET Native 앱은 해당 MSIL 앱보다 더 빠르게 시작되며 메모리와 배터리를 더 적게 사용합니다.

이 포팅 가이드에서는 XAML에 집중하지만, JavaScript, CSS 스타일시트 및 HTML5를 JavaScript용 Windows 라이브러리와 함께 사용하여 동일한 Windows Runtime API 중 다수를 많이 호출하는 기능적으로 동일한 앱을 빌드할 수 있습니다. XAML 및 HTML의 Windows Runtime UI 프레임워크는 서로 다르지만, 선택한 프레임워크는 Windows 장치의 전체 범위에서 보편적으로 작동합니다.

유니버설 또는 모바일 장치 패밀리를 대상으로 지정하기

한 가지 옵션은 유니버설 장치 패밀리를 대상으로 하는 앱으로 앱을 포팅하는 것입니다. 이 경우, 앱을 가장 광범위한 장치에 설치할 수 있습니다. 앱이 모바일 장치 패밀리에서만 구현된 API를 호출하는 경우, 해당 호출을 적응 코드로 보호합니다. 또는 적응 코드를 작성할 필요가 없는 경우, 모바일 장치 패밀리를 대상으로 하는 앱으로 앱을 포팅하도록 선택할 수 있습니다.

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

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

계층별 포팅 접근하기

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

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

규칙에 대한 한두 가지 예외

이 포팅 가이드를 읽으면서 네임스페이스 및 클래스 매핑을 참조할 수 있습니다. 매우 간단한 매핑은 일반적인 규칙이며, 네임스페이스 및 클래스 매핑 테이블은 예외를 설명합니다.

기능 수준에서 좋은 소식은 UWP에서 지원되지 않는 것이 거의 없다는 것입니다. 대부분의 기술 집합 및 소스 코드는 이 포팅 가이드의 나머지 부분처럼 UWP 앱으로 매우 잘 변환됩니다. 하지만 UWP에 해당하는 기능이 없는 곳에 사용했을 수 있는 몇 가지 Windows Phone Silverlight 기능은 다음과 같습니다.

해당하는 UWP가 없는 기능 기능에 대한 Windows Phone Silverlight 설명서
Microsoft XNA입니다. 일반적으로 C++를 사용하는 Microsoft DirectX로 대체됩니다. 게임 개발DirectX 및 XAML interop를 참조하세요. XNA Framework 클래스 라이브러리
Lens 앱 Windows Phone 8을 위한 렌즈

 

토픽 설명
네임스페이스 및 클래스 매핑 이 토픽에서는 Windows Phone Silverlight API를 해당 UWP에 포괄적으로 매핑합니다.
프로젝트 포팅하기 Visual Studio에서 새로운 Windows 10 프로젝트를 만들고 파일을 복사하여 포팅 프로세스를 시작합니다.
문제 해결 이 포팅 가이드를 끝까지 읽는 것을 강력하게 권장하지만, 직접 프로젝트를 빌드하고 실행하는 단계로 빨리 진행하고자 한다는 것도 알고 있습니다. 이를 위해 필수적이지 않은 코드를 주석으로 처리하거나 스텁한 다음, 나중에 해당 부채를 갚기 위해 돌아와서 일시적인 진전을 이룰 수 있습니다. 다음의 몇 가지 토픽을 읽는 대신 이 테이블의 문제 해결 증상 및 해결 방법을 사용하는 것은 불가능하지만, 이 테이블의 문제 해결 증상 및 해결 방법을 사용하는 것은 이 단계에서 도움이 될 수 있습니다. 이후의 토픽을 진행할 때 항상 테이블을 다시 참조할 수 있습니다.
XAML 및 UI 포팅하기 선언적 XAML 태그 형식으로 UI를 정의하는 방법은 Windows Phone Silverlight에서 UWP 앱으로 매우 잘 변환됩니다. 시스템 리소스 키 참조를 업데이트하고 일부 요소 형식 이름을 변경한 다음, "clr-namespace"를 "using"로 변경하면 태그의 큰 섹션이 호환된다는 것을 알 수 있습니다.
I/O, 장치 및 앱 모델에 대해 포팅하기 사용자의 입력 및 출력이 장치 자체 및 해당 센서와 통합되는 코드에 포함됩니다. 또한 데이터 처리가 포함될 수 있습니다. 그러나 일반적으로 이 코드는 UI 계층 또는 데이터 계층으로 생각되지 않습니다. 이 코드는 진동 컨트롤러, 가속도계, 자이로스코프, 마이크 및 스피커(음성 인식 및 합성과 교차), (지리적) 위치 및 터치, 마우스, 키보드 및 펜과 같은 입력 형식과의 통합을 포함합니다.
비즈니스 및 데이터 계층 포팅하기 비즈니스 및 데이터 계층은 UI 뒤에 있습니다. 이러한 계층의 코드는 운영 체제 및 .NET Framework API(예시: 백그라운드 처리, 위치, 카메라, 파일 시스템, 네트워크 및 기타 데이터 액세스)를 호출합니다. 그 중 대부분은 UWP 앱에서 사용할 수 있으므로, 이 코드의 대부분을 변경 없이 포팅할 수 있을 것으로 예상할 수 있습니다.
폼 팩터 및 UX에 대해 포팅하기 Windows 앱은 일반적인 모양과 느낌을 PC, 모바일 장치 및 기타 다양한 종류의 장치에서 공유합니다. 사용자 인터페이스, 입력 및 상호 작용 패턴은 매우 유사하고, 장치 간에 이동하는 사용자는 익숙한 환경을 환영합니다.
사례 연구: Bookstore1 이 토픽은 매우 간단한 Windows Phone Silverlight 앱을 Windows 10 UWP 앱으로 포팅하는 사례 연구를 제공합니다. 다양한 장치에 설치할 수 있는 단일 앱 패키지를 Windows 10으로 만들 수 있으며, 이는 이 사례 연구에서 수행하게 될 작업입니다.
사례 연구: Bookstore2 이 사례 연구(Bookstore1에 제공된 정보를 기반으로 함)는 그룹화된 데이터를 LongListSelector에 표시하는 Windows Phone Silverlight 앱으로 시작합니다. 보기 모델에서 Author 클래스의 각 인스턴스는 해당 저자가 쓴 책의 그룹을 나타내며, LongListSelector에서는 저자별로 그룹화된 책 목록을 보거나 축소하여 저자의 점프 목록을 볼 수 있습니다.

문서

잡지 기사

프레젠테이션

  • Nokia 음악을 Windows Phone Windows 8로 가져오는 이야기