앱 패키지 및 배포(Windows 런타임 앱)

Applies to Windows and Windows Phone

개발자는 Windows 런타임 앱을 설치하거나 제거하기 위한 루틴을 작성하지 않습니다. 대신 앱을 패키지하여 스토어에 제출합니다. 사용자는 스토어에서 앱을 앱 패키지로 구입합니다. 운영 체제는 앱 패키지의 정보를 사용하여 사용자별로 앱을 설치하고 앱을 설치한 모든 사용자가 앱을 제거한 후 장치에서 앱의 모든 추적이 사라졌는지 확인합니다.

앱 패키지는 OPC(Open Packing Conventions) 표준을 기반으로 하는 컨테이너입니다. OPC는 표준 ZIP 파일을 사용하여 앱의 데이터와 리소스를 저장하는 구조화된 방법을 정의합니다. Microsoft Visual Studio를 사용하여 앱 패키지를 배포하는 방법에 대한 자세한 내용은 Visual Studio를 사용하여 Windows 런타임 앱 배포를 참조하세요.

Windows 8.1 및 Windows Phone 8.1부터는 새로운 앱 번들을 활용하여 앱 패키징 및 배포를 최적화할 수 있습니다. 뿐만 아니라 리소스 팩을 통해 원하지 않는 고객의 디스크 공간, 대역폭 또는 앱 구매 환경에는 영향을 주지 않고 고해상도 디스플레이를 위한 자산, 지역화 등의 추가 기능을 원하는 고객에게 제공할 수 있습니다. 또한 하드 링크는 동일한 파일을 두 번 이상 다운로드하지 않음으로써 데이터 중복을 제거하여 앱의 설치를 최적화합니다.

Windows 런타임 앱 배포

Windows 런타임 앱 모델은 앱에 대한 모든 설치 및 업데이트 데이터와 명령을 단일 패키지로 제공하는 선언적 상태 기반 프로세스입니다. 이 선언적 모델에서는 배포 작업이 안정적입니다. 패키지에 제공된 파일은 변경할 수 없습니다. 이는 이러한 파일이 장치에 제공된 이후로 수정되지 않았음을 의미합니다. 패키지 소유자가 사용자 지정 동작과 코드를 작성할 필요가 없기 때문에 오류 지점 수가 줄어듭니다.

업데이트 프로세스 중에는 새 버전의 앱이 다운로드되어 사용자의 프로필에 설치되며, 그 후에 바로 이전 버전이 장치에서 제거됩니다. Windows Installer와 달리, 패치 파일 또는 Windows 런타임 앱을 배포하는 데 사용되는 다른 파일의 개념이 없습니다.

  • Applies to Windows

참고  

Windows에서는 Windows 런타임 앱이 사용자의 프로필에 설치되므로 각 사용자가 Windows 스토어 앱을 완전히 제어할 수 있습니다. 장치에 있는 다른 사용자의 앱에 영향을 주지 않고 앱을 설치, 업데이트 및 제거할 수 있습니다.

배포에 대한 자세한 내용은 Windows 런타임 앱 배포를 참조하세요.

Windows 런타임 앱 패키지 – .appx

Windows 런타임 앱 패키지에는 Windows 런타임 앱을 정의하는 모든 구성 요소가 저장되어 있습니다. Windows 런타임 앱 패키지는 .appx 파일 확장명을 사용하며 Windows 런타임 앱의 설치 단위입니다. Windows 런타임 앱 패키지는 ISO 및 ECMA OPC(Open Packaging Conventions) 표준의 하위 집합으로 정의된 ZIP 기반 컨테이너 파일입니다. 각 Windows 런타임 앱 패키지에는 앱의 유효성을 검사하고, 앱을 배포, 관리 및 업데이트하는 데 필요한 정보와 앱의 페이로드 파일이 포함되어 있습니다. 각 Windows 런타임 앱 패키지에는 크게 나누어 다음과 같은 항목이 포함되어 있습니다.

앱 페이로드

앱 코드 파일 및 자산

페이로드 파일은 Windows 런타임 앱을 만들 때 작성하는 코드 파일과 자산입니다.

앱 매니페스트

앱 매니페스트 파일(AppxManifest.xml)

앱 매니페스트는 앱의 ID, 앱의 접근 권한 값, 배포 및 업데이트에 대한 정보를 선언합니다. 앱 매니페스트 파일에 대한 자세한 내용은 앱 패키지 매니페스트를 참조하세요.

앱 블록 지도

앱 패키지의 블록 맵 파일(AppxBlockMap.xml)

블록 맵 파일에는 패키지에 포함된 모든 앱 파일과 함께 운영 체제가 파일 무결성을 확인하고 앱에 대한 업데이트를 최적화하는 데 사용하는 관련 암호화 해시 값이 나열되어 있습니다. 블록 맵 파일에 대한 자세한 내용은 앱 패키지 블록 맵을 참조하세요.

앱 서명

앱 패키지의 디지털 서명 파일(AppxSignature.p7x)

앱 패키지 서명은 패키지와 콘텐츠가 서명된 후에 수정되지 않았음을 확인해 줍니다. 서명 인증서가 신뢰할 수 있는 루트 인증 기관 인증서를 유효화하는 경우 서명은 또한 패키지에 서명한 사람을 식별합니다. 패키지의 서명자는 일반적으로 앱 게시자 또는 작성자입니다.

위에 언급한 이러한 항목은 Windows 8 이상과 Windows Phone 8.1 이상에 배포할 수 있는 완전히 자체 포함된 Windows 런타임 앱을 구성합니다. 개발자는 앱에 대한 앱 페이로드와 매니페스트 파일을 만듭니다. Visual Studio는 앱을 패키지할 때 앱 블록 맵 및 서명 파일을 자동으로 패키지에 추가합니다. 그러나 앱을 수동으로 패키지하려는 경우 독립 실행형 MakeAppxSignTool 유틸리티를 사용할 수도 있습니다. 다음 섹션에서는 Windows 런타임 앱을 패키지하여 배포하는 방법을 설명합니다.

패키지 ID

앱 패키지의 가장 기본적인 요소 중 하나는 패키지를 정의하는 5부분으로 구성된 튜플입니다. 이 튜플은 패키지 ID라고 하며 다음 데이터로 구성됩니다.

