튜토리얼: WPF 앱 현대화

앱을 처음부터 다시 작성하는 대신 최신 Windows 기능을 기존 소스 코드에 통합하여 기존 데스크톱 앱을 현대화하는 여러 가지 방법이 있습니다. 이 튜토리얼에서는 다음과 같은 기능을 사용하여 기존 WPF 기간 업무 앱을 현대화하는 여러 가지 방법을 살펴봅니다.

  • .NET Core 3
  • XAML Islands를 사용하는 UWP XAML 컨트롤
  • 적응형 카드 및 Windows 알림
  • MSIX 배포

이 튜토리얼을 진행하려면 다음과 같은 개발 기술이 필요합니다.

  • WPF를 사용하여 Windows 데스크톱 앱을 개발한 경험
  • C# 및 XAML에 대한 기본 지식
  • UWP에 대한 기본 지식

개요

이 튜토리얼에서는 Contoso Expenses라는 간단한 WPF 기간 업무 앱의 코드를 제공합니다. 이 튜토리얼의 가상 시나리오에 등장하는 Contoso Expenses 앱은 Contoso Corporation의 관리자가 보고서에 제출된 비용을 추적하는 데 사용하는 내부용 앱입니다. 현재 관리자는 터치 지원 디바이스를 보유하고 있으며, 마우스나 키보드 없이 Contoso Expenses 앱을 사용하려 합니다. 하지만 안타깝게도 현재 앱 버전은 터치를 지원하지 않습니다.

Contoso에서는 직원들이 지출 보고서를 보다 효율적으로 작성할 수 있도록 이 앱을 새 Windows 기능으로 현대화하려고 합니다. 새 UWP 앱을 빌드하여 여러 기능을 쉽게 구현할 수 있습니다. 그러나 기존 앱은 복잡하며 여러 팀에서 수년간 개발한 결과물입니다. 따라서 신기술을 사용하여 기존 앱을 처음부터 새로 작성하는 것은 필수 사항이 됩니다. 팀에서는 기존 코드 베이스에 새 기능을 추가하는 가장 좋은 방법을 찾고 있습니다.

이 튜토리얼의 시작 부분에서 Contoso Expenses 앱은 .NET Framework 4.7.2를 대상으로 하며 다음과 같은 타사 라이브러리를 사용합니다.

  • MVVM Light - MVVM 패턴의 기본 구현입니다.
  • Unity - 종속성 주입 컨테이너입니다.
  • LiteDb - 데이터를 저장하는 임베디드 NoSQL 솔루션입니다.
  • Bogus - 가짜 데이터를 생성하는 도구입니다.

이 튜토리얼에서는 다음과 같은 방법으로 새 Windows 기능을 사용하여 Contoso Expenses 앱을 개선합니다.

  • 기존 WPF 앱을 .NET Core 3.0으로 마이그레이션합니다. 이렇게 하면 이후에 중요한 새 시나리오가 열립니다.
  • XAML Islands를 사용하여 Windows 커뮤니티 도구 키트에서 제공하는 InkCanvasMapControl 래핑된 컨트롤을 호스팅합니다.
  • XAML Islands를 사용하여 표준 UWP XAML 컨트롤(여기서는 CalendarView)을 호스팅합니다.
  • 적응형 카드 및 Windows 알림을 앱에 통합합니다.
  • 새 버전의 앱이 준비되는 즉시 테스터 및 사용자에게 자동으로 제공할 수 있도록 MSIX를 사용하여 앱을 패키징하고 Azure DevOps에서 CI/CD 파이프라인을 설정합니다.

전제 조건

이 튜토리얼을 진행하려면 개발 컴퓨터에 다음과 같은 필수 구성 요소가 설치되어 있어야 합니다.

Visual Studio 2019를 사용하여 다음 워크로드 및 선택적 기능을 설치하십시오.

  • .NET 데스크톱 개발
  • 유니버설 Windows 플랫폼 개발
  • Windows SDK(10.0.18362.0 이상)

Contoso Expenses 샘플 앱 다운로드

튜토리얼을 시작하기 전, Contoso Expenses 앱의 소스 코드를 다운로드하고 Visual Studio에서 코드를 빌드할 수 있는지 확인합니다.

  1. AppConsult WinAppsModernization 워크숍 리포지토리릴리스 탭에서 앱 소스 코드를 다운로드합니다. 직접 접속할 수 있는 링크는 https://github.com/microsoft/AppConsult-WinAppsModernizationWorkshop/releases입니다.
  2. zip 파일을 열고 C:\ 드라이브의 루트에 모든 콘텐츠를 추출합니다. C:\WinAppsModernizationWorkshop이라는 폴더를 생성합니다.
  3. Visual Studio 2019를 열고 C:\WinAppsModernizationWorkshop\Lab\Exercise1\01-Start\ContosoExpenses\ContosoExpenses.sln 파일을 두 번 클릭하여 솔루션을 엽니다.
  4. 시작 버튼 또는 CTRL + F5 키를 눌러 Contoso Expenses WPF 프로젝트를 빌드, 실행 및 디버그할 수 있는지 확인합니다.

시작

Contoso Expenses 샘플 앱의 소스 코드를 다운로드하여 확인했으면 다음 튜토리얼을 시작할 수 있습니다.

중요 개념

