# 코드 서빙 이관

코드 서빙은 개발망에서 작성·검증한 코드를 운영망으로 반영하는 과정을 거쳐 실제 서비스에 활용됩니다. 두 망은 보안 정책에 따라 분리되어 있어, 개발망에서 작성한 코드를 운영망(또는 검증망)에서 사용하려면 **외부 Git 저장소를 매개로 한 이관 절차**가 필요합니다.

이관은 **신청자가 지정한 외부 Git 저장소로 코드를 푸시(Push)** 하고, 운영망이 동일 저장소에서 코드를 풀(Pull) 하여 가져가는 방식으로 동작합니다. 이번 페이지에서는 개발망에서 작성한 코드 서빙을 운영망에 이관하는 전체 절차를 살펴보겠습니다.

***

### 1. 사전 준비

이관을 진행하려면 다음이 갖춰져 있어야 합니다.

#### 1-1. 외부 Git 저장소 준비

* 개발망과 운영망 양쪽에서 접근 가능한 외부 Git 저장소(GitHub / GitLab / Gitea / Bitbucket 등)
* 해당 저장소에 푸시 권한이 있는 계정 ID
* 계정의 **Personal Access Token (PAT)**

#### 1-2. 코드 서빙 생성 시 외부 Git 연결

코드 서빙 생성 시 \[저장소 유형]을 **외부 Git**으로 선택하고 외부 Git URL · 외부 Git ID · PAT을 등록해 두시면 됩니다. 이미 내부 Gitea로 생성된 코드 서빙은 상세 화면의 \[수정]에서 외부 Git 정보를 추가하실 수 있습니다.

#### 1-3. 운영망 코드 서빙 사전 생성

운영망에 진입해 동일한 외부 Git 저장소를 바라보는 코드 서빙을 먼저 생성해 두셔야 합니다. 이관 신청 시점에 운영망에 대상 코드 서빙이 없으면 신청은 접수되지만 운영망 반영이 누락됩니다.

***

### 2. 이관 신청

#### a. 메뉴 진입

사이드바에서 \*\*\[서빙 > 코드 서빙]\*\*으로 진입한 뒤, 이관하려는 코드 서빙의 상세 화면을 여시면 됩니다.

#### b. \[이관] 버튼 확인

코드 서빙 상세 화면 우측 상단에 \[이관] 버튼이 있습니다. 이 버튼은 다음 조건을 모두 만족할 때 활성화됩니다.

* 커밋이 1개 이상 등록되어 있을 것
* 외부 Git 정보(URL · ID · PAT)가 등록되어 검증을 통과했을 것

#### c. \[이관] 버튼 클릭

\[이관 신청] 모달이 표시됩니다.

<figure><img src="/files/0v7p90pVeyUIfAhgs7Ly" alt=""><figcaption></figcaption></figure>

#### d. 이관 정보 입력

모달에서 다음 항목을 입력하시면 됩니다.

* **커밋 해시 \***: 운영망에 반영할 커밋의 해시를 입력해 주세요. 코드 서빙 상세 > 커밋 목록 탭에서 복사하실 수 있습니다.
* **이관 사유 \***: 어떤 변경 사항을 반영하는지 작성해 주세요.&#x20;
* **태그**: 긴급·테스트·버그수정 등 이관 건을 분류할 수 있는 태그를 최대 3개까지 등록하실 수 있습니다.
* **외부 Git URL \***: 운영망이 코드를 풀(Pull) 해 갈 외부 Git 저장소 주소입니다.
* **Branch (선택)**: 푸시할 대상 브랜치명입니다. 미입력 시 저장소의 기본 브랜치(예: `main`)로 푸시됩니다.
* **외부 Git ID \***: 해당 저장소에 접근(쓰기) 권한이 있는 외부 Git 계정 ID입니다. GitHub/GitLab은 임의 값 입력도 허용되지만, Gitea/Bitbucket은 정확한 ID가 필요합니다.
* **크레덴셜 (PAT) \***: 해당 계정의 Personal Access Token을 입력해 주세요. PAT은 이관 시마다 입력하셔야 합니다.

#### e. \[검증] 버튼 클릭

외부 Git URL · ID · PAT을 모두 입력하신 뒤 \[검증] 버튼을 클릭해 인증을 확인하시면 됩니다.

* **검증 중**: 입력란이 비활성화되며 "검증 중…"이 표시됩니다.
* **성공**: "검증 되었습니다." 토스트가 노출되고 \[검증] 버튼이 \[인증 완료] 상태로 변경됩니다.
* **실패**: "검증에 실패했습니다." 토스트와 함께 입력값을 다시 확인하실 수 있습니다.

검증 후 입력값이 변경되면 검증 결과는 자동으로 무효화되어 다시 검증해 주셔야 합니다.

#### f. \[이관 신청] 버튼 클릭

확인 다이얼로그가 표시되면 \[예]를 클릭하시면 됩니다. 신청이 완료되면 화면 우측 상단에 토스트가 노출되고, 승인 권한자에게 알림이 발송됩니다.