Name

앱 패키지에 사용되는 일반적인 이름입니다. 예: "myCompany.mySuite.myApp"

참고  이 이름은 반드시 앱 타일에 표시되는 이름이라고 할 수는 없습니다.

Publisher

게시자는 Windows 런타임 앱의 게시자를 나타냅니다. 대부분의 경우 게시자는 개발자 계정을 등록하는 데 사용된 계정과 동일합니다.

Version

앱의 이후 릴리스를 제공하는 데 사용되는 네 부분으로 구성된 버전 설명자(주 버전.부 버전.빌드 번호.수정 번호)입니다. 예: "1.0.0.0"

참고  버전 설명자의 네 부분을 모두 사용해야 합니다.

ProcessorArchitecture

앱 패키지의 대상 아키텍처입니다. 이 값은 "x86", "x64", "arm" 또는 "neutral"일 수 있습니다. 대부분의 경우 이 필드는 모든 아키텍처를 나타내는 "neutral"일 수 있습니다.

ResourceID

옵션.

앱 패키지의 리소스를 지정하는 게시자가 지정한 문자열입니다. 튜플의 이 부분은 주로 앱 패키지에 지역과 관련된 자산(예: 언어)이 있는 경우 사용됩니다.

패키지를 수동으로 만드는 경우에는 Identity 요소를 참조하세요.

패키지 형식

여기에서는 앱 패키지(즉, .appx 파일 형식)에 대해 자세히 설명합니다.

앱 패키지는 읽기 전용입니다.

앱 패키지가 OPC의 하위 집합을 기반으로 하지만 OPC 또는 ZIP 파일을 조작하여 앱 패키지를 편집하는 데 기존 API를 사용하지 않는 것이 좋습니다. 앱 패키지를 만든 후에는 패키지를 읽기 전용으로 처리합니다. 앱 패키지를 만드는 Visual Studio 및 MakeAppx 프로세스는 AppxBlockMap.xml 파일을 자동으로 생성하여 패키지에 추가합니다. 패키지 콘텐츠를 변경할 경우 이와 일치하도록 패키지의 블록 맵 파일을 업데이트해야 합니다. 새 패키지와 블록 맵 파일을 만들려면 Visual Studio, MakeAppx 압축 명령 또는 Windows 8 네이티브 코드 IAppxPackageWriter API를 사용하여 패키지를 다시 빌드해야 합니다.

앱 패키지 페이로드 파일 이름

OPC를 준수하기 위해 앱 패키지에 저장된 모든 파일의 파일 경로 이름은 URI(Uniform Resource Identifier)를 준수해야 합니다. URI를 준수하지 않는 파일 경로는 앱 패키지에 저장할 때 퍼센트 인코딩해야 하며, 패키지에서 추출할 때 다시 원래 파일 경로로 디코드해야 합니다. 예를 들어 경로 및 이름에 공백과 URI 예약된 문자인 '[' 및 ']'가 포함된 다음 페이로드 파일을 살펴보겠습니다.


\my pictures\kids party[3].jpg

이 페이로드 파일을 앱 패키지에 저장할 때 파일의 경로는 다음과 같이 됩니다.


/my%20pictures/kids%20party%5B3%5D.jpg

Visual Studio, 앱 패키지 작성 도구(MakeAppx) 및 패키징 API는 파일 경로의 퍼센트 인코딩 및 디코딩을 자동으로 처리합니다. 일반적인 ZIP 유틸리티 또는 API를 사용하여 앱 패키지에서 바로 파일을 추출하려고 할 경우 파일 경로가 퍼센트 인코드된 상태로 유지될 수 있습니다. 따라서 MakeAppx 압축 풀기 명령 또는 IAppxPackageReader API를 사용하여 앱 패키지에서 파일을 추출하는 것이 좋습니다.

앱 패키지 용량

앱 패키지가 지원하는 앱의 최대 용량 제한은 다음과 같습니다.

패키지 용량최대 구성
파일 수파일 100,000개
패키지 크기100GB

 

앱 패키지 예약된 경로 및 파일 이름

다음 경로 및 파일 이름은 예약되어 있으므로 앱 페이로드 파일에 사용하면 안 됩니다.

예약된 경로 및 파일 이름사용
/AppxManifest.xml개발자가 작성한 앱 패키지 매니페스트에 예약된 파일 이름
/AppxBlockMap.xml앱 패키지 블록 맵에 예약된 파일 이름
/AppxSignature.p7x앱 패키지 Microsoft Authenticode 디지털 서명에 예약된 파일 이름
/[Content_Types].xml앱 패키지용으로 OPC에서 요구하는 콘텐츠 형식 메타데이터에 예약된 파일 이름
/AppxMetadata/앱 패키지 메타데이터 파일에 예약된 폴더 경로
/Microsoft.System.Package.Metadata/배포된 앱 패키지에 대한 Microsoft 메타데이터 파일에 예약된 폴더 경로

 

앱 패키지 디지털 서명

먼저 앱 패키지에 서명해야 사용자가 설치할 수 있습니다. 앱 패키지 서명은 Authenticode를 통해 부분적으로 자동화되지만 앱 패키지 서명 시 다음 기능을 제어해야 합니다.

  • 코드 서명 인증서의 주체 이름은 앱 패키지에 있는 AppxManifest.xml 파일의 Identity 요소에 지정된 Publisher 특성과 일치해야 합니다.
  • 앱 패키지에 서명하는 데 사용되는 해시 알고리즘은 앱 패키지의 AppxBlockMap.xml 파일을 생성하는 데 사용된 해시 알고리즘과 일치해야 합니다. 이 해시 알고리즘은 BlockMap 요소의 HashMethod 특성에 지정되어 있습니다.
  • 앱 패키지에는 서명과 독립적으로 타임스탬프를 지정할 수 없습니다. 타임스탬프를 원하는 경우 서명하는 동안 타임스탬프를 지정해야 합니다.
  • 앱 패키지에는 여러 개의 서명을 포함할 수 없습니다.

