다음을 통해 공유


Windows 앱: 패키징, 배포 및 프로세스

참고 항목

일부 정보는 상업용으로 출시되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.

이 항목에서는 다음과 관련된 옵션에 대해 설명합니다.

  • 앱을 패키지할지 여부입니다.
  • 앱을 배포/유통하는 방법 및 설치 방법입니다.
  • 앱의 런타임 프로세스 - 앱이 얼마나 격리될 것인지, 어떤 API를 사용할 수 있는지.

새 앱과 기존 앱 모두에 대해 이러한 결정을 내릴 수 있습니다. 그러나 새 앱에 대한 계획 단계에 있는 경우 위의 사항을 고려하기 전에 먼저 앱에 사용할 개발 플랫폼 및 UI(사용자 인터페이스) 프레임워크를 결정합니다. 해당 결정에 대해서는 Windows 개발 옵션 개요를 참조하세요.

패키지 또는 패키지되지 않음

앱을 패키지 또는 패키지되지 않음으로 만드는 결정은 먼저 이 섹션에서 설명하는 패키지 ID라는 개념에 따라 결정됩니다. 이러한 기능이 필요하지 않은 경우, 자신과 사용자가 원하는 설치 관리자 환경을 결정하면 됩니다. 이러한 항목의 세부 정보를 자세히 살펴보겠습니다.

백그라운드 작업, 알림, 라이브 타일, 사용자 지정 컨텍스트 메뉴 확장 및 공유 대상을 비롯한 많은 Windows 확장성 기능은 런타임에 앱에 패키지 ID가 있는 경우에만 앱에서 사용할 수 있습니다. 운영 체제(OS)가 해당 API의 호출자를 식별할 수 있어야 하기 때문입니다. 패키지 ID가 필요한 기능을 참조하세요.

  • 이러한 기능을 사용해야 하는 경우 앱에 패키지 ID가 필요합니다. 따라서 패키지된 앱이어야 합니다(패키지된 앱은 패키지 ID가 있는 유일한 종류입니다). 패키지된 앱은 MSIX 기술을 사용하여 패키지됩니다(MSIX란? 참조).
    • 새 앱의 경우 패키징 프로세스는 바로 시작됩니다(이 섹션의 끝에는 이 작업을 수행하는 방법에 대한 정보가 있습니다).
    • 일부 기존 앱의 경우 새 앱과 동일한 패키징 프로세스를 따를 수 있습니다. 하지만 일부 기존 앱은 아직 모든 콘텐츠를 MSIX 패키지 내에 포함할 준비가 되지 않았기 때문에 앱을 외부 위치로 패키징하는 옵션이 있습니다. 이를 통해 앱에 패키지 ID를 부여하여 이를 필요로 하는 기능을 사용할 수 있습니다. 자세한 내용은 외부 위치로 패키지하여 패키지 ID 부여를 참조하세요.
  • 이러한 기능을 사용할 필요가 없더라도 패키지된 앱을 만드는 것이 좋습니다. 사용자에게 앱을 설치, 제거 및 업데이트하는 가장 쉬운 방법을 제공합니다. 자세한 내용은 이 항목의 배포/유통/설치를 참조하세요.
  • 하지만 패키지되지 않은 앱을 만드는 것은 옵션입니다.

요점은 패키지 앱만이 패키지 ID를 가지고 있으며 설치 환경이 가장 우수하다는 것입니다. 패키지되지 않은 앱에는 패키지 ID가 없습니다. 따라서 위에서 언급한 API 기능을 사용할 수 없습니다.

패키지된 및 패키지되지 않은 항목에 대한 자세한 내용은 배포 개요를 참조하세요. 특히 앱 패키징의 장점과 단점은 해당 항목의 섹션을 참조하세요. 이 항목에서는 외부 위치 패키징 옵션에 대해서도 설명합니다.

앱을 패키지 또는 패키지되지 않은 앱으로 구성하는 방법에 대한 자세한 내용을 확인하세요.

또한 이 토픽의 Windows 패키지 관리자 및 WinGet 클라이언트 섹션을 참조하세요.

배포/유통/설치

  • 패키지된 앱은 MSIX 기술을 사용하여 패키지됩니다.
    • 패키지된 앱은 MSIX를 사용하여 설치됩니다. 하지만 외부 위치로 패키징을 선택하면 '자체 설치 프로그램' 모델로 간주할 수 있습니다. 따라서 해당 옵션을 사용하려면 설치 관리자 작업을 수행해야만 합니다. 자세한 내용은 외부 위치로 패키지하여 패키지 ID 부여를 참조하세요.
  • 패키지되지 않은 앱에는 MSIX가 전혀 관여하지 않습니다.

