# 워크플로 구성 재사용

워크플로를 만들 때 중복을 피하는 방법을 알아봅니다.

## 재사용 가능한 워크플로

워크플로를 복사하여 다른 워크플로로 붙여넣는 대신 워크플로를 재사용할 수 있습니다. 사용자와 재사용 가능한 워크플로에 대한 액세스 권한이 있는 사용자는 다른 워크플로에서 재사용 가능한 워크플로를 호출할 수 있습니다.

워크플로를 다시 사용하면 중복을 방지할 수 있습니다. 이렇게 하면 워크플로를 더 쉽게 유지 관리할 수 있으며 작업과 마찬가지로 다른 사용자의 작업을 기반으로 하여 새 워크플로를 더 빠르게 만들 수 있습니다. 워크플로 재사용은 또한 잘 설계되고 이미 테스트되어 효과적인 것으로 입증된 워크플로를 사용할 수 있도록 지원하여 모범 사례를 촉진합니다. 조직은 중앙에서 유지 관리할 수 있는 재사용 가능한 워크플로 라이브러리를 빌드할 수 있습니다.

아래의 다이어그램은 재사용 가능한 워크플로를 사용하는 진행 중인 워크플로 실행을 보여 줍니다.

* 다이어그램의 왼쪽에 있는 세 개의 빌드 작업이 각각 성공적으로 완료되면 "배포"라는 종속 작업이 실행됩니다.
* 이 "배포" 작업은 "스테이징", "검토", "프로덕션"의 세 가지 작업이 포함된 재사용 가능한 워크플로를 호출합니다.
* “프로덕션” 배포 작업은 “스테이징” 작업이 성공적으로 완료된 후에만 실행됩니다.
* 작업이 환경을 대상으로 하는 경우, 워크플로 실행은 작업의 단계 수를 보여 주는 진행률 표시줄을 표시합니다. 아래의 다이어그램에서 "프로덕션" 작업에는 8단계가 포함되어 있으며 6단계는 현재 처리 중입니다.
* 재사용 가능한 워크플로를 사용하여 배포 작업을 실행하면 워크플로에서 코드를 복제하지 않고 각 빌드에 대해 해당 작업을 실행할 수 있습니다.

![재사용 가능한 워크플로를 호출하는 워크플로의 다이어그램입니다.](/assets/images/help/actions/reusable-workflows-ci-cd.png)

다른 워크플로를 사용하는 워크플로를 “호출자” 워크플로라고 합니다. 재사용 가능한 워크플로는 “호출된” 워크플로입니다. 한 호출자 워크플로는 여러 호출된 워크플로를 사용할 수 있습니다. 호출된 각 워크플로는 한 줄에 참조됩니다. 그 결과 호출자 워크플로 파일에는 몇 줄의 YAML만 포함될 수 있지만 실행할 때 많은 수의 작업을 수행할 수 있습니다. 워크플로를 다시 사용하면 호출자 워크플로의 일부인 것처럼 호출된 전체 워크플로가 사용됩니다.

다른 리포지토리의 워크플로를 다시 사용하는 경우 호출된 워크플로의 모든 작업은 호출자 워크플로의 일부인 것처럼 실행됩니다. 예를 들어 호출된 워크플로 `actions/checkout`을 사용하는 경우 작업은 호출된 워크플로가 아닌 호출자 워크플로를 호스트하는 리포지토리의 콘텐츠를 확인합니다.

워크플로에서 GitHub Actions 참조된 재사용된 워크플로를 워크플로가 포함된 리포지토리의 종속성 그래프에서 종속성으로 볼 수 있습니다. 자세한 내용은 "[종속성 그래프 정보](/ko/enterprise-server@3.22/code-security/concepts/supply-chain-security/dependency-graph)"를 참조하세요.

### 재사용 가능한 워크플로와 복합 작업 비교

재사용 가능한 워크플로와 복합 작업 모두 워크플로 콘텐츠가 중복되는 것을 방지하는 데 도움이 됩니다. 재사용 가능한 워크플로를 사용하면 여러 작업 및 단계를 사용하여 전체 워크플로를 재사용할 수 있지만 복합 작업은 다른 작업과 마찬가지로 작업 단계 내에서 실행할 수 있는 여러 단계를 결합합니다.

각 솔루션의 몇 가지 측면을 비교해 보겠습니다.

* **워크플로 작업** - 복합 작업에는 호출자 워크플로 내에서 단일 단계로 실행되는 일련의 단계가 포함됩니다. 재사용 가능한 워크플로와 달리 작업을 포함할 수 없습니다.
* **로깅** - 복합 작업이 실행되면 로그는 복합 작업 내의 개별 단계가 아니라 복합 작업을 실행한 호출자 워크플로의 단계만 표시합니다. 재사용 가능한 워크플로를 사용하면 모든 작업과 단계가 별도로 기록됩니다.
* **실행기 지정** - 재사용 가능한 워크플로에는 하나 이상의 작업이 포함됩니다. 모든 워크플로 작업과 마찬가지로 재사용 가능한 워크플로의 작업은 작업이 실행될 컴퓨터 유형을 지정합니다. 따라서 호출 워크플로 작업에 대해 선택한 컴퓨터와 다를 수 있는 컴퓨터 유형에서 단계를 실행해야 하는 경우 복합 작업이 아닌 재사용 가능한 워크플로를 사용해야 합니다.
* **단계에 출력 전달** - 복합 작업은 워크플로 작업 내에서 한 단계로 실행되며 복합 작업을 실행하는 단계 전후에 여러 단계를 수행할 수 있습니다. 재사용 가능한 워크플로는 작업 단계 내에서 호출되는 것이 아니라 작업 내에서 직접 호출됩니다. 재사용 가능한 워크플로를 호출한 후에는 작업에 단계를 추가할 수 없으므로 `GITHUB_ENV`를 사용하여 호출자 워크플로의 후속 작업 단계에 값을 전달할 수 없습니다.