패키지의 서명은 Windows 런타임 앱의 사용이 허가되는 방식을 결정합니다. 앱의 사용이 허가되는 방식은 앱을 설치하고 실행하는 방식에 영향을 미치므로 두 개의 앱 패키지의 패키지 ID가 동일한 경우에도 설치하는 동안 동일한 패키지로 처리할 수 없습니다. 예를 들어 앱 패키지의 패키지 ID가 이미 설치된 다른 앱과 동일하지만 서명이 다른 경우에는 이 앱 패키지를 설치할 수 없습니다.

선언적 설치

Windows 런타임 앱 배포는 앱 패키지 매니페스트에 의존하는 완전히 선언적 프로세스입니다. 앱 패키지 매니페스트를 사용하여 운영 체제와의 원하는 통합을 캡처합니다. 예를 들어 앱 패키지 매니페스트를 사용하여 운영 체제에서 파일 형식 연결(예: .jpg)을 사용해야 할 필요성을 선언합니다.

이렇게 하면 운영 체제에서 여러 장치의 각 사용자에 대해 일관되고 신뢰할 수 있는 환경이 되도록 Windows 런타임 앱 배포 프로세스를 완전히 관리할 수 있습니다. 또한 선언적 설치 Windows 런타임 앱을 사용하면 앱 제거가 결정적이며 반복 가능한 프로세스가 됩니다.

앱 패키지 매니페스트 내에서 Windows 런타임 앱 설치의 일부로 다양한 기술을 선언할 수 있습니다.

앱 전제 조건

앱을 성공적으로 배포하려면 운영 체제가 앱 패키지 매니페스트에 지정된 해당 앱의 전제 조건을 모두 충족해야 합니다. 예를 들어 운영 체제 버전이 Windows 런타임 앱에서 호출하는 새 API를 표시하는 경우 앱은 특정 최소 버전 운영 체제에서의 전제 조건을 선언합니다. 이 경우 앱을 설치하려면 먼저 대상 장치에 적절한 운영 체제가 있어야 합니다. Windows 8 이상 및 Windows Phone 8.1 이상에서는 앱 패키지 매니페스트에서 다음과 같은 주요 전제 조건 유형을 선언할 수 있습니다.

OSMinVersion

이 앱을 실행할 수 있는 최소 버전의 운영 체제와 앱 모델 플랫폼을 지정합니다.

OSMaxVersionTested

개발자가 이 앱을 테스트한 결과 정상적으로 작동되는 것을 확인한 운영 체제 최대 버전을 지정합니다. 이 전제 조건 필드는 운영 체제가 앱을 사용하는 동안 발생할 수 있는 앱 호환성 문제가 있는지 여부를 확인하는 데 사용됩니다. 예를 들어 앱이 Windows 8 SDK에서 API를 호출하는 경우 나중에 이후 버전의 운영 체제에서 API가 변경되면 앱이 잘못 작동할 수 있습니다. 이 전제 조건 필드는 운영 체제가 이러한 동작을 식별하고 수정하여 앱이 모든 이후 버전의 운영 체제에서 계속 작동할 수 있도록 해 줍니다.

접근 권한 값

사진 또는 연결된 장치(예: 웹캠)와 같은 사용자 리소스에 프로그래밍 방식으로 액세스해야 하는 Windows 런타임 앱은 적절한 접근 권한 값을 선언해야 합니다. 앱은 앱 패키지 매니페스트에서 접근 권한 값을 선언하여 액세스를 요청합니다. Visual Studio에서 매니페스트 디자이너를 사용하여 접근 권한 값을 선언하거나 패키지 매니페스트에 접근 권한 값을 지정하는 방법에 설명된 대로 패키지 매니페스트에 접근 권한 값을 수동으로 추가할 수 있습니다. 접근 권한 값에 대한 자세한 내용은 앱 접근 권한 값 선언을 참조하세요.

종속성

스토어는 운영 체제와 독립적으로 서비스되는 운영 체제 구성 요소가 포함된 고유한 앱 패키지 집합을 호스트합니다. Windows 런타임 앱은 앱 패키지 매니페스트에서 종속성을 선언하여 이러한 앱 패키지를 사용할 수 있습니다. 스토어에서 호스트하는 앱 패키지에 포함된 이러한 구성 요소를 운영 체제 구성 요소 라이브러리라고 합니다. 스토어는 앱이 장치에 설치된 경우 올바른 버전의 구성 요소 라이브러리가 있는지 확인하는 프로세스를 관리합니다. JavaScript용 Windows 라이브러리, CRT(C++ 런타임 라이브러리) 및 PlayReady DRM이 포함된 이러한 라이브러리는 Windows 런타임 앱을 작성하는 데 필수적입니다. 앱이 스토어에서 배포되는 경우 운영 체제는 스토어에서 다운로드하는 앱과 함께 적절한 구성 요소 라이브러리를 다운로드 및 설치하여 종속성 선언을 충족합니다.

  • Applies to Windows

참고  Windows 스토어 앱을 테스트용 또는 엔터프라이즈 배포용으로 로드하려면 앱 패키지를 배포하는 동안 Windows 구성 요소 라이브러리 앱 패키지를 제공하고 지정해야 합니다.

앱 번들

Windows 8.1 및 Windows Phone 8.1부터는 앱 번들(또는 .appxbundle 패키지)을 사용하여 Windows 런타임 앱 및 리소스 패키지의 패키징 및 전 세계 사용자에 대한 배포를 최적화할 수 있습니다.

참고  각 아키텍처에 대해 별도의 번들을 만드는 것이 아니라 모든 아키텍처에 대해 하나의 앱 번들을 만듭니다.

앱에 대한 앱 번들 페이로드를 만듭니다. Visual Studio는 번들 매니페스트를 만들고 추가합니다. Visual Studio에서는 앱을 번들로 만들 때 자동으로 리소스를 개별 패키지로 분할하고 앱 블록 맵 및 서명 파일을 번들에 추가합니다. Windows 8.1 및 Windows Phone 8.1부터 시스템에 배포할 수 있는 완전히 자체 포함된 Windows 런타임 앱을 구성하는 항목은 다음과 같습니다.

앱 패키지(.appx)

