{"meta":{"title":"Enterprise Live Migrations를 사용하여 리포지토리 마이그레이션","intro":"GitHub Enterprise Server에서 GHE.com으로 전환하면서 가동 중지 시간을 최소화합니다.","product":"마이그레이션","breadcrumbs":[{"href":"/ko/migrations","title":"마이그레이션"},{"href":"/ko/migrations/elm","title":"라이브 마이그레이션(GHES에서 GHE.com으로)"},{"href":"/ko/migrations/elm/migrate-your-repository","title":"리포지토리 마이그레이션"}],"documentType":"article"},"body":"# Enterprise Live Migrations를 사용하여 리포지토리 마이그레이션\n\nGitHub Enterprise Server에서 GHE.com으로 전환하면서 가동 중지 시간을 최소화합니다.\n\n> \\[!NOTE]\n> Enterprise Live Migrations 가 있으며 공개 미리 보기 변경될 수 있습니다.\n\n> \\[!TIP] 이 가이드를 따르면 [기업용 라이브 마이그레이션 CLI 참고 문서](/ko/migrations/elm/elm-cli-reference) 을 참조하여 자세한 사용 정보를 확인할 수 있습니다. 오류가 발생하면 [GitHub Enterprise Server에서 GHE.com 실시간 마이그레이션 문제 해결](/ko/migrations/elm/troubleshooting)을 참조하세요.\n\n## 사전 요구 사항\n\n마이그레이션할 준비가 되었는지 확인합니다.\n[GitHub Enterprise Server에서 GHE.com 실시간 마이그레이션 준비](/ko/migrations/elm/prepare-for-your-migration)을(를) 참조하세요.\n\n## 1. 액세스 토큰 만들기\n\n마이그레이션의 원본 및 대상 모두에 대해 인증 personal access token (classic) 해야 합니다. 자세한 지침은 [개인용 액세스 토큰 관리](/ko/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic)을 참조하세요.\n\n다음 단계에서 필요하므로 **두 토큰을 모두 기록**해 둡니다.\n\n1. 다음 범위를 사용하여 personal access token (classic)에 GitHub Enterprise Server을 만드십시오.\n\n   * `repo`\n   * `admin:org`\n   * `admin:repo_hook`\n   * `admin:org_hook`\n\n2. 다음 범위를 사용하여 personal access token (classic)에 GHE.com을 만드십시오.\n\n   * `repo`\n   * `workflow`\n   * `admin:org`\n   * `admin:repo_hook`\n   * `admin:enterprise`\n\n3. 대상 조직에 단일 로그인이 GHE.com 적용될 경우, GHE.com 토큰에 권한을 부여하십시오.\n\n## 2. 구성 GitHub Enterprise Server\n\n마이그레이션을 수행하기 전에 인스턴스에서 GitHub Enterprise Server 일부 구성을 설정해야 합니다. 이러한 구성 값은 모든 ELM 마이그레이션에 적용됩니다. 개발자는 GitHub Enterprise Server 새 구성을 적용할 때 짧은 가동 중지 시간이 발생할 수 있습니다.\n\n1. SSH를 GitHub Enterprise Server 통해 관리 셸에 액세스합니다.\n   [관리 셸(SSH)에 액세스](/ko/enterprise-server@3.22/admin/administering-your-instance/administering-your-instance-from-the-command-line/accessing-the-administrative-shell-ssh)을(를) 참조하세요.\n2. 를 사용하여 다음 구성 변수를 `ghe-config`설정합니다.\n\n   예를 들어: `ghe-config app.elm-exporter.enabled true`\n\n   | 변수                                                   | 이 값으로 설정합니다.                                                                             |\n   | ---------------------------------------------------- | ---------------------------------------------------------------------------------------- |\n   | `app.elm-exporter.enabled`                           | `true`                                                                                   |\n   | `app.elm.internal-webhooks-enabled`                  | `true`                                                                                   |\n   | `app.elm-exporter.webhooks-loopback-address-enabled` | `true`                                                                                   |\n   | `secrets.elm-exporter.migration-target-url`          | 대상 엔터프라이즈의 API URL입니다(예: `https://api.octocorp.ghe.com`). URL의 끝에 후행 슬래시를 포함하지 **마세요** . |\n   | `secrets.elm-exporter.migration-target-token`        |                                                                                          |\n\nGHE.com에 대해 만든 액세스 토큰입니다. |\n\\| `secrets.elm-exporter.source-token` |\nGitHub Enterprise Server에 대해 만든 액세스 토큰입니다. |\n\\| `secrets.elm-exporter.source-user` | 토큰과 GitHub Enterprise Server 연결된 사용자 이름(예: `ghe-admin`)입니다. |\n\\| `app.migrations.enabled` | 인스턴스에서 마이그레이션을 사용하도록 설정하지 않은 경우 이를 `true`.로 설정해야 합니다. |\n\n1. 구성을 적용하세요.\n\n   ```shell copy\n   ghe-config-apply\n   ```\n\n## 3. 필요한 환경 변수 설정\n\n구성이 적용된 경우 마이그레이션을 시작하기 전에 필요한 환경 변수를 설정합니다. 다음은 그 예입니다.\n\n```shell\nexport API_URL='http://localhost:1738'\n```\n\n> \\[!IMPORTANT]\n> `API_URL` 및 `MIGRATION_MANAGER_HMAC_KEY`의 값을 그대로 복사합니다. 다른 변수는 사용자 환경에 따라 다릅니다.\n\n| 변수                            | 필수 값                                                                                     |\n| ----------------------------- | ---------------------------------------------------------------------------------------- |\n| API\\_URL                      | `http://localhost:1738`                                                                  |\n| MIGRATION\\_MANAGER\\_HMAC\\_KEY | `$(ghe-config secrets.elm-exporter.elm-exporter-hmac-keys)`                              |\n| MIGRATION\\_TARGET\\_URL        | 대상 엔터프라이즈의 API URL입니다(예: `https://api.octocorp.ghe.com`). URL의 끝에 후행 슬래시를 포함하지 **마세요** . |\n| MIGRATION\\_TARGET\\_TOKEN      | personal access token (classic) 을 위한 GHE.com                                             |\n\n이러한 값은 모든 `elm` 명령에서 CLI 플래그로 제공될 수도 있습니다. 이 플래그는 변수보다 우선합니다. 예: `--api-url http://localhost:1738`.\n\n## 4. 마이그레이션 만들기\n\n원본 및 대상 리포지토리 세부 정보를 지정하여 새 마이그레이션을 만듭니다.\n`--pat-name`은 `system-pat`로 정적 값으로 설정해야 합니다. 다른 값은 사용자 환경과 관련된 자리 표시자입니다.\n\n> \\[!NOTE] 새 `target-org` 항목 또는 기존 항목일 수 있습니다. 대상 조직이 아직 없는 경우 마이그레이션 중에 만들어집니다. 그러나 원본 조직의 설정은 마이그레이션되지 않습니다.\n\n```shell copy\nelm migration create \\\n  --source-org EXISTING-GHES-ORG \\\n  --source-repo EXISTING-GHES-REPO \\\n  --target-org GHEC-ORG \\\n  --target-repo NEW-GHEC-REPO \\\n  --target-api GHEC-API-URL \\\n  --pat-name system-pat\n```\n\n다음은 그 예입니다.\n\n```shell\nelm migration create \\\n  --source-org my-ghes-org \\\n  --source-repo my-ghes-repo \\\n  --target-org my-dr-org \\\n  --target-repo my-dr-repo \\\n  --target-api $MIGRATION_TARGET_URL \\\n  --pat-name system-pat\n```\n\n선택적 플래그:\n\n* `--start`: 마이그레이션을 즉시 시작할 준비가 되었는지 확인합니다.\n* `--target-visibility`: 마이그레이션된 리포지토리는 기본적으로 **내부** 표시 유형으로 만들어지지만 지정할 `private`수 있습니다.\n\n### 마이그레이션 ID 저장\n\n다음과 같은 응답이 표시됩니다.\n\n```json\n{\n  \"migrationId\": \"2b5c9eae-b5da-4306-ab04-2a29cc2b7cb9\",\n  \"expiresAt\": \"2026-02-11T21:49:33.619162159Z\"\n}\n```\n\n`migrationId` 다음 명령에 필요하므로 변수로 내보냅니다. 다음은 그 예입니다.\n\n```shell\nexport MIGRATION_ID='2b5c9eae-b5da-4306-ab04-2a29cc2b7cb9'\n```\n\n## 5. 마이그레이션 시작\n\n마이그레이션을 아직 시작하지 않은 경우 방금 저장한 마이그레이션 ID를 사용하여 지금 시작합니다.\n\n```shell copy\nelm migration start --migration-id $MIGRATION_ID\n```\n\n그러면 백필 및 라이브 업데이트 프로세스가 시작됩니다.\nELM 는 이제 원본 리포지토리에서 데이터를 수집하고 지원되는 웹후크 이벤트를 수신 대기합니다.\n\n## 6. 마이그레이션 모니터링\n\n마이그레이션이 시작되면 새 리포지토리가 표시됩니다 GHE.com. 마이그레이션하는 동안 개발자가 원본 리포지토리에서 계속 작업할 때 초기 데이터 로드로 리포지토리가 채워지고 업데이트가 수신됩니다.\n\n마이그레이션 상태를 모니터링하려면 다음 명령을 정기적으로 실행합니다. 원본 및 대상의 상태 분석과 마이그레이션 중인 라이브 데이터에 대한 정보가 표시됩니다.\n\n```shell copy\nelm migration status --migration-id $MIGRATION_ID\n```\n\n응답에서 가장 중요한 지표는 **combinedState** 개체의 상태입니다. 상태가 `COMBINED_STATUS_READY_FOR_CUTOVER`에 도달하면 다음 단계로 진행할 준비를 해야 합니다. 그러나 개별 리소스가 `displayMessage`에서 마이그레이션에 실패하면 조사가 필요할 수 있다는 경고가 표시됩니다.\n\n다음은 그 예입니다.\n\n```json\n  \"combinedState\":  {\n    \"status\":  \"COMBINED_STATUS_READY_FOR_CUTOVER\",\n    \"displayMessage\":  \"Ready for cutover (1 resources failed)\",\n    \"repositories\":  [\n      {\n        \"repositoryNwo\":  \"new-test-org/my-new-repo\",\n        \"phase\":  \"REPOSITORY_PHASE_READY_FOR_CUTOVER\",\n        \"displayStatus\":  \"Ready for cutover (1 failed)\"\n      }\n    ],\n    \"readyForCutover\":  true,\n    \"cutoverBlockers\":  []\n  },\n```\n\n팁:\n\n* 여러 마이그레이션을 실행하는 경우 .를 사용하여 모든 `elm migration list`마이그레이션의 상태를 확인할 수 있습니다. 이 명령은 기본적으로 진행 중인 마이그레이션을 표시하지만 다음을 통해 `--status`필터링할 수도 있습니다.\n* 주의가 필요한 실패 상태가 발생하는 경우 [GitHub Enterprise Server에서 GHE.com 실시간 마이그레이션 문제 해결](/ko/migrations/elm/troubleshooting#statuses-and-recommended-actions)을 참조하세요.\n\n## 7. 마이그레이션 완료\n\n마이그레이션을 중단할 준비가 되면 마이그레이션을 완료할 수 있습니다. 컷오버 프로세스는 원본 리포지토리를 보관 처리하므로, 리포지토리 관리자가 보관 해제하지 않는 한 **영구적으로 읽기 전용** 상태가 됩니다.\n\n```shell copy\nelm migration cutover-to-destination --migration-id $MIGRATION_ID\n```\n\n마이그레이션을 계속 모니터링합니다. 응답 맨 위에 상태가 표시 `MIGRATION_STATUS_COMPLETED` 되면 마이그레이션이 완료되지만 사용자에게 GitHub Enterprise Server액세스 권한을 부여하는 몇 가지 후속 작업이 있습니다.\n\n## 다음 단계\n\n사용자에게 새 리포지토리에 대한 액세스 권한을 부여하고 사용자 계정과 작업을 조정합니다.\n[GitHub Enterprise Server에서 GHE.com 실시간 마이그레이션 완료](/ko/migrations/elm/complete-your-migration)을(를) 참조하세요."}