다음 섹션에서는 이 튜토리얼에서 다루는 주요 개념의 배경 지식을 제공합니다. 이러한 개념을 이미 잘 알고 있는 경우에는 이 섹션을 건너뛰어도 됩니다.

UWP(유니버설 Windows 플랫폼)

Windows 8에서 Microsoft는 WinRT(Windows 런타임)의 일부로 새로운 API 집합을 도입했습니다. .NET Framework와 달리, WinRT는 앱에 직접 공개되는 API의 기본 레이어입니다. 또한 WinRT에는 개발자가 C++뿐 아니라 C#이나 JavaScript 같은 언어를 사용하여 상호 작용할 수 있도록 런타임 위에 추가되는 레이어인 언어 프로젝션이 도입되었습니다. 이 프로젝션을 통해 개발자는 .NET Framework를 사용하여 앱을 빌드할 때 얻은 C# 및 XAML 지식을 활용하는 앱을 WinRT 위에 빌드할 수 있습니다.

Windows 10에서 Microsoft는 WinRT 위에 빌드되는 UWP(유니버설 Windows 플랫폼)를 도입했습니다. UWP의 가장 중요한 기능은 모든 디바이스 플랫폼에서 공통 API 세트를 제공한다는 것입니다. 즉, 앱이 데스크톱에서 실행되든, Xbox One에서 실행되든, HoloLens에서 실행되든 동일한 API를 사용할 수 있습니다.

앞으로 타임라인, 프로젝트 로마, Windows Hello를 포함한 대부분의 새 Windows 기능은 WinRT API를 통해 공개됩니다.

MSIX 패키징

MSIX는 Windows 앱에 사용되는 최신 패키징 모델입니다. MSIX는 UWP 앱뿐 아니라 Win32, WPF, Windows Forms, Java, Electron 등과 같은 기술을 사용한 데스크톱 앱 빌드를 지원합니다. MSIX 패키지에 데스크톱 앱을 패키징할 때 Microsoft Store에 앱을 게시할 수 있습니다. 또한 데스크톱 앱을 설치할 때 패키지 ID를 받게 되며, 데스크톱 앱에서 광범위한 WinRT API 세트를 사용할 수 있습니다.

자세한 내용은 다음 문서를 참조하십시오.

XAML Islands

Windows 10 버전 1903부터 XAML Island라는 기능을 사용하여 UWP 이외의 데스크톱 앱에서 UWP 컨트롤을 호스팅할 수 있습니다. 이 기능을 사용하면 UWP 컨트롤을 통해서만 제공되는 최신 Windows UI 기능을 통해 기존 데스크톱 앱의 모양, 느낌 및 기능을 개선할 수 있습니다. 즉, Windows Ink와 같은 UWP 기능과 Fluent Design 시스템을 지원하는 컨트롤을 기존 WPF, Windows Forms 및 C++ Win32 애플리케이션에서 사용할 수 있습니다.

자세한 내용은 데스크톱 애플리케이션의 UWP 컨트롤(XAML Islands)을 참조하세요. 이 튜토리얼에서는 다음 두 가지 형식의 XAML Island 컨트롤을 사용하는 과정을 안내합니다.

  • Windows 커뮤니티 도구 키트의 InkCanvasMapControl. 이러한 WPF 컨트롤은 해당 UWP 컨트롤의 인터페이스 및 기능을 래핑하며, Visual Studio 디자이너의 다른 WPF 컨트롤과 마찬가지 방법으로 사용할 수 있습니다.

  • UWP Calendar view 컨트롤. Windows 커뮤니티 도구 키트의 WindowsXamlHost 컨트롤을 사용하여 호스팅하게 될 표준 UWP 컨트롤입니다.

.NET Core 3

.NET Core는 가볍고 쉽게 확장할 수 있는 전체 .NET Framework의 플랫폼 간 버전을 구현하는 오픈 소스 프레임워크입니다. 전체 .NET Framework에 비해 .NET Core 시작 시간이 훨씬 빨라졌으며, 여러 API가 최적화되었습니다.

초기에 출시된 여러 릴리스에서 .NET Core는 웹 또는 백 엔드 앱을 지원하는 데 중점을 두었습니다. .NET Core를 사용하면 Windows, Linux 또는 Docker 컨테이너 같은 마이크로서비스 아키텍처에서 호스팅할 수 있는 확장 가능한 웹 앱 또는 API를 쉽게 빌드할 수 있습니다.

.NET Core 3는 .NET Core의 최신 릴리스입니다. 이 릴리스의 주요 기능은 Windows Forms 및 WPF 앱을 포함하는 Windows 데스크톱 앱에 대한 지원입니다. .NET Core 3에서 신규 및 기존 Windows 데스크톱 앱을 실행하고 .NET Core에서 제공하는 모든 이점을 누릴 수 있습니다. XAML Islands에 호스트되는 UWP 컨트롤을 .NET Core 3를 대상으로 하는 Windows Forms 및 WPF 앱에서도 사용할 수 있습니다.

참고

WPF 및 Windows Forms는 여러 플랫폼에서 사용할 수 없으며, Linux 및 MacOS에서 WPF 또는 Windows Forms를 실행할 수 없습니다. WPF 및 Windows Forms의 UI 구성 요소는 예전과 같이 Windows 렌더링 시스템에 종속되어 있습니다.

자세한 내용은 .NET Core 3.0의 새로운 기능을 참조하세요.