앱 번들에는 각각 다른 특정 아키텍처를 대상으로 하는 경우에만 앱 패키지를 두 개 이상 포함할 수 있습니다. 예를 들어 x86.appx 및 amd64.appx 패키지를 둘 다 포함할 수 있지만 amd64.appx 패키지를 두 개 포함할 수는 없습니다.

리소스 패키지(.appx)

앱 번들에는 언어, 배율 및 Microsoft DirectX 기능 수준에 대한 리소스 패키지(.appx 파일)가 포함됩니다. 다양한 장치 구성을 지원하기 위해 각 앱 번들에는 여러 가지 리소스 패키지가 포함될 수 있습니다. Windows 런타임 앱에서 리소스 패키지를 직접 참조할 때는 리소스 관리 시스템을 충분히 활용하는 것이 좋습니다.

참고  리소스 패키지에는 코드를 포함해서는 안 됩니다.

앱 번들 매니페스트(AppxBundleManifest.xml)

앱 번들 매니페스트(.appxbundlemanifest 파일)에는 포함된 패키지에 대한 모든 적용 가능성 정보가 포함됩니다. 모든 특정 패키지에 대해 매니페스트는 패키지 유형("응용 프로그램" 또는 "리소스")과 버전 및 리소스 대상 정보를 지정합니다. 특히 앱 패키지의 경우, 앱 번들 매니페스트에는 아키텍처에 대한 정보가 포함됩니다.

일반적으로 앱 번들 매니페스트를 사용하면 앱 모델에서 앱 번들의 콘텐츠를 인식하고 설치 시 사용자 장치에 설치할 앱 패키지와 리소스 패키지를 결정합니다.

다음은 앱 번들 매니페스트 파일의 예제입니다.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Bundle xmlns="http://schemas.microsoft.com/appx/2013/bundle" SchemaVersion="1.0">
  <Identity Name="Example" Publisher="CN=ExamplePublisher" Version="2013.101.312.1053"/>
  <Packages>
    <Package Type="application" Version="1.0.0.5" Architecture="x86" FileName="AppPackage_X86.appx" Offset="49" Size="3207">
      <Resources>
        <Resource Language="en-us"/>
        <Resource Scale="100" />
      </Resources>
    </Package>
    <Package Type="application" Version="1.0.0.4" Architecture="x64" FileName="AppPackage_X64.appx" Offset="3329" Size="3204">
      <Resources>
        <Resource Language="en-us"/>
        <Resource Scale="100" />
      </Resources>
    </Package>
    <Package Type="resource" Version="1.0.0.0" ResourceId="French" FileName="ResourcePackage_French.appx" Offset="6606" Size="1423">
      <Resources>
        <Resource Language="fr"/>
        <Resource Language="fr-fr"/>
        <Resource Language="fr-ca"/>
      </Resources>
    </Package>
    <Package Type="resource" Version="1.0.0.3" ResourceId="HiRes" FileName="ResourcePackage_HiRes.appx" Offset="8111" Size="1584">
      <Resources>
        <Resource Scale="140"/>
      </Resources>
    </Package>
  </Packages>
</Bundle>

앱 블록 맵(AppxBlockMap.xml)

블록 맵 파일에는 앱 및 리소스 패키지를 제외한 번들에 포함된 모든 파일과 함께 운영 체제가 파일 무결성을 확인하고 앱에 대한 업데이트를 최적화하는 데 사용하는 관련 암호화 해시 값이 나열되어 있습니다. 블록 맵 파일에 대한 자세한 내용은 앱 패키지 블록 맵을 참조하세요.

앱 서명(AppxSignature.p7x)

앱 번들 서명은 패키지와 콘텐츠가 서명된 후에 수정되지 않았음을 확인해 줍니다. 서명 인증서가 신뢰할 수 있는 루트 인증 기관 인증서를 유효화하는 경우 서명은 또한 패키지에 서명한 사람을 식별합니다. 패키지의 서명자는 일반적으로 앱 게시자 또는 작성자입니다.

리소스 패키지

Windows 8.1 및 Windows Phone 8.1부터는 리소스 패키지를 사용하여 핵심 앱에 대한 추가 리소스를 포함할 수 있습니다(예: 문자열 또는 이미지와 같은 프랑스어 특정 자산). 리소스 패키지를 사용하면 이러한 추가 리소스에서 핵심 앱 패키지를 분리할 수 있습니다. 따라서 리소스 패키지를 사용하면 모든 리소스 패키지를 장치에 다운로드하여 설치할 필요 없이 앱의 전체 환경을 필요에 맞게 구성할 수 있습니다.

리소스 패키지는 선택 사항이며 앱 패키지가 리소스 패키지에 의존하지 않아야 합니다. 즉, 앱 패키지에는 리소스 패키지가 장치에 설치되지 않은 경우에도 항상 사용할 수 있는 기본 리소스 집합이 하나 이상 포함되어야 합니다. 이를 통해 다음과 같은 몇 가지 주요 기능을 유지할 수 있습니다.

  • 리소스 패키지가 없어도 항상 앱 패키지를 장치에서 적절하게 설치 및 시작할 수 있습니다.

  • 설치된 리소스 패키지가 완전하지 않을 경우에도 앱 패키지에 대체할 리소스가 있습니다.

리소스 패키지는 앱 모델에서 다음 목적에 사용됩니다.

  • 리소스 관리 시스템에서 앱이 실행될 때 앱 환경을 개인 설정하는 데 사용할 수 있는 리소스 후보를 제공합니다.

  • 리소스 패키지가 특정 리소스 한정자(예: 사용자 언어, 시스템 배율 및 DirectX 기능)를 대상으로 지정하는 데 사용되는 메타데이터를 제공합니다.

리소스 패키지는 패키지당 하나의 리소스 한정자만 대상으로 지정할 수 있습니다. 그러나 앱에는 많은 리소스 패키지를 포함할 수 있습니다.

리소스 패키지에는 코드를 포함해서는 안 됩니다.

하드 링크