그렇다면 앱 패키지 여부가 중요한 이유는 무엇일까요?

  • MSIX는 사용자에게 앱을 쉽게 설치, 제거 및 업데이트할 수 있는 방법을 제공합니다. 제거는 깨끗합니다. 앱이 제거되면 시스템이 설치 전과 동일한 상태로 복원되며 아티팩트가 남지 않습니다.
  • 이러한 종류의 앱은 증분 및 자동 업데이트도 지원합니다.
  • Microsoft Store는 이러한 종류의 앱을 최적화합니다(Store 내부 또는 외부에서 사용할 수 있음).
  • MSIX 앱 연결(Azure Virtual Desktop 가상 머신용)을 통해 사용하기 쉬운 경로입니다. 자세한 내용은 msIX 앱 연결이란?을 참조하세요.
  • 서명된 패키지는 강력한 변조 방지 기능을 활용합니다. 이 혜택은 프로그램 파일 아래 설치된 패키지되지 않은 앱보다 훨씬 큽합니다.

또한 이 토픽의 Windows 패키지 관리자 및 WinGet 클라이언트 섹션을 참조하세요.

AppContainer 또는 중간 IL

AppContainer에서 앱을 실행할지 여부는 보안과 관련된 문제입니다. 앱 컨테이너 앱의 프로세스와 그 자식 프로세스는 경량 앱 컨테이너 내에서 실행되며, 해당 프로세스는 특별히 부여된 리소스에만 액세스할 수 있습니다. 또한 파일 시스템 및 레지스트리 가상화를 사용하여 격리됩니다. 따라서 AppContainer에 구현된 앱은 해킹을 통해 할당된 제한된 리소스 외의 악의적인 동작을 허용할 수 없습니다.

패키지 또는 패키지되지 않은 앱은 AppContainer에서 실행되도록 구성할 수 있습니다. 그러나 이 프로세스는 패키지된 앱에 대해 더 간단합니다. 앱이 AppContainer 앱이 아닌 경우 중간 IL 앱입니다.

자세한 내용은 레거시 앱에 대한 AppContainerMSIX AppContainer 앱을 참조하세요.

AppContainer 또는 중간 IL에서 실행되도록 앱을 구성하는 방법에 대한 자세한 내용은 다음을 수행합니다.

  • WinUI 3 앱(Windows 앱 SDK). AppContainer에 대한 WinUI 3 프로젝트 구성에서 uap10:TrustLevel 앱 패키지 매니페스트 속성을 참조하세요.
  • 데스크톱 앱. MSIX AppContainer 앱TrustLevel Visual Studio 프로젝트 속성(사용자의 앱 종류에 적합한 섹션에서)을 참조하세요.
  • UWP(유니버설 Windows 플랫폼) 앱. UWP 앱은 이미 AppContainer에서 실행되도록 구성되어 있으며 해당 구성은 변경할 수 없습니다.

패키징되지 않은 앱에는 앱 패키지 매니페스트가 없다는 점을 기억하세요. 따라서 패키징되지 않은 앱의 경우 앱 패키지 매니페스트가 아닌 프로젝트 파일에서 AppContainer 또는 중간-IL인지 결정합니다.

Win32 앱 격리

Important

이 섹션에 설명된 기능은 Windows Insider Preview의 시험판 버전에서 사용할 수 있습니다.

Win32 앱 격리는 앱이 손상된 경우 피해를 억제하고 사용자의 개인 정보 선택을 보호하는 데 도움이 되는 Windows의 곧 출시될 보안 기능입니다. 이 기능은 리소스를 가상화하고 다른 리소스에 대한 조정된 액세스를 제공하는 AppContainer 및 구성 요소를 기반으로 구축됩니다. 앱을 격리하는 데 도움이 되는 설명서 및 도구는 Win32 앱 격리 저장소에 오신 것을 환영합니다를 참조하세요.

앱 기능

앱 기능(예: 인터넷 클라이언트, 위치, 마이크, 블루투스)은 주로 AppContainer에서 실행되는 패키지 앱과 관련이 있습니다. 따라서 모든 UWP(유니버설 Windows 플랫폼) 앱과 일부 데스크톱 앱이 포함됩니다.

그러나 (AppContainer 앱이 아닌) Medium IL 앱도 기능을 선언해야 하는 몇 가지 시나리오가 있습니다. 한 가지 예로 runFullTrust 제한 기능을 들 수 있습니다.

