최신 데스크톱 애플리케이션 배포

데스크톱 애플리케이션을 개발할 때 고려해야 하는 한 가지 사항은 애플리케이션을 패키지하고 사용자 머신에 배포하는 방법입니다. 패키징, 배포, 설치와 관련된 문제는 일반적으로 개발자와는 다른 것에 신경을 쓰는 IT 전문가가 해결해야 합니다.

오늘날, 우리는 모두 개발자와 IT 전문가가 긴밀하게 협력하여 애플리케이션을 프로덕션 환경으로 이동하는 DevOps 개념에 관해 잘 알고 있습니다. 그러나 10년 넘게 데스크톱 경쟁에 참여했다면 다음 스토리를 알 수 있을 것입니다. 개발자 팀은 프로젝트 마감 기한을 충족하기 위해 열심히 협업합니다. 비즈니스 사용자는 회사를 운영하기 위해 다양한 사용자 머신에서 작동하는 시스템이 필요하기 때문에 불안해합니다. “개시일”에 프로젝트 관리자는 모든 개발자와 함께 코드가 잘 작동하고 모든 것이 제대로 진행되어 출시 가능한지 확인합니다. 그런 다음, 패키지 팀이 참여하여 앱의 설정을 생성하고 모든 사용자 머신에 배포하면 일련의 테스트 사용자가 애플리케이션을 실행합니다. UI를 표시하기 전에 애플리케이션이 “개체 ~의 메서드 ~ 실패”라는 예외를 throw하기 때문에 테스트 사용자가 사용해 봅니다. 비상 상황이 알려지기 시작하고 간단한 조사에 따르면 타사 컨트롤을 도입한 젊고 피곤한 개발자가 분명히 “개발 머신에서 작업했습니다”.

데스크톱 애플리케이션 설치는 전통적으로 다음 두 가지 이유로 큰 문제였습니다.

  • 개발 팀과 IT 팀 간에 긴밀한 협업 문화가 없습니다.
  • 빌드하는 데 사용할 수 있는 견고한 패키징 및 배포 기술이 없습니다.

실제로 이제까지 다음과 같은 이유로 앱을 설치한 것을 후회하는 경우가 있습니다.

  • 결국 머신에서 원치 않는 부작용이 발생합니다.
  • 이전에 설치된 일부 애플리케이션이 작동을 중지합니다.

또한 앱을 제거하여 시스템을 원래 상태로 복원할 수 없습니다. Microsoft는 “DLL 지옥” 또는 “Winrot” 같은 용어를 만든 상황에 완전히 익숙합니다.

이 장에서는 MSIX를 살펴봅니다. MSIX는 향후 패키징 기술의 견고한 기초를 제공하기 위해 이전 기술 중 가장 적합한 기술을 포착하려고 하는 Microsoft의 완전히 새로운 기술입니다.

패키징 기술은 현대화를 통해 무엇을 해야 하나요? 패키징은 투자 비용이 높은 엔터프라이즈 IT의 기초가 되는 것으로 확인되었습니다. 현대화가 최신 기술을 사용하는 것과 관련된 것만은 아닙니다. 회사에서 비즈니스 요구 사항이 정의된 순간부터 클라이언트에게 기능을 제공할 때까지 출시 기간을 단축하는 것과 관련이 있습니다.

최신 애플리케이션 수명 주기

오늘날 개발자는 앱의 코드를 작성하고 빌드한 다음, 생성된 자산을 IT 전문가에게 전달합니다. 그런 다음, IT 전문가는 앱을 다시 구성하고 일반적으로 MSI 및 최근에는 App-V 패키징 형식으로 앱을 다시 패키지합니다. 이후 앱은 다양한 채널 및 도구를 통해 배포됩니다. 이 접근 방식과 관련된 주요 문제 중 하나는 일반적으로 “패키징 마비(packaging paralysis)”로 알려져 있습니다. 문제는 앱 업데이트 또는 OS 업데이트가 있을 때마다 이 주기가 반복된다는 것입니다.

다음 그림에서 반영된 프로세스를 확인할 수 있습니다.

최신 IT 수명 주기를 보여 주는 다이어그램

회사에는 이 패키징 주기를 세 개의 독립 주기로 분리하는 방법이 필요합니다.

  • OS 업데이트
  • 애플리케이션 업데이트
  • 사용자 지정

최신 IT 선순환을 보여 주는 다이어그램

이전 다이어그램은 다음 작업을 수행할 수 있음을 보여 줍니다.

  • 앱을 다시 패키지하지 않고도 기본 OS를 업데이트합니다.
  • 원래 개발자 패키지를 다시 패키지하지 않고도 IT에서 사용자 지정을 사용할 수 있습니다.