Windows 8.1 및 Windows Phone 8.1부터는 OS에서 앱을 설치할 때 가능하면 동일한 파일을 두 번 이상 다운로드하지 않음으로써 설치를 최적화합니다. 즉, 앱이 장치에 이미 설치된 파일을 사용하는 것으로 확인되면 OS에서 해당 파일의 공유 버전을 만들고 공유 버전에 대해 앱을 하드 링크합니다. 따라서 앱의 설치 시간 및 디스크 공간이 줄어듭니다. 이러한 공유 파일은 라이브러리, 런타임 등이 될 수 있습니다. 하드 링크를 사용하려면 모범 사례를 따르는 것이 좋습니다. 예를 들어 반드시 업데이트해야 하는 경우가 아니라면 각 앱 버전에서 가능하면 동일한 런타임 또는 라이브러리 이진을 다시 사용하려고 항상 시도합니다.

  • Applies to Windows

Windows 8.1 Update:  Windows 8.1 초기 릴리스의 경우 하드 링크가 Windows 스토어의 앱으로만 제한되었습니다. Windows 8.1 업데이트의 경우 하드 링크가 테스트용으로 로드된 엔터프라이즈 앱에서도 사용됩니다. 테스트용으로 로드에 대한 자세한 내용은 엔터프라이즈 앱 배포를 참조하세요.

사용자별 배포

  • Applies to Windows

참고  

Windows 런타임 앱 배포는 사용자별로 이루어지므로 해당 앱을 설치한 사용자의 계정에만 영향을 미칩니다. 뿐만 아니라 다중 사용자 시나리오에서는 사용자가 다른 사용자에 대해 어떤 앱이 설치되어 있는지 알 수 없습니다. 예를 들어 UserA가 메모장 앱을 설치하고 UserB가 계산기 앱을 설치했다고 가정해 보겠습니다. 이 시나리오에서 UserA와 UserB는 동일한 컴퓨터에 설치된 다른 앱을 알지 못합니다(앱 격리).

  • Applies to Windows

참고  

운영 체제의 앱 격리는 Windows 런타임 앱의 사용자 영역으로만 제한됩니다. 앱의 다른 모든 데이터는 운영 체제가 액세스할 수 있는 위치에 저장됩니다. 예를 들어 UserA가 계산기 앱을 설치하고 UserB도 계산기 앱을 설치했다고 가정해 보겠습니다. 이 시나리오에서는 계산기 앱 이진의 복사본 하나만 드라이브(%ProgramFiles%\WindowsApps)에 저장되며 두 사용자 모두 여기에 액세스할 수 있습니다. UserA에게는 UserB의 앱 데이터가 표시되지 않으며 그 반대도 마찬가지입니다. 런타임 이진은 공유되는 반면 앱 데이터는 격리됩니다.

%ProgramFiles%\WindowsApps 디렉터리는 변경할 수 없습니다. 여기에는 기본 %ProgramFiles% 디렉터리뿐만 아니라 %ProgramData% 및 %UserProfile% 디렉터리도 포함됩니다.

  • Applies to Windows

참고  

WindowsApps 디렉터리에는 시스템의 모든 사용자에 대한 모든 Windows 스토어 앱 이진뿐만 아니라 여러 버전의 동일한 Windows 스토어 앱도 포함됩니다. 예를 들어 UserA와 UserB가 모두 메모장 앱을 설치하고 UserA가 메모장 앱 버전 2로 업데이트한 반면 UserB는 업데이트하지 않았다고 가정해 보겠습니다. 이 시나리오에서는 운영 체제에 두 버전의 메모장 앱이 있습니다. 각 사용자에 대해서는 한 버전만 설치되어 있으므로 여러 버전이 서로 충돌하지 않습니다.

이 동작은 또한 종속성 패키지에도 적용할 수 있습니다.

Windows 런타임 앱 배포

다음 섹션에서는 Windows 런타임 앱의 설치, 업데이트 및 제거 흐름에 대해 설명합니다.

Windows 런타임 앱 설치

아래 그림은 Windows 런타임 앱을 설치하는 흐름을 보여 줍니다.

Windows 스토어 앱 설치 흐름

Windows 런타임 앱 배포 프로세스는 여러 단계로 발생합니다. 먼저 OS에서 앱 매니페스트, 앱 블록 맵 및 앱 서명을 가져와서 유효성을 검사합니다. 다음으로 앱이 성공적으로 배포되도록 하기 위해 앱 패키지의 배포 조건을 검사합니다. 그런 다음 패키지 이진을 WindowsApps 디렉터리에 복사합니다. 마지막으로 패키지를 사용자의 계정에 등록합니다.

배포 검사(유효성 검사)

이 그림은 OS에서 배포 검사를 수행하는 단계를 보여 줍니다.

배포 설치 검사

사용자가 Windows 런타임 앱 설치를 시작한 후에 OS에서 다음 검사를 완료해야만 배포 프로세스를 시작할 수 있습니다.

OSMinVersion이 충족되어야 함

앱 패키지 매니페스트 내에서 앱 전제 조건을 지정합니다. 이러한 전제 조건은 충족해야 할 특정 최소 운영 체제 버전에 대한 요구 사항을 나타냅니다. 앱 전제 조건에 대한 자세한 내용은 앱 전제 조건을 참조하세요.

앱 종속성이 충족되어야 함

Windows 런타임 앱은 앱이 필요로 하는 추가된 기능에 대한 다른 앱 패키지에서 종속성을 나타낼 수 있습니다. 앱 종속성에 대한 자세한 내용은 종속성을 참조하세요.

디스크 공간이 충분해야 함

앱을 배포하기 위해 각 Windows 런타임 앱에는 일정 크기의 디스크 공간이 필요합니다. 장치에 패키지를 배포할 정도로 디스크 공간이 충분하지 않으면 배포가 실패합니다.

앱이 이미 배포되지 않음

Windows 런타임 앱을 설치한 특정 사용자 컨텍스트 내에서는 앱을 다시 설치할 수 없으므로 앱이 이미 설치되어 있지 않은지 여부를 확인해야 합니다.

앱 자산이 서명 검사를 통과해야 함

이미 유효성이 검사된 BlockMap을 사용하여 앱 패키지에 포함된 각 파일의 무결성을 검사해야 합니다.

패키지 준비

이 그림은 OS에서 패키지를 준비하는 단계를 보여 줍니다.

배포 패키지 준비

