> For the complete documentation index, see [llms.txt](https://genos-docs.gitbook.io/default/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://genos-docs.gitbook.io/default/v1.9.3/basic-tutorials/guides/workflow/promotion.md).

# 워크플로우 이관

## 개요

워크플로우 이관은 개발망(GenOS)에서 저작·검증한 워크플로우(Flowise 그래프·Python 스텝·실행 스펙)를 **아티팩트(JSON) 단위**로 운영망에 반영하는 기능입니다. 개발망과 운영망은 보안상 분리되어 있어, 신청자가 승인(결재)을 받으면 시스템이 아티팩트를 양쪽에서 접근 가능한 **외부 Git 저장소(브리지)** 에 푸시하고, 운영망이 같은 저장소를 조회해 **반입**하는 방식으로 이동합니다. 반입은 항상 새 리비전을 생성하며, 카나리(병렬 검증) 또는 즉시 교체 중에서 선택합니다. 아티팩트의 SHA-256 체크섬이 신청·결재·반입 전 구간에 표시되어 **결재받은 내용과 반입되는 내용이 같음**을 확인할 수 있습니다(결재지문).

**진입점**

| 기능              | 경로                                                                                                                     |
| --------------- | ---------------------------------------------------------------------------------------------------------------------- |
| 전용 승격           | `[에이전트 > 워크플로우]` → 상세 → `[리비전 정보]` 탭 → Flowise 엔진 카드 → `[전용 승격]`                                                       |
| 이관 신청(반출)       | 상세 상단 `[이관 신청]` 버튼                                                                                                     |
| 이관 결재           | `[운영 > 승인]` → 승인 유형 `이관` → `[검토]`                                                                                      |
| 이관 이력·아티팩트 다운로드 | 상세 → `[이관 이력]` 탭                                                                                                       |
| 반입(운영망)         | 대상 워크플로우 상세 상단 `[반입 신청]` 버튼. 도착 아티팩트 전체 조회는 관리자용 워크플로우 이관 반입 화면(직접 경로 `/agent/workflow/promotion-inbound/`, 관리자 권한 필요) |
| 카나리 검증·전면 적용    | 상세 → `[이관 이력]` 탭 상단 `카나리 배포` 패널                                                                                        |

## 주요 개념

| 개념            | 설명                                                                                                               |
| ------------- | ---------------------------------------------------------------------------------------------------------------- |
| 아티팩트          | 워크플로우 정의 전체(Flowise 그래프, Python 스텝 코드, 실행 스펙, 리소스 참조)를 담은 JSON 파일입니다. 이관의 운반 단위입니다.                              |
| 체크섬(결재지문)     | 아티팩트의 SHA-256 해시입니다. 결재 검토 모달·이관 이력·반입 이력에 동일하게 표시되어, 결재받은 내용이 변조 없이 반입됐는지 대조하는 기준입니다.                           |
| 브리지           | 개발망·운영망 양쪽에서 접근 가능한 외부 Git 저장소입니다. 승인 시 시스템이 `promotions/<환경>/<신청 ID>/artifact.json` 경로로 자동 푸시합니다.               |
| 전용 승격         | 공용 Flowise 엔진에서 저작한 워크플로우를 전용 엔진으로 전환하는 절차입니다. **공용 워크플로우는 반출할 수 없으므로** 이관 전 승격이 선행돼야 합니다. 원본 공용 리비전은 보존됩니다.     |
| 수명주기 배지       | 목록·상세의 워크플로우 상태 칩입니다 — `저작`(공용), `검증`(전용·개발망), `운영`(전용·운영망). 사이트의 망 구분 설정에 따라 표시됩니다.                             |
| 대표 배포(대표 리비전) | 현재 실 트래픽을 받는 배포 리비전입니다. 워크플로우 상세 `[배포]`로 만들어지며, **카나리 반입의 전제 조건**입니다(카나리는 대표와 신규 리비전을 나란히 놓고 비교하는 방식이므로).        |
| 카나리 반입        | 기존 대표 배포를 유지한 채 반입 리비전을 병렬로 띄우고, 트래픽 비율·강제 헤더로 검증한 뒤 전면 적용하는 모드입니다. 대표 배포가 있어야 사용할 수 있습니다.                       |
| 즉시 교체 반입      | 대상 워크플로우를 반입 내용으로 곧바로 덮어쓰는 모드입니다. 최초 반입(대표 배포가 없는 대상)은 이 모드로 진행합니다.                                              |
| 자동승인          | 사이트 설정(`workflow_inbound_auto_approval`)이 켜진 경우 반입 신청이 무인 승인·적용되는 기능입니다. 차단 사유(시크릿 의심 등)에 걸리면 사람 결재로 전환됩니다.      |
| 리소스 매핑        | 소스 환경의 리소스 ID(서빙·벡터 DB·MCP 등)를 대상 환경의 ID로 바꿔 반입하는 기능입니다. 미입력 항목은 소스 ID를 그대로 유지합니다.                               |
| 편집 잠금         | 운영 사이트 설정(`GENOS_WORKFLOW_EDIT_LOCK`)이 켜지면 **전용 엔진을 보유한(=반입·승격된) 워크플로우**의 캔버스 직접 편집이 금지됩니다 — 변경은 재반입 절차로만 허용됩니다. |

> 표의 사이트 설정 키(`workflow_inbound_auto_approval`, `GENOS_WORKFLOW_EDIT_LOCK` 등)는 설치·운영 형상(환경 변수 또는 관리자 환경 설정)으로 관리되는 값입니다. 변경은 시스템 관리자에게 요청하세요.

## 사전 준비

**권한** — 신청자는 워크플로우 관리 권한, 결재자는 `[운영 > 승인]` 메뉴 접근 권한이 필요합니다. 워크플로우 이관 반입 화면은 관리자 전용입니다.

**브리지 Git 저장소** — 개발망·운영망 양쪽에서 접근 가능한 Git 저장소(GitHub / GitLab / Gitea / Bitbucket 등)와, 푸시 권한이 있는 계정의 Personal Access Token(PAT)을 준비합니다. PAT는 평문 보관되지 않습니다 — 반출 신청 시 암호화 저장됐다가 승인 푸시가 완료되면 즉시 폐기되고, 반입 조회 시에는 매번 다시 입력합니다.

**운영망 대상 워크플로우** — 운영망 워크플로우 생성 메뉴에서 **개발망과 같은 이름**으로 새 워크플로우를 만들어 둡니다. 반입 화면이 이 이름으로 대상을 식별하므로 이름이 정확히 일치해야 합니다. 리비전이 없는 빈 워크플로우면 충분합니다 — 첫 반입이 아티팩트의 실행 스펙(이미지·인스턴스 타입·복제본 수)을 자동 구성합니다.

**전용 승격 완료** — 반출 대상은 전용 워크플로우여야 합니다(아래 §1).

## 1. 전용 승격 (개발망)

공용 엔진에서 저작을 마친 워크플로우를 전용으로 전환합니다.

1. 목록에서 `저작` 배지가 붙은 워크플로우를 확인합니다. 수명주기 배지로 공용/전용을 구분할 수 있습니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-16739bae182f53b95de22534a0de22accfde1506%2Fwfpromo_u01_list_lifecycle_badges.png?alt=media" alt="워크플로우 목록 — 수명주기 배지"><figcaption><p>워크플로우 목록 — 수명주기 배지</p></figcaption></figure>
2. 상세 → `[리비전 정보]` 탭에서 아래로 스크롤해 **Flowise 엔진 카드**로 이동하면 `[전용 승격]` 버튼이 있습니다. 저장된 Flowise 스텝이 있어야 활성화되며, 비활성 사유는 마우스 오버 툴팁으로 표시됩니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-cafd312e8e307467d7b95e9eec54fb9a862776fc%2Fwfpromo_u02_promote_button.png?alt=media" alt="리비전 정보 탭 — 전용 승격 버튼"><figcaption><p>리비전 정보 탭 — 전용 승격 버튼</p></figcaption></figure>
3. `[전용 승격]` 클릭 → 다이얼로그에서 안내를 확인하고 실행합니다. 전용 엔진이 즉시 기동되므로 완료까지 수십 초\~3분이 걸릴 수 있습니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-cb96738ac1ce8fa7336222794e62e26bf40ba2d9%2Fwfpromo_u03_promote_dialog.png?alt=media" alt="전용 승격 다이얼로그"><figcaption><p>전용 승격 다이얼로그</p></figcaption></figure>
4. 완료되면 배지가 `저작`→`검증`(또는 `운영`)으로 바뀌고 새 전용 리비전이 생성됩니다. 원본 공용 리비전은 보존됩니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-66b0d6c27d7f025f40a894f0e5608bfe21479bbb%2Fwfpromo_u04_after_promote_staged.png?alt=media" alt="승격 완료 — 배지 전환"><figcaption><p>승격 완료 — 배지 전환</p></figcaption></figure>

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-8809af66bee6323ae192a957c41974df46376b01%2Fwfpromo_u05_dedicated_revision.png?alt=media" alt="전용 리비전 생성 확인"><figcaption><p>전용 리비전 생성 확인</p></figcaption></figure>

> 배포 중인 워크플로우는 승격할 수 없습니다(에러 05020039). 먼저 중지 후 진행하세요.

## 2. 이관 신청 — 반출 (개발망)

1. 상세 상단 `[이관 신청]` 클릭 → 이관 사유를 입력하고 대상 유형을 선택합니다.
   * **내부 워크플로우**: 같은 GenOS 안의 다른 워크플로우로 복사 이관합니다(망 이동 없음).
   * **외부 반출**: 브리지 저장소로 내보내 운영망 반입에 사용합니다. 이 매뉴얼의 주 대상입니다.
2. 외부 반출 필드를 입력합니다 — 운영망 대상 워크플로우 이름(운영망 이름과 정확히 일치해야 함), 외부 결재번호(내부 결재 시스템 번호), 브리지 Git URL·브랜치·PAT. 리소스 매핑이 필요하면 소스 ID 옆에 대상 ID를 입력합니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-d735862ee7bc3a6e2dc08eaa02f9be387b64513d%2Fwfpromo_u06_export_request_modal.png?alt=media" alt="이관 신청 모달 — 외부 반출"><figcaption><p>이관 신청 모달 — 외부 반출</p></figcaption></figure>
3. `[이관]` 클릭 → 접수 토스트가 표시되고 결재 대기 상태가 됩니다. 접수 후에는 `[이관 신청]` 버튼이 비활성화되어 중복 신청이 방지됩니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-46124b0a0cbbce31fa5a40403fd38726ae5ddc73%2Fwfpromo_u07_export_submitted.png?alt=media" alt="신청 접수 — 토스트·버튼 비활성"><figcaption><p>신청 접수 — 토스트·버튼 비활성</p></figcaption></figure>

## 3. 이관 결재 (개발망 결재자)

1. `[운영 > 승인]` 목록에서 상세 유형 `워크플로우 이관` 미결재 행의 `[검토]`를 클릭합니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-7d167d2de0ddeb037f4ff4a752668ee2e5fa76f8%2Fwfpromo_u08_approval_list.png?alt=media" alt="승인 목록 — 미결재 이관 건"><figcaption><p>승인 목록 — 미결재 이관 건</p></figcaption></figure>
2. 검토 모달에서 소스 워크플로우·이관 사유·**체크섬(결재지문)** 을 확인하고 `[승인]` 또는 `[반려]`를 선택합니다. 결재자는 PAT를 입력하지 않습니다 — 신청 시 암호화 저장된 PAT가 승인 푸시에 사용된 뒤 폐기됩니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-9a0689a50e991fc817804769f9f93a4544190d9a%2Fwfpromo_u09_approval_review.png?alt=media" alt="이관 검토 모달 — 체크섬 표시"><figcaption><p>이관 검토 모달 — 체크섬 표시</p></figcaption></figure>
3. 승인하면 시스템이 아티팩트를 브리지 저장소에 자동 푸시합니다. 결과는 이관 이력 탭에서 확인합니다 — 실패 시 `실패 로그` 컬럼에 원인이 표시됩니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-dbd7f088054b354dc471e3ff76e897e3f49451c5%2Fwfpromo_u10_promotion_history.png?alt=media" alt="이관 이력 탭 — 승인·푸시 완료"><figcaption><p>이관 이력 탭 — 승인·푸시 완료</p></figcaption></figure>

**아티팩트 다운로드** — 이관 이력 탭의 `아티팩트` 컬럼에서 이관 성공 건은 `[다운로드]`가 활성화됩니다(반입 결재·카나리 비율 변경 건은 비활성). 다운로드 파일의 `shasum -a 256` 결과가 검토 모달의 체크섬과 일치하는지로 무결성을 확인할 수 있으며, 다운로드는 감사 목적으로 기록됩니다.

<figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-f004026599054056dbf2a8e1a485a3ad2d6ececd%2Fwfpromo_u11_download_column.png?alt=media" alt="다운로드 컬럼 분기"><figcaption><p>다운로드 컬럼 분기</p></figcaption></figure>

## 4. 반입 (운영망)

1. 운영망에서 대상 워크플로우 상세 상단 `[반입 신청]`을 클릭합니다. (관리자는 워크플로우 이관 반입 화면에서 브리지에 도착한 아티팩트 전체를 조회할 수도 있습니다 — 대상 이름이 일치하지 않아 상세 버튼으로 찾을 수 없는 건을 확인할 때 유용합니다.)
2. 브리지 Git URL·PAT를 입력하고 `[조회]` → 도착한 아티팩트 목록에서 반입할 건을 선택합니다. 브랜치를 비우면 기본 브랜치를 조회합니다(반출 때 지정한 브랜치와 같아야 합니다). 선택하면 스텝 구성(Flowise/Python 수)이 표시됩니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-c93b9bb7a65702c62a8c454d0f3e2bf498881ab8%2Fwfpromo_u12_inbound_modal_browse.png?alt=media" alt="반입 모달 — 브리지 조회·아티팩트 선택"><figcaption><p>반입 모달 — 브리지 조회·아티팩트 선택</p></figcaption></figure>
3. 반입 모드를 선택합니다.
   * **카나리**: 기존 배포를 유지한 채 새 리비전을 병렬 배치합니다. **대표 배포가 있어야** 선택할 수 있습니다(없으면 "카나리 반입은 대표 배포가 있어야 합니다" 에러 — 최초 반입은 즉시 교체로 진행).
   * **즉시 교체**: 대상을 곧바로 덮어씁니다. `즉시 교체(재배포)` 체크를 켜면 배포 중 워크플로우를 반입 직후 최신 리비전으로 재배포합니다(파드 교체·짧은 순단). 켜지 않으면 Flowise 그래프만 즉시 반영되고, 스텝 구성·Python 코드·실행 스펙 변경분은 **다음 재배포 때** 반영됩니다 — 그래프만 바뀐 반입에서만 체크를 끄는 것을 권장합니다.
4. 외부 결재번호·리소스 매핑을 입력하고 `[반입 신청]`을 클릭합니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-f6c5f028eac2442fe7bb403e52a04b7df3f7cf1b%2Fwfpromo_u13_inbound_modal_ready.png?alt=media" alt="반입 모달 — 제출 준비"><figcaption><p>반입 모달 — 제출 준비</p></figcaption></figure>
5. 반입도 결재를 거칩니다 — `[운영 > 승인]`에서 상세 유형 `워크플로우 반입` 건을 검토·승인합니다. 검토 모달에 반입 모드·체크섬·외부 결재번호가 표시되므로, **체크섬이 개발망 결재 때의 값과 같은지**로 변조 여부를 확인합니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-f3c603fda5742b4d6e86ebc1d62fd71b858e2815%2Fwfpromo_u14_inbound_review.png?alt=media" alt="반입 검토 모달"><figcaption><p>반입 검토 모달</p></figcaption></figure>
6. 승인되면 반입이 적용되어 새 리비전이 생성됩니다. 반입 이력은 워크플로우 이관 반입 화면에서 상태(반입됨/실패/반려/폐기)·스텝 구성·체크섬·오류 로그와 함께 조회됩니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-9f182521a6c3a6a42b7e2271e945d1fb65b7ed39%2Fwfpromo_u15_inbound_admin_list.png?alt=media" alt="워크플로우 이관 반입 화면 — 반입 이력"><figcaption><p>워크플로우 이관 반입 화면 — 반입 이력</p></figcaption></figure>
7. **최초 반입 후**: 상세에서 `[배포]`를 실행해 대표 배포를 만들어 둡니다. 이후의 반입부터 카나리 모드를 사용할 수 있습니다.

**자동승인 사이트** — `workflow_inbound_auto_approval`이 켜진 사이트는 5의 결재 없이 무인 승인·적용되며, 이관 이력에 `● 자동승인` 배지가 붙습니다. 다음의 경우 자동승인이 차단되고(`● 자동승인 차단` 배지 + 사유 툴팁) 사람 결재 대기로 전환됩니다 — ① 아티팩트에서 시크릿 의심 값(토큰·비밀번호 형태) 탐지 ② 유효한 외부 결재번호 부재(자동승인 사이트에서는 사실상 필수) ③ 이관 실행 잠금 중.

<figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-347074d248faecc69c71045106922ee5784934bb%2Fwfpromo_u16_auto_approval_badge.png?alt=media" alt="자동승인 배지"><figcaption><p>자동승인 배지</p></figcaption></figure>

## 5. 카나리 검증과 전면 적용 (운영망)

카나리 모드로 반입하면 이관 이력 탭 상단 `카나리 배포` 패널에 진행 중인 카나리가 표시됩니다. 초기 트래픽 비율은 0%입니다.

1. **비율 변경도 결재를 거칩니다** — 패널에서 비율(0\~99%)을 신청하면 `[운영 > 승인]`에 `카나리 비율 변경` 건이 생성되고, 승인될 때에만 반영됩니다(대기 중에는 `결재 대기` 표시·버튼 비활성, 반려 시 무변경).

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-2e0ca8bbef09ac04e9b8b03c1a2854d89cff4f18%2Fwfpromo_u17_canary_panel.png?alt=media" alt="카나리 배포 패널"><figcaption><p>카나리 배포 패널</p></figcaption></figure>
2. 비율 0%에서도 카나리를 검증할 수 있습니다 — 패널의 `[카나리 테스트]`로 동일 입력을 대표(A)·카나리(B) 양쪽에 보내 응답을 나란히 비교하거나, API 호출에 강제 헤더 `X-Genos-Canary-Rev: <카나리 리비전 번호>`를 붙여 카나리로만 라우팅할 수 있습니다.

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-924c16c3312cd96aea52a995d71ae69234c7ed1e%2Fwfpromo_u18_ab_test_modal.png?alt=media" alt="카나리 테스트 — A/B 비교 모달"><figcaption><p>카나리 테스트 — A/B 비교 모달</p></figcaption></figure>

   <figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-d5b7b1eddca7d712aeba66e44aa262a9741f48d5%2Fwfpromo_u19_ab_test_results.png?alt=media" alt="카나리 테스트 — 비교 결과"><figcaption><p>카나리 테스트 — 비교 결과</p></figcaption></figure>
3. 검증이 끝나면 패널의 `[전면 전환]`으로 카나리 리비전을 대표로 승격합니다 — 트래픽이 카나리로 먼저 전환된 뒤 대표가 재배포되고 카나리 파드는 정리됩니다. 반대로 `[원복]`은 카나리 파드와 가중치만 제거하고 **대표는 재시작 없이 그대로 유지**합니다. 원복 후에도 반입 리비전은 리비전 이력에 남아 있어 언제든 다시 카나리를 시작할 수 있습니다.

## 6. 운영 안전장치

**편집 잠금** — 운영 사이트에서 `GENOS_WORKFLOW_EDIT_LOCK`이 켜지면 전용 엔진을 보유한 워크플로우의 `[수정]` 버튼이 비활성 표시되고, 클릭 시 "변경은 재반입 절차로" 안내 토스트가 표시됩니다. 캔버스 편집 API도 서버에서 거부됩니다(05020057) — 운영 형상 변경을 반드시 이관 절차로 통제하는 장치입니다.

<figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-3e5da00f92945db4ac622074c65421680288a8d1%2Fwfpromo_u20_edit_lock_tooltip.png?alt=media" alt="편집 잠금 — 비활성·안내 토스트"><figcaption><p>편집 잠금 — 비활성·안내 토스트</p></figcaption></figure>

**재반입** — 편집 잠금 사이트에서 운영 워크플로우를 이전 반입 시점으로 되돌리거나 재적용해야 할 때는, 리비전 이력의 `[재반입]`으로 보관된 아티팩트를 다시 적용합니다. 브리지 조회·PAT 없이 진행되며, 일반 반입과 동일하게 결재를 거칩니다.

**실행 잠금** — 점검 등으로 이관 실행을 일시 차단해야 할 때 `promotion_execution_locked`를 켜면 이관 신청·반입(신청/결재/재반입/전면 전환/원복)·카나리 비율 변경이 모두 명시 거부됩니다(05020059). 화면 버튼과 API가 동일하게 잠깁니다.

**드리프트 알림** — 운영 DB의 워크플로우 정의가 반입 아티팩트와 달라지면(증거사슬 밖 편집) 시스템 관리자에게 `운영 정합` 알림이 발송됩니다.

**아티팩트 보관 정리** — 종결된 이관 건의 아티팩트 본문은 보관 세대를 초과하면 정리됩니다(행·체크섬·결재번호는 보존). 정리된 건은 `[다운로드]`가 비활성화되고 사유 툴팁이 표시됩니다.

<figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-0bebca17ba48556b7b690ed2d9e54085cb1aa471%2Fwfpromo_u21_retention_download_disabled.png?alt=media" alt="보관 정리된 건 — 다운로드 비활성"><figcaption><p>보관 정리된 건 — 다운로드 비활성</p></figcaption></figure>

**전용 엔진 HA** — 전용 워크플로우의 고가용성(워커 수·오토스케일)은 `[컨테이너 상태]` 탭의 `실행 확장 (HA)` 카드에서 설정합니다. 리비전 정보 탭에는 읽기 전용 요약만 표시됩니다.

<figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-c632d962ed3ee869fc44931cce1dd41e18457760%2Fwfpromo_u22_ha_card.png?alt=media" alt="컨테이너 상태 탭 — HA 카드"><figcaption><p>컨테이너 상태 탭 — HA 카드</p></figcaption></figure>

## 주의사항·자주 묻는 질문

* **공용 워크플로우는 반출할 수 없습니다.** 먼저 전용 승격을 완료하세요.
* **최초 반입은 즉시 교체로.** 카나리는 대표 배포가 있는 대상에서만 가능합니다 — 최초 반입 후 `[배포]`로 대표를 만들면 이후부터 카나리를 쓸 수 있습니다.
* **반입은 항상 새 리비전을 만듭니다.** 기존 리비전이 사라지지 않으므로 리비전 이력에서 이전 상태를 확인할 수 있습니다.
* **체크섬이 다르면 진행하지 마세요.** 개발망 결재 모달·이관 이력·운영망 반입 검토 모달의 체크섬이 모두 같아야 정상입니다.
* **운영망 대상 이름 불일치** — 반입 화면이 대상을 이름으로 식별하므로, 반출 신청의 "운영망 대상 워크플로우 이름"과 운영망 워크플로우 이름이 정확히 일치해야 합니다. 불일치 건은 관리자용 반입 화면에서 확인할 수 있습니다.
* **카나리 비율이 안 바뀌어요** — 비율 변경은 신청 즉시가 아니라 `[운영 > 승인]`에서 승인된 때에 반영됩니다.
* 파이프라인(CI/CD) 기반 무인 반입 — 관리자 화면 없이 레지스트리 번들과 작업지시서로 반입을 자동화하는 경로는 운영 조직용 구성으로 별도 제공됩니다(본 매뉴얼 범위 밖).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://genos-docs.gitbook.io/default/v1.9.3/basic-tutorials/guides/workflow/promotion.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