이와 같은 급격한 변화는 다음 그림과 같이 새로운 최신 IT 수명 주기로 이어집니다.

Microsoft 도구를 사용하여 애플리케이션 수명 주기를 보여 주는 다이어그램

개발자는 앱을 만들고 IT 전문가가 다시 패키지하지 않고도 사용하고 구성할 수 있는 MSIX 패키지를 생성합니다. Microsoft는 MSIX 기술과 함께 다시 패키지하지 않고도 IT에서 사용자 지정 및 구성할 수 있는 도구를 만들었습니다.

MSIX: 차세대 배포

MSIX 이전에는 설치 마법사, MSI, ClickOnce, App-V, 스크립팅 같은 여러 가지 패키징 기술을 사용할 수 있었습니다. 각 기술에는 고유한 장점이 있으며 Microsoft는 MSIX 빌드에 가장 적합한 기술을 선택하기로 했습니다. MSIX는 다음 기존 기술을 기반으로 각 기술의 가장 적합한 부분을 선택하여 빌드되었습니다.

  • App-V => 컨테이너화
  • ClickOnce => 자동 업데이트
  • MSI => 간편한 배포

MSIX를 사용하면 모든 기능을 갖춘 하나의 설치 프로그램 기술을 사용할 수 있습니다.

MSIX 빌드에 영향을 미치는 다양한 기술을 보여 주는 다이어그램

MSIX의 이점

앱 설치를 후회하지 않음

MSIX는 예측 가능하고 안정적이며 안전한 배포를 제공합니다. 패키지 매니페스트에 포함된 선언적 메서드를 통해 OS는 애플리케이션에 필요한 모든 자산을 추적할 수 있습니다. 또한 부작용 없이 완전한 제거를 제공합니다.

디스크 공간 최적화

MSIX는 사용자의 머신 디스크 공간에서 애플리케이션에 사용되는 공간을 줄이도록 최적화됩니다. MSIX는 파일의 단일 인스턴스 스토리지를 만듭니다. 즉, 두 가지 패키지가 동일한 DLL을 사용하는 경우 DLL이 두 번 설치되지 않습니다. 플랫폼은 선언적 특성 덕분에 특정 앱이 설치한 모든 파일을 알고 있기 때문에 해당 문제를 처리합니다. 또한 MSIX를 통해 나란히 작동하는 다양한 버전의 DLL을 사용할 수 있습니다.

리소스 패키지를 사용하면 다국어 앱을 쉽게 만들 수 있으며 OS에서 사용되는 앱의 설치를 처리합니다.

네트워크 최적화

MSIX는 차등 업데이트라는 기능을 가능하게 하는 바이트 블록 수준에서 파일의 차이점을 검색합니다. 즉, 업데이트된 바이트 블록만 애플리케이션 업데이트에서 다운로드됩니다.

MSIX가 차등 업데이트를 관리하는 방법을 보여 주는 다이어그램

스트리밍 설치를 사용하면 사용자는 앱의 다른 부분이 백그라운드에서 다운로드되는 동안 애플리케이션에서 빠르게 작업을 시작할 수 있습니다. 이 기능은 사용자에게 매력적인 경험을 제공합니다.

선택적 패키지 기능을 사용하면 앱 배포를 구성 요소화할 수 있으므로 필요할 때 해당 패키지를 다운로드할 수 있습니다.

간단한 패키징 및 배포

AppManifest는 모든 애플리케이션에 대해 표준 방식으로 버전 관리, 디바이스 대상 지정, ID를 선언합니다. 또한 견고한 보안 기반을 제공하는 자산에 서명하는 방법을 제공합니다.

OS 관리

OS는 애플리케이션을 설치, 업데이트, 제거하는 모든 프로세스를 처리합니다. 애플리케이션은 사용자별로 설치되지만 한 번만 다운로드되므로 디스크 공간이 최소화됩니다. Microsoft는 Windows 7에서도 MSIX 환경을 제공하기 위해 노력하고 있습니다.

Windows는 앱의 무결성을 제공합니다.

디지털 시그니처를 사용하면 신뢰할 수 없는 소스에서 애플리케이션을 설치하지 않도록 보장할 수 있습니다. 또한 MSIX는 다음 이유로 변조를 방지합니다.

  • 파일 해시의 레코드를 유지합니다.
  • 파일이 설치 후 수정되었는지 검색합니다.

전체 앱 카탈로그에서 작동

MSIX에 관한 가장 멋진 것 중 하나는 전체 애플리케이션 카탈로그, Windows Forms, WPF, MFC/ATL, Delphi에서 작동한다는 것입니다. xCopy 배포 또는 ClickOnce를 수행하거나 스토어로 이동하려는 경우에도 동일한 MSIX 패키지를 사용할 수 있습니다.