앱 모델이 패키지를 장치에 배포할 수 있다고 결정한 후에 OS는 디스크의 %ProgramFiles%\WindowsApps 디렉터리에서 패키지 ID에 따라 이름이 지정된 새 디렉터리에 패키지의 콘텐츠를 저장합니다.


<Package Name>_<Version>_<Architecture>_<ResourceID>_<Publisher Hash>

준비 프로세스는 배포 엔진이 패키지의 위치 원본에 하는 요청 집합을 통해 발생합니다. 그런 다음 이러한 요청은 원본에 의해 충족된 후 배포 엔진으로 반환되고, 여기에서 압축이 풀리고 BlockMap에 대해 유효성이 검사된 후 적절한 파일로 복사됩니다.

패키지 등록

이 그림은 OS에서 패키지를 등록하는 단계를 보여 줍니다.

배포 패키지 등록

패키지 등록은 배포 프로세스의 마지막 단계입니다. 이 단계에서는 매니페스트에 선언된 확장이 운영 체제에 등록됩니다. 이를 통해 앱을 운영 체제에 완전히 통합할 수 있습니다. 예를 들어 앱에서 .txt 파일을 열 수 있도록 하려면 앱 패키지 매니페스트에서 FileTypeAssociation 확장을 XML로 선언하고 .txt를 파일 형식으로 지정합니다. 배포할 때 이 XML은 .txt 파일을 처리하도록 앱을 제대로 등록하기 위해 발생해야 하는 시스템 변경 집합으로 변환됩니다. 그런 다음 앱을 대신하여 앱 모델에서 이러한 변경 내용을 수행합니다. 앱 모델은 여러 가지 확장을 지원합니다. 이러한 확장에 대한 자세한 내용은 앱 계약 및 확장을 참조하세요.

Windows 런타임 앱 업데이트

아래 그림은 Windows 런타임 앱을 업데이트하는 흐름을 보여 줍니다.

배포 업데이트

업데이트 워크플로는 Windows 런타임 앱 설치 워크플로와 비슷하지만, 업데이트를 차별화하는 몇 가지 주요 차이점이 있습니다.

배포 업데이트 확인

이 그림은 OS에서 업데이트 시 배포 검사를 수행하는 단계를 보여 줍니다.

배포 업데이트 확인

현재 설치된 앱 패키지의 버전이 사용자가 설치하려고 하는 버전보다 높거나 같으면 배포가 실패합니다.

패키지 준비(델타 다운로드)

이 그림은 OS에서 업데이트된 패키지를 준비하는 단계를 보여 줍니다.

배포 업데이트 준비

업데이트하는 동안의 준비 프로세스는 설치하는 동안의 일반적인 준비 프로세스와 비슷합니다. 주요 차이점은 패키지의 기존 버전이 운영 체제에 이미 설치되어 있다는 데 있습니다. 기존 패키지 설치가 완료된 후에 페이로드 파일 집합이 다운로드되어 장치에 복사됩니다. 대부분의 경우 이러한 페이로드 파일의 대부분은 업데이트된 버전의 앱 패키지에서 변경되지 않거나 약간만 변경됩니다. 이러한 페이로드 파일을 사용하여 업데이트된 앱 패키지 콘텐츠 및 자산을 구성할 수 있습니다. 앱 패키지의 BlockMap 구조에는 각 파일의 각 블록에 대한 해시 목록이 포함되어 있으므로 OS는 이전 및 새 앱 BlockMap 파일을 비교하여 블록 수준에서 정확한 변경 집합을 계산할 수 있습니다. 다음은 이 비교를 통해 나올 수 있는 가능한 결과입니다.

파일이 변경되지 않음

파일이 업데이트된 패키지 폴더 위치에 하드 링크되어 있습니다.

파일의 블록이 변경되지 않음

변경되지 않은 블록이 업데이트된 패키지 폴더로 복사되었습니다.

파일의 블록이 변경됨

변경된 블록이 원본에서 다운로드하도록 표시되어 있습니다.

새로운 전체 파일

원본에서 전체 파일이 다운로드됩니다.

파일이 없어짐

파일이 업데이트에 전혀 사용되지 않습니다.

비교가 완료된 후 유지할 수 있는 모든 데이터가 하드 링크되거나 복사되고 원본에서 새 데이터가 다운로드되어 업데이트된 파일을 만드는 데 사용됩니다.

업데이트를 위한 패키지 등록

이 그림은 OS에서 업데이트된 패키지를 등록하는 단계를 보여 줍니다.

배포 업데이트된 패키지 등록

패키지의 등록을 업데이트할 경우 OS에서 이전 버전의 등록도 업데이트해야 합니다. 앱 모델은 자동으로 기존 확장 등록을 업데이트하고, 사용되지 않는 등록을 제거하며, 이전 및 새 버전의 앱 매니페스트에 있는 선언을 기반으로 하여 새 확장을 등록합니다.

사용 중인 앱

운영 체제에서 앱 패키지의 등록을 취소하는 프로세스에는 OS에서 Windows 런타임 앱을 시작할 수 있도록 하는 내부 콘텐츠를 제거하는 절차가 포함됩니다. 경우에 따라 업데이트가 발생하는 동안 앱이 실행 중일 수 있습니다. 이 시나리오에서 배포 엔진은 앱을 일시 중단하고 그 후에 종료하도록 요청합니다. 이 요청의 결과에 따라 업데이트 프로세스가 성공하거나 실패합니다. 작업이 성공할 경우 앱은 또한 새 앱 패키지를 등록하고 이전 앱 패키지의 등록을 취소하는 동안 잠시 시작하지 못하게 됩니다. 이 단계가 완료되면 앱을 다시 시작할 수 있습니다.

앱 데이터

앱 데이터는 실제 Windows 런타임 앱과 버전이 다른 엔터티입니다. ApplicationData.Version이 Windows 런타임 앱 업데이트와 함께 업데이트되지 않은 경우 앱 상태는 Windows 런타임 앱 업데이트의 영향을 받지 않습니다.

패키지 준비 취소

이 그림은 OS에서 업데이트된 패키지를 준비 취소하는 단계를 보여 줍니다.

배포 업데이트된 패키지 준비 취소