앱 기능, 적용되는 앱의 종류 및 구성 방법에 대한 자세한 내용은 앱 기능 선언을 참조하세요. 앱 패키지 매니페스트에서 기능을 구성합니다. 따라서 패키지된 앱에만 적용됩니다.

앱 종류

데스크톱 앱과 UWP(유니버설 Windows 플랫폼) 앱이 두 가지 주요 앱 유형이지만 데스크톱 앱 제품군에는 여러 종류의 앱이 있습니다. UI(사용자 인터페이스) 프레임워크(WinForms, WPF, Win32, Direct 2D/3D, UWP 또는 WinUI 3)를 선택하는 것은 이 항목에 설명된 구성과 어느 정도 독립적인 옵션 중 하나입니다.

하지만 이러한 앱 유형이 패키징, 배포 및 프로세스 측면에서 서로 어떻게 다른지 살펴 보겠습니다.

먼저 모든 UWP 앱이 패키지되고 AppContainer에서 실행됩니다. 그러나 데스크톱 앱의 경우 상황이 더 유연합니다. 데스크톱 앱을 패키지할지 여부를 선택할 수 있습니다. 또한 이러한 결정과는 별개로 데스크톱 앱을 AppContainer 또는 중간 IL 앱으로 구성하도록 선택할 수 있습니다.

패키지됨 패키지되지 않음
AppContainer 데스크톱 앱
UWP 앱
데스크톱 앱
중간 IL 데스크톱 앱 데스크톱 앱

패키지된 앱의 경우 원하는 앱의 종류를 구성하려면 앱 패키지 매니페스트의 uap10:RuntimeBehavior 속성을 사용합니다(애플리케이션(Windows 10) 참조).

  • 데스크톱 앱은 일반적으로 기본 또는 WinMain 진입점 기능이 있는 Windows .exes입니다. 앱을 데스크톱 앱으로 구성하려면 uap10:RuntimeBehavior을(를) "packagedClassicApp" 또는 "win32App"으로 설정합니다.
    • "packagedClassicApp" 값은 WinUI 3 앱(Windows 앱 SDK) 또는 데스크톱 브리지 앱(Centennial) 중 하나를 나타냅니다. 차이점은 Centennial 앱이 AppContainer에서 실행된다는 것입니다.
    • 그리고 "win32App"은 다른 모든 종류의 Win32 앱(외부 위치로 패키지된 앱 포함)을 나타냅니다.
  • 마지막으로 uap10:RuntimeBehavior을(를) "windowsApp"으로 설정하면 UWP 앱이 제공됩니다.

개발할 수 있는 앱 종류에 대한 모든 옵션은 Windows 앱 개발: 옵션 및 기능을 참조하세요.

Windows 앱 SDK—프레임워크 종속 또는 자체 포함

Windows 앱 SDK를 사용하는 앱을 개발하거나 유지 관리하는 경우 추가적으로 결정을 내려야 합니다. 앱이 종속된 Windows 앱 SDK를 배포하는 방법에는 다음 두 가지가 있습니다.

  • 프레임워크 종속(기본값)입니다. 앱을 사용하려면 대상 머신에 Windows 앱 SDK 런타임 및/또는 프레임워크 패키지가 있어야 합니다.
  • 자체 포함. 앱은 Windows 앱 SDK 종속성을 수반합니다.

자세한 내용은 Windows 앱 SDK 배포 개요를 참조하세요.

Windows 패키지 관리자 및 WinGet 클라이언트

패키지 관리자는 워크플로를 자동화하여 사용자가 소프트웨어를 설치/업그레이드/구성하는 과정을 지원합니다. 패키지 관리자는 모든 소프트웨어 설치를 도울 수 있지만, 주로 개발자 도구를 설치하는 데 사용되는 편입니다. 따라서 개발자 도구를 빌드하는 경우 이 옵션에 특히 관심이 있을 것입니다. 하지만 작동 방식은 이렇습니다.

  • 소프트웨어 개발자는 성공적인 제품 설치에 필요한 모든 부분을 패키지 관리자에게 선언적 지침의 형태로 정의합니다.
  • 그런 다음 사용자가 소프트웨어를 설치하면, 패키지 관리자가 선언적 지침을 따라 설치 및 구성 워크플로를 자동화합니다.

그 결과로 사용자 환경 준비에 소요되는 시간이 단축되고, 설치된 구성 요소 간의 호환성이 개선됩니다. 또한 Windows 패키지 관리자를 통해 패키지 또는 비패키지 앱을 .msix, .msi.exe 등의 형식으로 배포할 수 있습니다.

Windows 패키지 관리자에서 자세한 정보를 알아보세요.