신청 후 \[이관] 버튼은 \[이관 취소]로 전환되며, 결재가 진행되기 전까지는 이 버튼으로 신청을 취소하실 수 있습니다.

> **PAT은 저장되지 않습니다.** 보안 정책에 따라 PAT은 이관 신청 시점에만 사용되며, 검증·푸시 후 즉시 폐기됩니다. 다음 이관에는 다시 입력해 주셔야 합니다.

***

### 3. 이관 결재

승인 권한을 가진 사용자가 신청된 이관 건을 검토하고 결재합니다.

#### a. 메뉴 진입

사이드바에서 \*\*\[운영 > 승인]\*\*으로 진입하시면 됩니다. 승인 목록에서 결재 대기 중인 이관 건을 확인하실 수 있습니다.

<figure><img src="/files/PVVlhXGLwwO7al82mFlp" alt=""><figcaption></figcaption></figure>

#### b. 승인 유형 필터링

상단의 \[승인 유형] 필터에서 **이관**을 선택하시면 이관 건만 필터링되어 표시됩니다.

#### c. \[검토] 버튼 클릭

행 우측의 \[검토] 버튼을 클릭하시면 이관 신청 상세 모달이 노출됩니다.

<figure><img src="/files/Rfs717dC8v7nsH72TD1B" alt=""><figcaption></figcaption></figure>

#### d. 신청 정보 확인

모달에서 다음 정보를 확인하실 수 있습니다.

* 신청 ID · 승인 상태
* 커밋 해시 · 이관 사유 · 태그
* 외부 Git 인증 정보 (외부 Git URL · Branch · 외부 Git ID)
* 코드 서빙명 · 요청자 · 요청 일시

> 크레덴셜(PAT)은 보안 정책에 따라 표시되지 않습니다.

코드 변경 내역을 더 자세히 확인하시려면 \[코드 서빙명]을 클릭하여 신청된 코드 서빙의 상세 화면으로 이동하실 수 있습니다. 코드 스페이스에 접속해 코드를 검토하거나 커밋 목록에서 변경 내역을 확인하시면 됩니다.

#### e. \[승인] 또는 \[반려] 클릭

* **\[승인]**: 확인 후 외부 Git 저장소로 자동 푸시되며, 신청자에게 승인 알림과 완료 알림이 발송됩니다.
* **\[반려]**: 반려 사유를 입력 후 처리하시면 됩니다. 신청자에게 반려 알림(반려 사유 포함)이 발송됩니다.

***

### 4. 이관 결과 확인

#### a. 운영망 진입

운영망 GenOS에 접속하시면 됩니다.

#### b. 코드 서빙 상세 확인

사이드바 \[서빙 > 코드 서빙]에서 사전에 생성해 두신 코드 서빙의 상세 화면으로 이동하시면 됩니다.

#### c. 커밋 목록 확인

코드 서빙 상세 > **\[커밋 목록] 탭**에서 신청한 브랜치 드롭다운을 선택하시면 푸시된 커밋이 표시됩니다. 외부 Git에서 풀해 온 커밋이 정상적으로 반영되었는지 확인하실 수 있습니다.

<figure><img src="/files/aIdf624ElkJhfc2OHE01" alt=""><figcaption></figcaption></figure>

#### d. 배포

필요 시 \[배포] 버튼으로 운영 환경에 반영하시면 됩니다. 운영망 배포 시에는 **이관이 완료된 커밋만** 배포 후보로 노출됩니다.

***

### 5. 자주 묻는 질문 (FAQ)

**Q. 이관 방식 변경 이전에 신청해 둔 결재 건은 어떻게 되나요?**\
A. 운영 배포 시점에 SQL 스크립트로 일괄 반려 처리됩니다(반려 사유: "이관 방식 변경"). 알림 수신 후 새 방식으로 재신청해 주시기 바랍니다.

**Q. 운영망과 개발망이 같은 외부 Git 저장소를 사용해야 하나요?**\
A. 아니요. 같은 저장소를 공유하셔도 되고, 운영망 전용 저장소를 별도로 사용하셔도 됩니다.&#x20;

**Q. 외부 Git ID에 어떤 값을 넣어야 하나요?**\
A. 해당 저장소에 푸시 권한이 있는 계정 ID를 입력해 주세요. GitHub/GitLab은 PAT만으로 인증되지만 일관된 UX를 위해 항상 ID를 입력해 주시기 바랍니다. Gitea와 Bitbucket은 ID가 필수입니다.

**Q. PAT을 매번 입력해야 하나요?**\
A. 네. 보안 정책에 따라 PAT은 DB에 저장하지 않으며, 이관 신청 시마다 입력하시고 \[검증]을 통해 인증을 확인해 주셔야 합니다.

**Q. 브랜치를 비워두고 신청해도 되나요?**\
A. 네. 미입력 시 외부 Git 저장소의 기본 브랜치(예: `main`)로 푸시됩니다.<br>


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://genos-docs.gitbook.io/default/v1.8.6/basic-tutorials/guides/development/code_serving/migration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