등록 작업이 성공적으로 완료된 후 기존 버전의 패키지는 운영 체제에서 다른 사용자가 사용하지 않는 경우 운영 체제에서 제거하도록 표시됩니다. 먼저 OS에서 기존 버전의 앱 패키지 폴더를 %ProgramFiles%\WindowsApps\Deleted 디렉터리로 복사합니다. 진행 중인 다른 배포 작업이 없으면 OS는 기존 버전의 앱 패키지 폴더를 삭제합니다.

  • Applies to Windows

참고  다중 사용자 시나리오에서는 앱 패키지가 다른 사용자에 대해 운영 체제에 설치되어 있을 수 있습니다. 이 경우 모든 사용자가 앱 패키지를 제거할 때까지 패키지 콘텐츠가 운영 체제에서 준비 취소되지 않습니다.

Windows 런타임 앱 제거

아래 그림은 Windows 런타임 앱을 제거하는 흐름을 보여 줍니다.

배포 제거

  • Applies to Windows

참고  패키지가 컴퓨터에 사용자별로 설치되는 방식과 마찬가지로 제거될 때에도 사용자별로 제거됩니다. Windows 스토어 앱이 여러 명의 사용자에 대해 설치되어 있는 경우 현재 사용자에 대해서만 등록이 취소됩니다. 예를 들어 UserA와 UserB가 계산기 앱을 설치한 경우 UserA가 앱을 제거하면 계산기 앱은 UserA에 대해서만 제거되며 UserB에 대해서는 제거되지 않습니다. 제거 프로세스는 업데이트 프로세스와 동일한 기본 단계로 구성됩니다.

패키지 등록 취소

이 그림은 OS에서 제거된 패키지를 등록 취소하는 단계를 보여 줍니다.

배포 제거된 패키지 등록 취소

등록 취소 프로세스에서는 사용자 계정에 통합된 Windows 런타임 앱이 제거됩니다. 사용자 계정에 설치된 관련 데이터(예: 앱 상태)도 제거됩니다. 업데이트 프로세스와 마찬가지로 배포 엔진은 앱을 사용자 계정에서 등록 취소할 수 있도록 PLM(프로세스 수명 관리자)을 통해 앱을 일시 중단한 후 종료하도록 요청해야 합니다.

참고  PLM이 반환된 후 제거 작업은 계속해서 사용자 계정에서 Windows 런타임 앱의 등록을 취소합니다. PLM이 실패한 경우에도 작업이 계속됩니다.

패키지 준비 취소

이 그림은 OS에서 제거된 패키지를 준비 취소하는 단계를 보여 줍니다.

배포 제거된 패키지 준비 취소

등록 취소 작업이 성공적으로 완료된 후 패키지는 운영 체제에서 다른 사용자가 사용하지 않는 경우 운영 체제에서 제거하도록 표시됩니다. 먼저 OS에서 패키지의 앱 패키지 폴더를 %ProgramFiles%\WindowsApps\Deleted 디렉터리로 복사합니다. 진행 중인 다른 배포 작업이 없으면 OS에서 패키지의 앱 패키지 폴더를 삭제합니다.

  • Applies to Windows

참고  

다중 사용자 시나리오에서는 앱 패키지가 다른 사용자에 대해 운영 체제에 설치되어 있을 수 있습니다. 이 경우 모든 사용자가 앱 패키지를 제거할 때까지 패키지 콘텐츠가 운영 체제에서 준비 취소되지 않습니다.

앱 번들 배포

Windows 8.1 및 Windows Phone 8.1부터는 앱 번들을 배포하여 앱 패키징 및 배포를 최적화할 수 있습니다.

스토어를 통해 앱 번들을 배포하는 작업은 이 워크플로를 따릅니다.

앱 패키징 흐름

Windows 런타임 앱 배포 프로세스는 여러 단계로 발생합니다. 먼저 OS에서 앱 번들 매니페스트, 번들 블록 맵 및 번들 서명을 가져와 확인합니다. 그런 다음 번들 매니페스트를 확인하여 현재 아키텍처에 배포할 수 있는 앱이 있는지 확인합니다. 올바른 앱 패키지가 발견되면 OS에서 앱이 성공적으로 배포되도록 하기 위해 앱 패키지의 배포 조건을 검사합니다.

OS에서 배포에 적용할 수 있는 리소스 패키지의 하위 집합을 확인하고 이러한 패키지 이진을 \WindowsApps\ 디렉터리에 대해 준비합니다. 마지막으로 OS에서 앱 패키지 및 리소스 패키지를 사용자 계정에 등록합니다.

유효성 검사

사용자가 Windows 런타임 앱 설치를 시작한 후에 OS에서 다음 검사를 완료해야만 배포를 시작할 수 있습니다.

테스트조건

아키텍처 지원

번들에는 최대 세 개의 아키텍처별 앱 패키지를 포함할 수 있으며 이 앱 패키지는 모두 앱 번들 매니페스트에서 지정됩니다.

최소 운영 체제 버전

앱 패키지 매니페스트 내에서 필수 조건을 지정합니다. 이러한 필수 조건은 특정 최소 운영 체제 버전에 대한 요구 사항을 나타냅니다. 예를 들어 Windows 8.1의 경우 해당 버전 번호는 6.3입니다. 앱 필수 조건에 대한 자세한 내용은 앱 패키징 필수 조건을 참조하세요.

앱 종속성

Windows 런타임 앱은 앱이 필요로 하는 추가된 기능에 대한 다른 구성 요소 패키지에서 종속성을 나타낼 수 있습니다. 앱 종속성에 대한 자세한 내용은 앱 패키징 종속성을 참조하세요.

디스크 공간

각 Windows 런타임 앱에는 배포를 위해 일정 크기의 디스크 공간이 필요합니다. 패키지를 배포할 디스크 공간이 충분하지 않으면 배포가 실패합니다.

서명 확인

앱 패키지의 각 파일은 이미 유효성 검사가 이루어진 BlockMap에 대해 무결성이 확인되어야 합니다.

 

패키지 적용 가능성

OS에서 앱 번들을 시스템에 배포할 수 있는지 확인한 후 사용자 환경을 향상하기 위해 앱 패키지와 함께 배포할 리소스 패키지를 결정합니다. 다음과 같은 세 가지 특정 리소스 한정자에 따라 적용 가능성을 확인합니다.

