> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Make package (makepkg.exe)

> Make package (makepkg.exe)

앱 패키지를 생성하고, 패키지를 Partner Center에 업로드하며, 관련된 패키징 작업을 수행합니다. `makepkg`는 XVC, MSIXVC, MSIXVC2 패키지 형식을 지원합니다. MSIXVC2 형식으로 패키지를 생성하려면 `/msixvc2` 옵션을 사용합니다.

```text theme={null}
makepkg <command> [options]
```

## 전역 옵션

| 옵션         | 설명                  |
| ---------- | ------------------- |
| `/v`       | 콘솔에 자세한 출력을 활성화합니다. |
| `/?`, `/h` | 도움말과 사용법 정보를 표시합니다. |

## 명령

* [pack](#pack) - 디스크의 파일에서 새 앱 패키지를 생성합니다.
* [upload](#upload) - 패키지 또는 파일 디렉터리를 Partner Center에 업로드합니다.
* [genkey](#genkey) - `pack /lk`에서 사용할 암호화 키를 생성합니다.
* [genid](#genid) - Product ID GUID와 Store ID 간에 변환합니다.
* [genmap](#genmap) - 디스크의 콘텐츠를 기반으로 매핑 XML 파일을 생성합니다.
* [validate](#validate) - 패키지를 생성하지 않고 유효성 검사를 실행합니다.
* [updatesubval](#updatesubval) - 다른 작업을 실행하지 않고 SubmissionValidator.dll을 업데이트합니다.
* [localize](#localize) - 디스크의 콘텐츠를 기반으로 Resources.pri 파일을 생성합니다.

## pack

디스크의 파일에서 새 앱 패키지를 생성합니다.

```text theme={null}
makepkg pack [options]
```

**샘플 사용법:**

```text theme={null}
makepkg pack /msixvc2 /f layout.xml /d <sourcedir> /pc /pd <destinationdir>
```

### 옵션

| 옵션                                  | 설명                                                                                                                                                                                                     |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `/msixvc2`                          | MSIXVC2 패키지 형식으로 패키지를 생성합니다. 이 옵션이 없으면 MSIXVC 패키지가 생성됩니다.                                                                                                                                              |
| `/updcompat 3`                      | XVC 및 MSIXVC 패키지에 대해 서브파일 콘텐츠 업데이트 세분화를 사용합니다. 지원되는 값은 `3`뿐입니다.                                                                                                                                        |
| `/d <sourcedir>`                    | **(필수)** 패키지에 담을 콘텐츠가 있는 원본 디렉터리를 지정합니다.                                                                                                                                                               |
| `/pd <destinationdir>`              | **(필수)** 생성된 패키지의 대상 디렉터리를 지정합니다.                                                                                                                                                                      |
| `/f <mapfile>`                      | 패키징에 사용할 매핑 파일을 지정합니다. 생략하면 기본 단일 청크 레이아웃이 생성됩니다.                                                                                                                                                      |
| `/compress <method>`                | 출력을 압축합니다. 사용 가능한 방법은 `Automatic`(기본값)과 `None`입니다. `Automatic`은 MSIXVC2 패키지에는 Brotli를, XVC 또는 MSIXVC 패키지에는 압축을 사용하지 않습니다.                                                                              |
| `/pc`                               | PC에서 사용할 패키지를 생성합니다.                                                                                                                                                                                   |
| `/contentid <contentid>`            | 이 패키지가 속한 콘텐츠 ID를 지정합니다.                                                                                                                                                                               |
| `/gameos <gameos>`                  | 패키지에 포함할 게임 OS 파일을 지정합니다.                                                                                                                                                                              |
| `/l`                                | 고유한 콘텐츠 라이선스로 패키지를 암호화합니다. XVC 또는 MSIXVC 패키지를 인증에 제출할 때, 인증 팀이 별도로 지시하지 않는 한 `/l` 또는 `/lk`를 사용합니다.                                                                                                     |
| `/lk <key.lekb>`                    | 지정된 키 파일을 사용하여 콘텐츠 라이선스로 패키지를 암호화합니다. 키 파일을 생성하려면 `genkey`를 사용합니다. XVC 또는 MSIXVC 패키지를 인증에 제출할 때, 인증 팀이 별도로 지시하지 않는 한 `/l` 또는 `/lk`를 사용합니다.                                                             |
| `/productid <productid>`            | 이 패키지가 속한 제품 ID를 지정합니다.                                                                                                                                                                                |
| `/maxencryptionfragments <count>`   | 패키지 메타데이터에 예약할 암호화 프래그먼트 수를 지정합니다. 이 옵션은 XVC 및 MSIXVC 패키지에만 적용됩니다.                                                                                                                                     |
| `/priorpackage <OldPackage.msixvc>` | 콘텐츠 업데이트 크기 비교를 위해 이전 pack 작업에서 생성된 XVC, MSIXVC 또는 MSIXVC2 패키지를 지정합니다.                                                                                                                                 |
| `/loggable`                         | 로그 파일에 적합하지 않은 제어 문자를 포함하는 출력을 억제합니다.                                                                                                                                                                  |
| `/symbolpaths <symbolpaths>`        | 심볼 번들링 중에 심볼 확인 조회에 사용할 추가 경로를 지정합니다. 경로는 세미콜론으로 구분합니다.                                                                                                                                                |
| `/skipsymbolbundling`               | 심볼 번들링을 건너뜁니다.                                                                                                                                                                                         |
| `/skipvalidation`                   | Submission Validator를 건너뜁니다. 인증에 제출될 수 있는 빌드에는 이 옵션을 사용하지 마세요.                                                                                                                                         |
| `/validationcritical`               | Submission Validator 실패를 `makepkg` 프로세스의 치명적 실패로 처리합니다.                                                                                                                                                |
| `/openvalidationlog`                | 유효성 검사 후 기본 XML 애플리케이션에서 Submission Validator 로그 파일을 엽니다.                                                                                                                                              |
| `/validationlanguage <lang>`        | Submission Validator 로그 파일에 대한 추가 언어를 지정합니다.                                                                                                                                                           |
| `/validationpath <path>`            | SubmissionValidator.dll을 로드할 디렉터리를 지정합니다.                                                                                                                                                              |
| `/updatesubval`                     | 설치된 버전이 최신이 아닌 한 유효성 검사 전에 최신 SubmissionValidator.dll을 다운로드합니다. 다른 위치를 선택하려면 `/validationpath`를 사용합니다. 업데이트가 실패하면 설치된 DLL로 패키징이나 유효성 검사가 계속됩니다. 다른 작업 없이 업데이트하려면 [updatesubval](#updatesubval)을 사용합니다. |

### 비고

기본적으로 `makepkg pack`은 모든 개발 키트에서 테스트용으로 인식되는 잘 알려진 암호화 키를 사용하여 XVC 또는 MSIXVC 패키지를 암호화합니다. 이러한 패키지는 암호학적으로 보호되지 않습니다.

추가 업로드 보호를 위해 XVC 및 MSIXVC 패키지는 `/l` 또는 `/lk`를 사용할 수 있습니다. `/l`을 사용하는 패키지는 업로드 전에는 개발 키트나 PC에 설치할 수 없습니다. `/lk`를 사용하는 패키지는 업로드 전에 개발 키트에 설치할 수 있습니다. 업로드 암호화 모드에 관계없이 XBOX 서비스는 배포를 위해 Microsoft가 관리하는 암호화 키로 패키지를 암호화합니다.

MSIXVC2 패키지는 클라이언트 측 업로드 암호화를 사용하지 않습니다. XBOX 서비스가 배포를 위한 암호화를 처리합니다.

매핑 파일 스키마에 대한 자세한 내용은 [배포 패키지 스키마](/build/core-features/common/packaging/deployment/atoc-deployment-schema)를 참조하세요.

## upload

패키지를 Partner Center에 업로드합니다. MSIXVC2에만 해당하는데, `upload` 명령은 `/d`가 지정된 경우 느슨한 파일을 패키징하여 하나의 작업으로 업로드할 수도 있습니다. 느슨한 파일 업로드에는 `/msixvc2` 옵션이 필요합니다.

브랜치 또는 플라이트를 지정하지 않으면 패키지가 `main` 브랜치에 업로드됩니다.

EKB 파일과 Submission Validator 로그 파일은 패키지와 동일한 디렉터리에 있어야 하며 자동으로 업로드됩니다. 심볼 번들이 있는 경우에도 업로드됩니다. Store ID는 패키지에서 추출되지만, 패키지가 Store ID 없이 생성된 경우에는 제공할 수 있습니다.

```text theme={null}
makepkg upload [options]
```

**샘플 사용법(사전 빌드된 패키지 업로드):**

```text theme={null}
makepkg upload /pd <package_directory> /branch <branch> /auth CacheableBrowser
```

**샘플 사용법(느슨한 파일 패키징 및 업로드):**

```text theme={null}
makepkg upload /d <sourcedir> /msixvc2 /pc /branch <branch>
```

### 패키지 원본 옵션

| 옵션                        | 설명                                                                |
| ------------------------- | ----------------------------------------------------------------- |
| `/pd <package_directory>` | 패키지 파일이나 해당 디렉터리를 지정합니다. 디렉터리에 여러 패키지가 있는 경우 전체 패키지 파일 이름을 지정합니다. |
| `/d <sourcedir>`          | 하나의 작업으로 패키지화하고 업로드할 원본 디렉터리를 지정합니다.                              |
| `/f <mapfile>`            | `/d`와 함께 사용할 매핑 파일을 지정합니다.                                        |
| `/msixvc2`                | `/d`와 함께 사용될 때 MSIXVC2 패키지를 생성합니다.                                |
| `/compress <method>`      | 출력을 압축합니다. 사용 가능한 방법은 `Automatic`(기본값)과 `None`입니다.                |
| `/pc`                     | `/d`와 함께 사용될 때 PC 패키지를 생성합니다.                                     |
| `/productid <productid>`  | 이 패키지가 속한 제품 ID를 지정합니다.                                           |

### 대상 옵션

| 옵션                   | 설명                                                        |
| -------------------- | --------------------------------------------------------- |
| `/storeid <storeId>` | Store ID를 지정합니다. 생략하면 Store ID가 패키지에서 추출됩니다.              |
| `/branch <branch>`   | 업로드할 브랜치를 지정합니다. 브랜치나 플라이트를 지정하지 않으면 `main`이 기본값으로 사용됩니다. |
| `/flight <flight>`   | 업로드할 플라이트를 지정합니다. 이 옵션은 `/branch`와 함께 사용할 수 없습니다.         |
| `/market <market>`   | 업로드할 시장을 지정합니다. 기본값은 `default`입니다.                        |
| `/disclayout <path>` | 여러 디스크에 배송되는 패키지에 대한 디스크 레이아웃 파일을 지정합니다.                  |

### 인증 옵션

| 옵션                             | 설명                                                                                                                                                                                                                                  |
| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/auth <method>`               | 인증 방법을 지정합니다. 기본값은 `CacheableBrowser`입니다. 여러 방법은 MSIXVC2 업로드에서만 사용할 수 있습니다. XVC 및 MSIXVC 업로드는 `CacheableBrowser`만 사용할 수 있습니다. 이러한 형식에 대한 고급 인증에는 [Package Uploader](/build/core-features/common/packaging/package-uploader)를 사용하세요. |
| `/tenantid <tenantId>`         | 업로드할 테넌트를 지정합니다. 생략하면 사용자의 기본 테넌트가 사용됩니다.                                                                                                                                                                                           |
| `/clientid <clientId>`         | 클라이언트 ID를 지정합니다. `ManagedIdentity`, `ClientCertificate`, `ClientSecret`에 필요합니다.                                                                                                                                                     |
| `/clientsecret <secret>`       | 클라이언트 시크릿을 지정합니다. `/auth ClientSecret`이 필요합니다.                                                                                                                                                                                      |
| `/certthumbprint <thumbprint>` | `ClientCertificate`의 인증서 지문을 지정합니다.                                                                                                                                                                                                 |
| `/certstore <store>`           | 인증서 저장소 이름을 지정합니다. 기본값은 `My`입니다.                                                                                                                                                                                                    |
| `/certlocation <location>`     | `CurrentUser` 또는 `LocalMachine`과 같은 인증서 위치를 지정합니다. 기본값은 `CurrentUser`입니다.                                                                                                                                                           |
| `/certpassword <password>`     | 암호로 보호된 인증서 파일의 암호를 지정합니다.                                                                                                                                                                                                          |
| `/resourceid <resourceId>`     | `ManagedIdentityFederated`의 Azure 리소스 ID를 지정합니다.                                                                                                                                                                                    |

### 유효성 검사 및 심볼 옵션

| 옵션                           | 설명                                                                          |
| ---------------------------- | --------------------------------------------------------------------------- |
| `/skipvalidation`            | Submission Validator를 건너뜁니다.                                                |
| `/validationcritical`        | Submission Validator 실패를 치명적 실패로 처리합니다.                                     |
| `/validationlanguage <lang>` | Submission Validator 로그 파일에 대한 추가 언어를 지정합니다.                                |
| `/validationpath <path>`     | SubmissionValidator.dll을 로드할 디렉터리를 지정합니다.                                   |
| `/updatesubval`              | 유효성 검사 전에 최신 SubmissionValidator.dll을 다운로드합니다. 실패 동작은 [pack](#pack)을 참조하세요. |
| `/symbolpaths <symbolpaths>` | 세미콜론으로 구분된 추가 심볼 확인 경로를 지정합니다.                                              |
| `/skipsymbolbundling`        | 심볼 번들링을 건너뜁니다.                                                              |

### 인증 방법

| 방법                         | 설명                                                         |
| -------------------------- | ---------------------------------------------------------- |
| `CacheableBrowser`         | 대화형 로그인을 위해 브라우저를 열고 자격 증명을 캐시합니다. 이 방법이 기본값입니다.           |
| `Browser`                  | 자격 증명을 캐시하지 않고 대화형 로그인을 위해 브라우저를 엽니다.                      |
| `AzureCli`                 | Azure CLI 자격 증명을 사용합니다.                                    |
| `AzurePipelines`           | Azure Pipelines 서비스 연결을 사용합니다.                             |
| `ManagedIdentity`          | Azure 관리 ID를 사용합니다. `/clientid`가 필요합니다.                    |
| `ManagedIdentityFederated` | 페더레이션된 관리 ID를 사용합니다. `/clientid`와 `/resourceid`가 필요합니다.    |
| `ClientSecret`             | 클라이언트 ID와 시크릿을 사용합니다. `/clientid`와 `/clientsecret`이 필요합니다. |
| `ClientCertificate`        | 클라이언트 인증서를 사용합니다. `/clientid`와 `/certthumbprint`가 필요합니다.   |
| `Environment`              | 환경 변수의 자격 증명을 사용합니다.                                       |
| `Default`                  | 여러 인증 방법을 순서대로 시도합니다.                                      |

## genkey

`pack /lk`에서 사용할 로컬 에스크로 키 blob(LEKB)을 생성합니다.

```text theme={null}
makepkg genkey [options]
```

| 옵션               | 설명                                                                                  |
| ---------------- | ----------------------------------------------------------------------------------- |
| `/ekb <ekbfile>` | 생성된 LEKB 파일의 경로를 지정합니다. `makepkg pack`이 생성하는 `.ekb` 파일과 구분하기 위해 `.lekb` 확장자를 사용합니다. |

패키지 생성 중에 안정적인 암호화 키를 사용하려면 `makepkg pack /lk`에 LEKB 파일을 제공합니다. 이 키는:

1. `packageutil compare`가 정확한 업데이트 크기 추정치를 생성할 수 있게 합니다.
2. 콘솔과 PC가 콘텐츠 업데이트를 다운로드할 때 사용하는 것과 동일한 알고리즘을 사용하여 Partner Center에 안전한 델타 업로드를 가능하게 합니다.
3. 개발 키트에 설치할 수 있는 패키지를 생성합니다.
4. 특정 환경에서만 복호화될 수 있는 안전한 암호화 키 자료를 사용합니다.

LEKB 파일에는 가볍게 난독화된 암호화 키 자료가 포함되어 있습니다. LEKB 파일과 패키지를 모두 가진 사람은 패키지를 복호화할 수 있으므로 파일에 대한 안전한 액세스를 유지하세요.

## genid

Product ID GUID와 Store ID 간에 변환합니다.

```text theme={null}
makepkg genid [options]
```

| 옵션                       | 설명                          |
| ------------------------ | --------------------------- |
| `/storeid <storeId>`     | 변환할 Store ID를 지정합니다.        |
| `/productid <productId>` | 변환할 Product ID GUID를 지정합니다. |

## genmap

디스크의 콘텐츠를 기반으로 매핑 XML 파일을 생성합니다. 생성된 파일에는 하나의 청크가 포함되어 있으며, 콘텐츠를 여러 청크로 나누거나 Intelligent Delivery 태그를 추가하도록 편집할 수 있습니다.

```text theme={null}
makepkg genmap /f <mapfile> /d <contentdirectory>
```

| 옵션                      | 설명                           |
| ----------------------- | ---------------------------- |
| `/f <mapfile>`          | 생성된 매핑 파일의 경로를 지정합니다.        |
| `/d <contentdirectory>` | 매핑 파일에 콘텐츠가 추가될 디렉터리를 지정합니다. |

## validate

패키지를 생성하지 않고 패키지 유효성 검사를 실행합니다. 이 명령을 사용하여 전체 pack 작업 전에 콘텐츠와 구성을 확인하세요.

```text theme={null}
makepkg validate [options]
```

`validate` 명령은 [pack](#pack)과 동일한 옵션을 허용합니다.

## updatesubval

패키지를 생성, 유효성 검사 또는 업로드하지 않고 최신 SubmissionValidator.dll을 다운로드, 확인, 설치합니다.

```text theme={null}
makepkg updatesubval [/validationpath <path>]
```

### 옵션

| 옵션                       | 설명                                                                                                                 |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------ |
| `/validationpath <path>` | SubmissionValidator.dll이 포함되어 있거나 받게 될 디렉터리를 지정합니다. 생략하면 명령이 `makepkg` 도구 디렉터리를 확인한 다음 `%GameDK%\bin` 디렉터리를 확인합니다. |

### 비고

SubmissionValidator.dll이 이미 최신 버전이면 명령은 최신 상태임을 보고하고 다운로드하지 않고 성공적으로 종료합니다. 파일이 없으면 명령이 설치합니다. 성공하면 명령은 디스크의 SubmissionValidator.dll 버전을 표시합니다.

패키징 또는 유효성 검사 중에 사용되는 `/updatesubval` 옵션과 달리, 독립 실행형 `updatesubval` 명령은 업데이트가 실패하면 0이 아닌 종료 코드를 반환합니다. 옵션으로 사용되는 경우, 업데이트 실패는 치명적이지 않으며 패키징 또는 유효성 검사 작업은 설치된 SubmissionValidator.dll 버전으로 계속됩니다.

## localize

디스크의 콘텐츠를 기반으로 Resources.pri 파일을 생성합니다.

```text theme={null}
makepkg localize /d <sourcedir> [options]
```

| 옵션                     | 설명                                                                    |
| ---------------------- | --------------------------------------------------------------------- |
| `/d <sourcedir>`       | **(필수)** 지역화할 콘텐츠가 있는 원본 디렉터리를 지정합니다.                                 |
| `/resw <reswdir>`      | RESW 파일이 있는 루트 디렉터리에 상대적인 디렉터리를 지정합니다.                                |
| `/pd <outputdir>`      | Resources.pri의 출력 디렉터리를 지정합니다. 생략하면 파일이 콘텐츠 디렉터리에 배치됩니다.              |
| `/t <tempdir>`         | Resources.pri를 XML로 변환하는 임시 디렉터리를 지정합니다.                              |
| `/gc <gameconfigpath>` | 파일이 콘텐츠 디렉터리의 기본 위치에 없거나 다른 이름을 사용할 때 MicrosoftGame.config 경로를 지정합니다. |

자세한 내용은 [MicrosoftGame.config 지역화](/build/core-features/common/game-config/MicrosoftGameConfig-Localization)를 참조하세요.

## 관련 항목

[MSIXVC2 패키징 개요](/build/core-features/common/packaging/overviews/packaging-msixvc2-overview)

[PC용 MSIXVC2 시작하기](/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2)

[배포 패키지 스키마](/build/core-features/common/packaging/deployment/atoc-deployment-schema)

[XBOX Game Package Manager](/build/core-features/common/packaging/xgpm)

[패키지 업로드 자동화](/build/core-features/common/packaging/package-uploader)


## Related topics

- [packageutil.exe](/ko/build/core-features/common/packaging/deployment/packageutil.md)
- [배포 패키지 스키마](/ko/build/core-features/common/packaging/deployment/atoc-deployment-schema.md)
- [PC 개발용 명령줄 도구](/ko/tools/tools-pc/commandlinetools/gr-commandlinetools-toc.md)
- [PC용 MSIXVC2 패키징 시작하기](/ko/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2.md)
- [스트리밍 설치용 도구](/ko/build/core-features/common/packaging/deployment/atoc-deployment-tools.md)
