# 매니페스트에서 GitHub 앱 등록

GitHub App 매니페스트는 미리 구성된 GitHub App 등록을 다른 사용자와 공유하는 방법입니다. 매니페스트 흐름을 사용하면 사용자가 신속하게 GitHub App를 등록할 수 있습니다.

## 매니페스트 정보 GitHub App

> \[!NOTE]
> GitHub App 엔터프라이즈 소유 GitHub Apps의 매니페스트는 사용할 수 없습니다.

누군가가 매니페스트에서 등록하는 GitHub App 경우 URL을 따르고 앱 이름을 지정하기만 하면 됩니다. 매니페스트에는 앱을 자동으로 등록하는 데 필요한 권한, 이벤트 및 웹후크 URL이 포함됩니다. 매니페스트 흐름은 등록을 GitHub App 만들고 앱의 웹후크 비밀, PEM 파일(프라이빗 키), 클라이언트 암호 및 ID를 GitHub App 생성합니다. 매니페스트에서 등록을 GitHub App 만드는 사람은 등록을 GitHub App 소유하고 등록 설정을 편집하거나 삭제하거나 다른 사람에게 GitHub전송하도록 선택할 수 있습니다.

[Probot](https://probot.github.io/)을 사용하여 매니페스트를 시작 GitHub App 하거나 예제 구현을 볼 수 있습니다. 자세한 내용은 [Probot을 사용하여 매니페스트 흐름을 구현 GitHub App](#using-probot-to-implement-the-github-app-manifest-flow) 하는 방법을 참조하세요.

매니페스트를 사용하여 GitHub App 미리 구성된 앱을 등록할 수 있는 몇 가지 시나리오는 다음과 같습니다.

* 새로운 팀원이 개발할 때 빠르게 적응할 수 있도록 GitHub Apps지원해 주세요.
* 다른 사용자가 앱을 구성할 필요 없이 API를 사용하여 GitHub App 확장 GitHub 할 수 있도록 허용합니다.
* GitHub App 참조 디자인을 만들어 GitHub 커뮤니티와 공유합니다.
* GitHub Apps을(를) 동일한 구성을 사용하여 개발 및 프로덕션 환경에 배포해야 합니다.
* GitHub App 구성의 수정 내역을 추적합니다.

## GitHub App 매니페스트 흐름 구현

매니페스트 흐름은 GitHub App[OAuth 흐름](/ko/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps)과 유사한 핸드셰이크 프로세스를 사용합니다. 흐름은 매니페스트를 사용하여 [등록 GitHub App](/ko/enterprise-server@3.22/apps/creating-github-apps/registering-a-github-app/registering-a-github-app) 하고 앱의 프라이빗 키, 웹후크 비밀 및 ID를 검색하는 데 사용되는 임시 `code` 를 받습니다.

> \[!NOTE] 매니페스트 흐름에서 1 GitHub App 시간 이내에 세 단계를 모두 완료해야 합니다.

매니페스트 흐름을 구현 GitHub App 하려면 다음 단계를 수행합니다.

1. 새 GitHub을 등록하도록 GitHub App로 리디렉션합니다.
2. GitHub 는 사용자를 사이트로 다시 리디렉션합니다.
3. 임시 코드를 교환하여 앱 구성을 검색합니다.

### 1. 사람들을 GitHub로 리디렉션하여 새롭게 등록하기 위한 GitHub App

새로운 GitHub App를 등록하도록 리디렉션하려면, 클릭을 통해 개인 계정을 위한 [](#examples) 요청 또는 조직 계정을 위한 `POST` 요청을 보낼 수 있는 `https://github.com/settings/apps/new`. 여기서 `https://github.com/organizations/ORGANIZATION/settings/apps/new`에는 앱이 등록될 조직 계정의 이름으로 대체됩니다.

[매니페스트 매개 변수를GitHub App](#github-app-manifest-parameters) JSON으로 인코딩된 문자열로 라는 `manifest`매개 변수에 포함해야 합니다. 추가 보안을 위해 `state`[매개 변수](#parameters)를 포함할 수도 있습니다.

앱을 등록하는 사용자는 매개 변수에 포함된 앱의 이름을 편집할 GitHub 수 있는 입력 필드가 있는 페이지로 `manifest` 리디렉션됩니다.
`name`을 `manifest`에 포함하지 않는 경우 이 필드에서 앱의 고유한 이름을 설정할 수 있습니다.

#### GitHub App 매니페스트 매개 변수

| 이름                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 형식                 | 설명                                                                                        |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----------------------------------------------------------------------------------------- |
| `name`                                                                                                                                                                                                                                                                                                                                                                                                                                                        | `string`           |                                                                                           |
| GitHub App의 이름입니다.                                                                                                                                                                                                                                                                                                                                                                                                                                            |                    |                                                                                           |
| `url`                                                                                                                                                                                                                                                                                                                                                                                                                                                         | `string`           |                                                                                           |
| **필수입니다**.                                                                                                                                                                                                                                                                                                                                                                                                                                                    |                    |                                                                                           |
| GitHub App의 홈페이지입니다.                                                                                                                                                                                                                                                                                                                                                                                                                                          |                    |                                                                                           |
| `hook_attributes`                                                                                                                                                                                                                                                                                                                                                                                                                                             | `object`           |                                                                                           |
| GitHub App의 웹후크 구성입니다.                                                                                                                                                                                                                                                                                                                                                                                                                                        |                    |                                                                                           |
| `redirect_url`                                                                                                                                                                                                                                                                                                                                                                                                                                                | `string`           | 사용자가 매니페스트에서 등록 GitHub App 을 시작한 후 리디렉션할 전체 URL입니다.                                       |
| `callback_urls`                                                                                                                                                                                                                                                                                                                                                                                                                                               | `array of strings` | 다른 사람이 설치 권한을 부여한 후 리디렉션할 전체 URL입니다. 최대 10개의 콜백 URL을 제공할 수 있습니다.                          |
| `setup_url`                                                                                                                                                                                                                                                                                                                                                                                                                                                   | `string`           | 사용자들이 GitHub App을 설치한 후 추가 설정이 필요한 경우 리디렉션할 전체 URL입니다.                                    |
| `description`                                                                                                                                                                                                                                                                                                                                                                                                                                                 | `string`           |                                                                                           |
| GitHub App에 대한 설명입니다.                                                                                                                                                                                                                                                                                                                                                                                                                                         |                    |                                                                                           |
| `public`                                                                                                                                                                                                                                                                                                                                                                                                                                                      | `boolean`          |                                                                                           |
| `true`이 공개적으로 이용 가능할 때는 GitHub App으로 설정하고, 앱 소유자만 접근할 수 있을 때는 `false`로 설정합니다.                                                                                                                                                                                                                                                                                                                                                                                 |                    |                                                                                           |
| `default_events`                                                                                                                                                                                                                                                                                                                                                                                                                                              | `array`            | 구독하는 [](/ko/enterprise-server@3.22/webhooks/webhook-events-and-payloads)GitHub App 목록입니다. |
| `default_permissions`                                                                                                                                                                                                                                                                                                                                                                                                                                         | `object`           |                                                                                           |
| GitHub App에 필요한 사용 권한 집합입니다. 개체 형식은 키에 권한 이름(예 `issues`)을 사용하고 값에 액세스 형식(예: `write`)을 사용합니다. 자세한 내용은 [GitHub 앱에 대한 권한 선택](/ko/enterprise-server@3.22/apps/creating-github-apps/registering-a-github-app/choosing-permissions-for-a-github-app)을(를) 참조하세요. 사용 가능한 권한 목록과 매개 변수가 있는 이름을 보려면 [개인용 액세스 토큰 관리](/ko/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#account-permissions)을(를) 참조하세요. |                    |                                                                                           |
| `request_oauth_on_install`                                                                                                                                                                                                                                                                                                                                                                                                                                    | `boolean`          |                                                                                           |
| `true` 설치 후 GitHub App 사용자에게 권한을 부여GitHub App하도록 요청하도록 설정합니다.                                                                                                                                                                                                                                                                                                                                                                                                 |                    |                                                                                           |
| `setup_on_update`                                                                                                                                                                                                                                                                                                                                                                                                                                             | `boolean`          | 설치를 업데이트한 후 사용자를 `true`에서 `setup_url`로 리디렉션하도록 GitHub App를 설정합니다.                         |

`hook_attributes` 개체에는 다음 키가 있습니다.

| 이름                                        | 형식        | 설명                                         |
| ----------------------------------------- | --------- | ------------------------------------------ |
| `url`                                     | `string`  |                                            |
| **필수입니다**. 웹후크 `POST` 요청을 수신할 서버의 URL입니다. |           |                                            |
| `active`                                  | `boolean` | 이 후크가 트리거될 때 이벤트 세부 정보를 전달하며 기본값은 true입니다. |

#### 매개 변수

| 이름      | 형식       | 설명                                                  |
| ------- | -------- | --------------------------------------------------- |
| `state` | `string` | 추측할 수 없는 임의 문자열입니다. 교차 사이트 요청 위조 공격에서 보호하는 데 사용됩니다. |

#### 예시

이 예시에서는 개인 계정에 대한 `POST` 요청을 트리거하는 단추가 있는 웹 페이지의 양식을 사용합니다.

```html
<form action="https://github.com/settings/apps/new?state=abc123" method="post">
 Register a GitHub App Manifest: <input type="text" name="manifest" id="manifest"><br>
 <input type="submit" value="Submit">
</form>

<script>
 input = document.getElementById("manifest")
 input.value = JSON.stringify({
   "name": "Octoapp",
   "url": "https://www.example.com",
   "hook_attributes": {
     "url": "https://example.com/github/events",
   },
   "redirect_url": "https://example.com/redirect",
   "callback_urls": [
     "https://example.com/callback"
   ],
   "public": true,
   "default_permissions": {
     "issues": "write",
     "checks": "write"
   },
   "default_events": [
     "issues",
     "issue_comment",
     "check_suite",
     "check_run"
   ]
 })
</script>
```

이 예시에서는 조직 계정에 대한 `POST` 요청을 트리거하는 단추가 있는 웹 페이지의 양식을 사용합니다.
`ORGANIZATION`을(를) 앱을 등록하려는 조직 계정의 이름으로 바꿉니다.

```html
<form action="https://github.com/organizations/ORGANIZATION/settings/apps/new?state=abc123" method="post">
 register a GitHub App Manifest: <input type="text" name="manifest" id="manifest"><br>
 <input type="submit" value="Submit">
</form>

<script>
 input = document.getElementById("manifest")
 input.value = JSON.stringify({
   "name": "Octoapp",
   "url": "https://www.example.com",
   "hook_attributes": {
     "url": "https://example.com/github/events",
   },
   "redirect_url": "https://example.com/redirect",
   "callback_urls": [
     "https://example.com/callback"
   ],
   "public": true,
   "default_permissions": {
     "issues": "write",
     "checks": "write"
   },
   "default_events": [
     "issues",
     "issue_comment",
     "check_suite",
     "check_run"
   ]
 })
</script>
```

### 2. 사용자를 사이트로 다시 리디렉션합니다. GitHub

사용자가 **만들기 GitHub App**GitHub 를 클릭하면 코드 매개 변수에서 `redirect_url` 임시 `code` 로 다시 리디렉션됩니다. 예시:

```
https://example.com/redirect?code=a180b1a3d263c81bc6441d7b990bae27d4c10679
```

`state` 매개 변수를 제공한 경우 `redirect_url`에도 해당 매개 변수가 표시됩니다. 예시:

```
https://example.com/redirect?code=a180b1a3d263c81bc6441d7b990bae27d4c10679&state=abc123
```

### 3. 임시 코드를 교환하여 앱 구성 검색

핸드셰이크를 완료하려면 임시 `code`를 `POST` 요청에 담아 [매니페스트에서 GitHub App 생성](/ko/enterprise-server@3.22/rest/apps/apps#create-a-github-app-from-a-manifest) 엔드포인트로 보냅니다. 응답에는 `id` (GitHub App ID), `pem` (프라이빗 키), 그리고 `webhook_secret`가 포함됩니다.
GitHub 는 앱에 대한 웹후크 비밀을 자동으로 만듭니다. 이러한 값을 앱 서버의 환경 변수에 저장할 수 있습니다. 예를 들어, 앱에서 [dotenv](https://github.com/bkeepers/dotenv)를 사용하여 환경 변수를 저장하는 경우 변수를 앱의 `.env` 파일에 저장합니다.

매니페스트 흐름의 GitHub App 이 단계를 1시간 이내에 완료해야 합니다.

> \[!NOTE]
> 이 엔드포인트는 속도가 제한됩니다. 현재 속도 제한 상태를 가져오는 방법을 알아보려면 [속도 제한](/ko/enterprise-server@3.22/rest/rate-limit/rate-limit)을 참조하세요.

```
POST /app-manifests/{code}/conversions
```

엔드포인트의 응답에 대한 자세한 내용은 [매니페스트에서 GitHub App 생성하기](/ko/enterprise-server@3.22/rest/apps/apps#create-a-github-app-from-a-manifest)를 참조하십시오.

매니페스트 흐름의 마지막 단계가 완료되면, 흐름에서 앱을 등록한 사람은 자신의 모든 계정에 설치할 수 있는 등록된 GitHub App의 소유자가 됩니다. API를 사용하여 앱을 확장하거나, 소유권을 GitHub 다른 사람에게 이전하거나, 언제든지 삭제하도록 선택할 수 있습니다.

## Probot을 사용하여 매니페스트 흐름 구현 GitHub App

[Probot](https://probot.github.io/)은 웹후크 유효성 검사 및 인증 수행과 같이 모든 [](https://nodejs.org/)작업에 필요한 많은 작업을 수행하는 GitHub Apps 사용하여 빌드된 프레임워크입니다. Probot은 [GitHub App 매니페스트 흐름을](#implementing-the-github-app-manifest-flow) 구현하여 커뮤니티와 참조 디자인을 쉽게 만들고 공유할 GitHub App 수 있도록 합니다 GitHub .

공유할 수 있는 Probot 앱을 만들려면 다음 단계를 수행합니다.

1. [새 GitHub App를 생성합니다](https://probot.github.io/docs/development/#generating-a-new-app).
2. 생성한 프로젝트를 열고 `app.yml` 파일의 설정을 사용자 지정합니다. Probot은 `app.yml` 설정을 [GitHub App 매니페스트 매개 변수로](#github-app-manifest-parameters) 사용합니다.
3. 애플리케이션의 사용자 지정 코드를 추가합니다.
4. [로컬에서 GitHub App 실행](https://probot.github.io/docs/development/#running-the-app-locally) 하거나 원하는 위치에 호스트합니다. 호스트된 앱의 URL로 이동하면 사용자가 클릭하여 미리 구성된 앱을 등록할 수 있는 **등록 GitHub App** 단추가 있는 웹 페이지를 찾을 수 있습니다.

[dotenv](https://github.com/bkeepers/dotenv)를 사용하여 Probot은 `.env` 파일을 생성하고, 앱 구성에서 가져온 값으로 `APP_ID`, `PRIVATE_KEY`, `WEBHOOK_SECRET` 환경 변수를 설정합니다.