도구

Windows 애플리케이션 패키징 프로젝트

Visual Studio에서 Windows 애플리케이션 패키징 프로젝트 프로젝트를 사용하여 데스크톱 앱에 대한 패키지를 생성할 수 있습니다. 그런 다음, 해당 패키지를 Microsoft Store에 게시하거나 하나 이상의 PC로 사이드로드할 수 있습니다.

MSIX Packaging Tool

MSIX 패키징 도구를 사용하면 기존 Win32 애플리케이션을 MSIX 형식으로 다시 패키지할 수 있습니다. 변환을 위한 명령줄 및 대화형 UI를 둘 다 제공하며 소스 코드가 없어도 애플리케이션을 변환할 수 있는 기능을 제공합니다.

MSIX Packaging Tool

패키지 지원 프레임워크

패키지 지원 프레임워크는 소스 코드에 액세스할 수 없는 경우 기존 Win32 애플리케이션에 수정 사항을 적용하여 MSIX 컨테이너에서 실행할 수 있도록 지원하는 오픈 소스 키트입니다. 패키지 지원 프레임워크는 애플리케이션이 최신 런타임 환경의 모범 사례를 수행하는 데 도움이 됩니다.

앱 설치 관리자

앱 설치 관리자를 사용하면 앱 패키지를 두 번 클릭하여 Windows 10 앱을 설치할 수 있습니다. 즉, 사용자가 PowerShell 또는 다른 개발자 도구를 사용하여 Windows 10 앱을 배포할 필요가 없습니다. 앱 설치 관리자는 웹, 선택적 패키지, 관련 세트에서 앱을 설치할 수도 있습니다.

기존 Win32 데스크톱 애플리케이션에서 MSIX 패키지를 만드는 방법

기존 Win32 애플리케이션에서 MSIX 패키지를 만드는 프로세스를 살펴보겠습니다. 이 예제에서는 Windows Forms 앱을 사용합니다.

시작하려면 새 프로젝트를 솔루션에 추가하고 Windows 애플리케이션 패키징 프로젝트를 선택하고 이름을 지정합니다.

새 Windows 애플리케이션 패키징 프로젝트 추가

패키징 프로젝트의 구조를 확인하고 Applications 라는 특수 폴더에 주목합니다. 이 폴더 내에서 패키지에 포함하려는 애플리케이션을 지정할 수 있습니다. 2개 이상 추가할 수 있습니다.

패키징 프로젝트 구조

Applications 폴더를 마우스 오른쪽 단추로 클릭하고 Visual Studio 솔루션에서 패키지할 Windows Forms 프로젝트를 선택합니다.

패키징 프로젝트에 Windows Forms 프로젝트 추가

이제 패키지를 컴파일하고 생성할 수 있지만 몇 가지 항목을 살펴보겠습니다. 사용자 환경을 개선하기 위해 Visual Studio는 최신 애플리케이션이 타일 표시줄 및 시작 메뉴의 아이콘과 타일 자산을 처리하는 데 필요한 모든 시각적 자산을 자동으로 생성할 수 있습니다. Package.appxmanifest 파일을 열어 매니페스트 디자이너에 액세스합니다. 그런 다음, 만들기 를 클릭하여 프로젝트에 있는 지정된 이미지에서 모든 시각적 자산을 생성할 수 있습니다.

Visual Studio의 매니페스트 디자이너 스크린샷

Package.appxmanifest 파일의 코드를 열면 몇 가지 흥미로운 항목을 확인할 수 있습니다.

<Package> 아래 오른쪽에는 <Identity> 노드가 있습니다. 이 노드는 패키지된 애플리케이션이 해당 ID를 가져올 위치이며 OS에서 관리됩니다.

Identity 노드

<Capabilities> 노드에서 애플리케이션에 필요한 모든 요구 사항을 찾을 수 있으며 Win32 애플리케이션인 앱을 완전 신뢰 모드로 실행하도록 OS에 알리는 <rescap:Capability Name="runFullTrust" \>에 특히 주의해야 합니다.

Capabilities 노드

패키징 프로젝트를 솔루션의 시작 프로젝트로 설정하고 ‘실행’을 선택합니다. 다음과 같이 진행됩니다.

  • Windows Forms 애플리케이션을 컴파일합니다.
  • 빌드 결과에서 MSIX 패키지를 만듭니다.
  • 패키지를 배포합니다.
  • 개발 머신에 로컬로 애플리케이션을 설치합니다.
  • 앱을 시작합니다.

설치된 애플리케이션