한정자설명

사용자 언어

사용자가 기본 언어 목록에 추가한 모든 언어가 배포할 최종 적용 가능한 언어 리소스 패키지 집합으로 고려됩니다. Windows 8.1 이상 및 Windows Phone 8.1 이상에서는 리소스 패키지에 대해 많은 로캘 및 언어를 지원합니다.

시스템 배율

모든 모니터에 대한 배율 값은 배포할 최종 적용 가능한 배율 리소스 패키지 집합을 결정하는 데 사용됩니다. Windows 8.1 이상 및 Windows Phone 8.1 이상에서는 리소스 패키지에 대해 다음 세 가지 배율 인수를 권장합니다.

Windows 8.1 이상:  scale-100, scale-140scale-180

Windows Phone 8.1 이상:  scale-100, scale-140scale-240

DirectX 기능 수준

시스템에서 사용할 수 있는 모든 DirectX 기능 수준은 배포할 적용 가능한 DirectX 리소스 패키지의 최종 집합을 결정하는 데 사용됩니다. Windows 8.1 이상 및 Windows Phone 8.1 이상에서는 리소스 패키지에 대해 DXFL-DX9, DXFL-DX10DXFL-DX11의 세 가지 DirectX 기능 수준을 지원합니다.

 

패키지 준비

OS에서 앱 번들을 시스템에 배포할 수 있는지와 어떤 패키지를 배포할지를 확인한 후에 패키지 콘텐츠가 \WindowsApps\ 디렉터리로 다운로드됩니다. 다운로드된 각 패키지에 대한 새 디렉터리가 생성되고 다음과 같은 패키지 ID 이름 값을 사용하여 디렉터리의 이름이 지정됩니다.

<Package Name>_<Version>_<Architecture>_<ResourceID>_<Publisher Hash>

준비 프로세스는 배포 엔진이 패키지의 위치 원본에 하는 요청 집합을 통해 발생합니다. 그런 다음 이러한 요청은 원본에 의해 충족된 후 배포 엔진으로 반환되고, 여기에서 압축이 풀리고 BlockMap에 대해 유효성이 검사된 후 적절한 파일로 복사됩니다.

패키지 등록

패키지 등록은 배포 프로세스의 마지막 단계입니다. 이 단계에서 두 가지 주요 작업이 수행됩니다.

  • 앱 패키지 매니페스트에 선언된 확장이 운영 체제에 등록됩니다. 이를 통해 앱이 운영 체제와 완전히 통합될 수 있습니다. 예를 들어 앱에서 .txt 파일을 열 수 있도록 하려면 앱 패키지 매니페스트에서 FileTypeAssociation 확장을 XML로 선언하고 ".txt"를 파일 형식으로 지정합니다.

    배포할 때 이 XML은 .txt 파일을 처리하도록 앱을 제대로 등록하는 데 필요한 시스템 변경 집합으로 변환됩니다. 그런 다음 앱을 대신하여 앱 모델에서 이러한 변경을 수행합니다. 앱 모델은 여러 가지 확장을 지원합니다. 이러한 확장에 대한 자세한 내용은 앱 계약 및 확장을 참조하세요.

  • 모든 리소스 패키지가 리소스 관리 시스템에 등록됩니다. 그런 다음 앱이 실행될 때 리소스 패키지를 사용하여 사용자 환경을 최적화할 수 있습니다.

패키지 인벤토리

Windows 런타임 앱을 설치, 업데이트 및 제거할 때 지정된 사용자는 설치되거나 미리 구성되는 앱 패키지를 언제든지 볼 수 있습니다.

  • Applies to Windows

참고  관리자 권한이 있는 사용자는 또한 시스템에 있는 모든 사용자에 대해 설치할 앱 패키지를 결정할 수도 있습니다. 운영 체제에서 패키지에 인벤토리를 실행하는 방법에 대한 자세한 내용은 도구 및 PowerShell cmdlet을 참조하세요.

질문과 대답

동시에 여러 패키지를 설치하려면 어떻게 할까요?

패키징 API를 여러 번 호출하거나 설치할 전체 패키지 집합에 대해 한 번 호출하여 여러 개의 패키지를 설치할 수 있습니다. 앱 모델의 기본 구현에서는 배포를 대기할 수 있는 앱 패키지 수에 제한이 없습니다. 그러나 사용자당 최대 3개의 동시 준비 작업(운영 체제당 총 7개의 동시 준비 작업) 및 운영 체제당 하나의 등록 작업만 허용됩니다.

패키지가 이미 설치되어 있으면 어떻게 되나요?

패키지가 이미 설치되어 있으면 현재 사용자의 계정에 대해 등록된, 패키지 ID와 동일한 패키지가 이미 있게 됩니다. 이 경우에는 동일한 패키지가 설치되지 않습니다.

업데이트를 필수로 설정할 수 있나요?

앱 모델을 통해 업데이트를 필수로 설정할 수 없습니다. 업데이트 모델은 옵션입니다. 드문 경우이긴 하지만 스토어에서 업데이트를 중요 업데이트로 배포하기에 적절한 것으로 간주할 수 있습니다(예: 보안 픽스). 이 경우 업데이트를 클라이언트에 강제로 배포할 수 있습니다.

  • Applies to Windows

참고  

기업에서는 그룹 정책을 통해 업데이트를 강제로 적용할 수도 있습니다.

어떻게 업데이트를 이전 버전으로 롤백할 수 있나요?

Windows 런타임 앱을 이전 버전의 앱으로 롤백할 수는 없습니다. 패키지가 제거된 후 바로 운영 체제에서 앱 패키지 데이터가 제거되므로 패키지를 복원할 방법이 없습니다.

내 %ProgramFiles%, %ProgramData% 또는 %UserProfile% 디렉터리를 어떻게 이동할 수 있나요?

Windows 런타임 앱에 대해서는 이 동작이 지원되지 않으며 이렇게 하면 앱을 사용할 때 오류가 발생합니다.

패키징 및 배포 프로그래밍 인터페이스

Windows 런타임

Win32/COM

 

 

표시:
© 2014 Microsoft