### 재사용 가능한 워크플로와 복합 작업 간의 주요 차이점

| 재사용 가능한 워크플로                                                       | 복합 작업                                                          |
| ------------------------------------------------------------------ | -------------------------------------------------------------- |
| 모든 표준 워크플로 파일과 매우 유사한 YAML 파일                                      | 워크플로 단계 묶음을 포함하는 작업                                            |
| 재사용 가능한 각 워크플로는 리포지토리의 `.github/workflows` 디렉터리에 있는 단일 파일임         | 각 복합 작업은 별도의 리포지토리 또는 디렉터리로, `action.yml` 파일과 선택적으로 다른 파일을 포함함 |
| 특정 YAML 파일을 참조하여 호출됨                                               | 작업이 정의된 리포지토리 또는 디렉터리를 참조하여 호출됨                                |
| 단계가 아닌 작업 내에서 직접 호출됨                                               | 작업 내에서 한 단계로 실행                                                |
| 여러 작업을 포함할 수 있음                                                    | 작업이 포함되어 있지 않음                                                 |
| 각 단계는 실시간으로 기록됨                                                    | 여러 단계가 포함된 경우에도 한 단계로 기록됨                                      |
| 최대 4단계 워크플로를 연결할 수 있습니다.                                           | 하나의 워크플로에 최대 10개의 복합 작업을 포함하도록 중첩할 수 있음                        |
| 비밀을 사용할 수 있음                                                       | 비밀을 사용할 수 없음                                                   |
| [마켓플레이스에](https://github.com/marketplace?type=actions) 게시할 수 없음    |                                                                |
| [마켓플레이스에](https://github.com/marketplace?type=actions) 게시할 수 있습니다. |                                                                |

## 워크플로 템플릿

워크플로 템플릿을 사용하면 워크플로를 만들 수 있는 권한이 있는 조직의 모든 사용자가 더 빠르고 쉽게 워크플로를 만들 수 있습니다. 사용자가 새 워크플로를 만들 때 워크플로 템플릿을 선택할 수 있으며 워크플로 작성 작업의 일부 또는 전부가 해당 워크플로에 대해 수행됩니다. 워크플로 템플릿 내에서 재사용 가능한 워크플로를 참조하여 사용자가 중앙 관리형 워크플로 코드를 쉽게 재사용할 수 있도록 할 수 있습니다.

재사용 가능한 워크플로를 참조할 때 태그 또는 커밋 SHA를 사용하는 경우 해당 워크플로를 다시 사용하는 모든 사용자가 항상 동일한 YAML 코드를 사용하도록 할 수 있습니다. 그러나 태그 또는 분기로 재사용 가능한 워크플로를 참조하는 경우 해당 버전의 워크플로를 신뢰할 수 있어야 합니다. 자세한 내용은 [안전 사용 참조](/ko/enterprise-server@3.22/actions/reference/security/secure-use#reusing-third-party-workflows)을(를) 참조하세요.

GitHub 는 다양한 언어 및 도구에 대한 워크플로 템플릿을 제공합니다. 리포지토리에서 워크플로를 설정할 때 리포지 GitHub 토리의 코드를 분석하고 리포지토리의 언어 및 프레임워크에 따라 워크플로를 권장합니다. 예를 들어 Node.js사용하는 경우 Node.js GitHub 패키지를 설치하고 테스트를 실행하는 워크플로 템플릿 파일을 제안합니다. 관련 워크플로 템플릿은 검색하고 필터링하여 찾을 수 있습니다.

GitHub 에서는 다음과 같은 상위 수준 범주에 사용할 준비가 된 워크플로 템플릿을 제공합니다.

* **배포(CD)**. 자세한 내용은 [연속 배포](/ko/enterprise-server@3.22/actions/get-started/continuous-deployment)을(를) 참조하세요.

* **CI(연속 통합)**. 자세한 내용은 [연속 통합](/ko/enterprise-server@3.22/actions/get-started/continuous-integration)을(를) 참조하세요.

* **자동화.** 자동화 워크플로 템플릿은 끌어오기 요청을 심사하고 끌어오기 요청에서 수정된 경로를 기반으로 레이블을 적용하거나 리포지토리에 처음 기여하는 사용자에게 인사말을 하는 등 워크플로를 자동화하기 위한 솔루션을 제공합니다.

워크플로 템플릿을 시작 위치로 사용하여 사용자 지정 워크플로를 빌드하거나 있는 그대로 사용할 수 있습니다. [actions/starter-workflows](https://github.com/actions/starter-workflows) 리포지토리에서 워크플로 템플릿의 전체 목록을 찾아볼 수 있습니다.

자세한 내용은 [조직용 워크플로 템플릿 생성](/ko/enterprise-server@3.22/actions/how-tos/reuse-automations/create-workflow-templates)을(를) 참조하세요.

## 다음 단계

워크플로 재사용을 시작하려면 [워크플로 재사용](/ko/enterprise-server@3.22/actions/how-tos/reuse-automations/reuse-workflows)을(를) 참조하세요.

워크플로 재사용의 복잡성에 대한 정보를 찾으려면 [워크플로 구성 재사용](/ko/enterprise-server@3.22/actions/reference/workflows-and-actions/reusing-workflow-configurations)을(를) 참조하세요.