이를 통해 MSIX에서 제공하는 완전 설치 및 제거 환경이 Windows 10에 완전히 통합됩니다.

최종 스테이지는 MSIX 패키지를 또 다른 머신에 배포하는 방법과 관련이 있습니다.

패키징 프로젝트를 마우스 오른쪽 단추로 클릭하고 스토어 메뉴를 선택한 다음, 앱 패키지 만들기 옵션을 선택합니다.

그런 다음, 스토어에 업로드할 패키지 만들기 또는 사이드로드할 패키지 만들기 중에서 선택할 수 있습니다. 대부분 현대화 시나리오에서는 사이드로드할 패키지를 만들고 싶습니다. 를 선택합니다.

패키지 구성

여기서 대상으로 지정할 여러 아키텍처를 선택하여 원하는 수만큼 동일한 MSIX 패키지에 포함할 수 있습니다.

마지막 단계는 최종 설치 자산을 배포할 위치를 선언하는 것입니다.

업데이트 설정 구성

엔터프라이즈 파일 서버에서 공유 UNC 경로의 웹 서버를 사용하도록 선택할 수 있습니다. 애플리케이션을 업데이트하는 방법을 지정하려면 설정에 주의해야 합니다. 다음 섹션에서 애플리케이션 업데이트를 설명합니다.

자세한 단계별 가이드는 Visual Studio를 사용하여 소스 코드에서 데스크톱 앱 패키지를 참조하세요.

MSIX의 자동 업데이트

Windows 스토어에는 Windows 업데이트를 사용하는 유용한 업데이트 메커니즘이 있습니다. 대부분 엔터프라이즈 시나리오에서는 데스크톱 앱을 배포하는 데 스토어를 사용하지 않습니다. 따라서 애플리케이션에 대한 업데이트를 구성하고 사용자에게 풀하는 비슷한 방법이 필요합니다.

Windows 10 기능 및 MSIX 패키지의 조합을 사용하여 사용자에게 유용한 업데이트 환경을 제공할 수 있습니다. 실제로 사용자는 기술적으로는 필요하지 않지만 원활한 애플리케이션 업데이트 환경을 활용할 수 있습니다.

다음 두 가지 방법으로 사용자와 상호 작용하도록 업데이트를 구성할 수 있습니다.

  • 사용자에게 표시되는 업데이트 메시지: OS는 애플리케이션이 곧 설치될 것임을 사용자에게 알리는 자동 생성된 멋진 UI를 표시합니다. OS는 설치 파일에서 지정하는 속성을 기반으로 이 UI를 빌드합니다.

  • 백그라운드에서 자동 업데이트. 이 옵션을 사용하면 사용자가 업데이트를 알고 있을 필요가 없습니다.

애플리케이션이 시작될 때 또는 정기적으로 업데이트를 수행하려는 시간을 구성할 수도 있습니다. 사이드로드 기능 덕분에 애플리케이션이 실행되는 동안에도 이 업데이트를 얻을 수 있습니다.

이 유형의 배포를 사용하는 경우 .appinstaller 라는 특수 파일이 생성됩니다. 이 간단한 파일에는 다음 섹션이 포함됩니다.

  • .appinstaller 파일의 위치
  • 애플리케이션의 기본 MSIX 패키지 속성
  • 업데이트 동작

.appinstaller 파일

Microsoft는 이 파일과 함께 링크에서 설치 프로세스를 시작할 수 있는 특정 URL 프로토콜을 디자인했습니다.

<a href="ms-appinstaller:?source=http://mywebservice.azureedge.net/MyApp.msix">Install app package </a>

해당 프로토콜은 모든 브라우저에서 작동하고 Windows 10의 뛰어난 사용자 환경을 통해 설치 프로세스를 시작합니다. OS는 설치 프로세스를 관리하므로 이 애플리케이션이 설치된 위치를 인식하고 프로세스의 영향을 받는 모든 파일을 추적합니다.

MSIX는 패키지의 일부 속성을 자동으로 표시하는 설치용 사용자 인터페이스를 만듭니다. 이를 통해 모든 앱에서 공통적인 설치 환경을 사용할 수 있습니다.

새 MSIX 패키지를 생성하고 배포 서버로 이동한 후에는 .appinstaller 파일을 편집하여 변경 내용(주로 새 MSIX 파일의 버전 및 경로)을 반영해야 합니다. 다음에 사용자가 애플리케이션을 시작할 때 시스템은 변경 내용을 검색하고 새 버전의 파일을 백그라운드에서 다운로드합니다. 다운로드가 완료되면 사용자를 위해 새 애플리케이션 시작 시 투명하게 설치가 실행됩니다.