# 다중 에코시스템 업데이트

다중 에코시스템 업데이트는 여러 패키지 에코시스템의 종속성 업데이트를 단일 끌어오기 요청으로 결합하여 검토 오버헤드를 줄이고 업데이트 워크플로를 간소화합니다.

## 다중 에코시스템 업데이트란?

다중 에코시스템 업데이트를 사용하면 npm, Docker, Python 및 Terraform과 같은 다양한 패키지 에코시스템에서 종속성 업데이트를 그룹당 단일 끌어오기 요청으로 그룹화할 수 Dependabot 있습니다.

각 에코시스템에 대해 별도의 끌어오기 요청을 받는 대신 해당 그룹의 에코시스템에 대한 모든 업데이트를 포함하는 하나의 통합된 끌어오기 요청을 받게 됩니다.

## 다중 에코시스템 업데이트 작동 방식

다중 에코시스템 그룹을 구성하는 경우:

1. 파일의 `multi-ecosystem-groups` 섹션에서 `dependabot.yml` 일정을 사용하여 그룹을 정의합니다.
2. 키를 사용하여 그룹에 개별 패키지 에코시스템을 할당합니다 `multi-ecosystem-group` .
3. 각 에코시스템에 대해 `patterns` 키를 사용하여 포함할 종속성을 지정합니다.
4. Dependabot 는 그룹의 일정에 따라 업데이트를 확인합니다.
5. 그룹의 모든 에코시스템에서 업데이트를 포함하는 단일 끌어오기 요청이 생성됩니다.
6. PR은 분기 이름과 제목 모두에서 그룹 식별자를 사용합니다.

## 다중 에코시스템 업데이트를 사용하는 경우

다중 에코시스템 업데이트는 다음 작업에 특히 유용합니다.

* 여러 기술을 사용하는 **인프라 프로젝트**(Docker, Terraform, Python 스크립트)
* 함께 업데이트해야 하는 프런트 엔드 및 백 엔드 종속성이 있는 **전체 스택 애플리케이션**
* 언어 간에 동기화된 프로토콜 버전이 필요한 **플랫폼 간 라이브러리**
* 다양한 언어의 서비스가 버전 관리를 공유하는 **Monorepos**

## 다중 에코시스템 및 단일 에코시스템 그룹

Dependabot 에서는 다음 두 가지 유형의 그룹화가 지원됩니다.

**다중 에코시스템 그룹:**

* 파일의 여러 `package-ecosystem` 항목에 `dependabot.yml` 파일을 걸쳐 확장하세요.
* `patterns` 포함할 종속성을 지정하려면 키가 필요합니다.
* `multi-ecosystem-groups` 섹션에 고유한 일정을 정의합니다.
* 키를 `multi-ecosystem-group` 사용하여 그룹에 에코시스템 할당

**단일 에코시스템 그룹:**

* 하나의 패키지 에코시스템 내에서 작업
* `groups` 항목 내에서 `updates` 키 사용
* 부모 `updates` 항목에서 일정 상속
* 단일 패키지 관리자 내에서 종속성을 구성하는 데 더 적합합니다.

여러 패키지 관리자 간에 업데이트를 결합하려는 경우 다중 에코시스템 그룹을 사용합니다. 단일 패키지 관리자 내에서 종속성을 구성하려는 경우 단일 에코시스템 그룹을 사용합니다(예: 모든 AWS 관련 npm 패키지 그룹화).

### 구성 병합 동작

일부 구성 옵션은 그룹 수준 및 에코시스템 수준에서 설정할 수 있습니다.
Dependabot 옵션에 따라 이러한 값을 다르게 결합합니다.

**추가 옵션** (값이 병합됨):

* `assignees` - 두 수준의 모든 담당자가 끌어오기 요청에 할당됩니다.
* `labels` - 두 수준의 모든 레이블이 끌어오기 요청에 적용됩니다.

예를 들어 `@platform-team`을 그룹 수준에 할당하고 `@docker-admin`을 Docker 에코시스템 수준에 할당하는 경우, 결과적으로 생성되는 풀 리퀘스트는 `@platform-team` 및 `@docker-admin` 모두에 할당됩니다.

**그룹 전용 옵션** (그룹 수준에서만 설정할 수 있음):

* `milestone`
* `commit-message`
* `target-branch`
* `pull-request-branch-name`

에코시스템 수준에서 이러한 옵션을 설정하려고 하면 구성 오류가 발생합니다.

사용 가능한 모든 구성 옵션 및 해당 동작에 대한 전체 참조는 [Dependabot 옵션 참조](/ko/code-security/reference/supply-chain-security/dependabot-options-reference#multi-ecosystem-groups-)을 참조하세요.

## 사용 사례

### 인프라 프로젝트

인프라 코드는 Docker 컨테이너, 클라우드 리소스용 Terraform 및 자동화를 위한 Python 스크립트와 같은 여러 기술을 사용하는 경우가 많습니다. 이러한 업데이트를 함께 그룹화하면 검토 및 배포 조정이 간소화됩니다.

**이러한 그룹을 함께 그룹화해야 하는 이유:** 인프라 변경 내용을 함께 배포해야 하는 경우가 많습니다. 각 기술에 대해 별도의 PR이 있으면 조정 오버헤드가 발생하며 단위로 배포해야 하는 사항을 추적하기가 더 어려워집니다.

**예제 시나리오:** 서비스에 대한 Docker 이미지, AWS 리소스용 Terraform 모듈 및 자동화 작업을 위한 Python 스크립트가 있습니다. 단일 주간 "인프라" 끌어오기 요청에는 세 가지 모두에 대한 업데이트가 포함되어 있어 인프라 변경 내용을 더 쉽게 검토하고 배포할 수 있습니다.

### 풀 스택 애플리케이션

프런트 엔드 및 백 엔드 구성 요소가 있는 웹 애플리케이션은 호환성을 보장하고 테스트를 간소화하기 위해 종속성을 함께 업데이트하는 이점을 누릴 수 있습니다.

**이러한 그룹을 함께 그룹화해야 하는 이유:** 프런트 엔드와 백 엔드는 종종 서로 의존합니다. 함께 업데이트하면 프런트 엔드 변경 내용을 병합한 다음 나중에 백 엔드 비호환성을 검색하는 대신 한 번으로 전체 애플리케이션 스택을 테스트할 수 있습니다.

**예제 시나리오:** React 프런트 엔드 및 Rails 백 엔드는 단일 "앱 종속성" 끌어오기 요청으로 매일 업데이트되므로 병합하기 전에 전체 애플리케이션을 함께 테스트할 수 있습니다.

### 플랫폼 간 라이브러리

여러 언어(예: gRPC 및 프로토콜 버퍼)에서 동일한 프로토콜을 사용하는 라이브러리 또는 서비스는 모든 구현에서 라이브러리 버전을 동기화된 상태로 유지해야 합니다.

**이러한 그룹을 함께 그룹화해야 하는 이유:** 프로토콜 라이브러리는 다양한 언어 구현에서 호환성을 유지해야 합니다. 함께 업데이트하면 서비스 간에 통신 오류가 발생할 수 있는 버전 불일치를 방지할 수 있습니다.

**예제 시나리오:** Node.js 및 Ruby 서비스는 모두 gRPC를 사용합니다. 단일 끌어오기 요청은 `@grpc/grpc-js` (npm) 및 `grpc` (번들러)를 함께 업데이트하여 프로토콜 호환성을 보장합니다.

### 여러 서비스를 사용하는 Monorepos

여러 언어로 된 여러 서비스를 포함하는 대규모 리포지토리는 팀 책임 또는 배포 주기별로 업데이트를 그룹화하면 도움이 됩니다.

**이러한 그룹을 함께 그룹화해야 하는 이유:** 다른 팀은 모노레포의 서로 다른 부분을 소유하고 있으며, 업데이트를 적절한 검토자에게 라우팅해야 합니다. 또는 서비스가 함께 배포되고 조정된 업데이트가 필요합니다.

**예제 시나리오:** monorepo에는 Python API 서비스, Go 작업자 서비스 및 Node.js 프런트 엔드가 있습니다. "백 엔드 서비스"(Python + Go) 및 "프런트 엔드"(Node.js)에 대해 각각 다른 일정과 담당자를 사용하여 별도의 그룹을 만듭니다.

## 예: 복잡한 다중 그룹 구성

이 예제에서는 복잡한 프로젝트에서 다양한 업데이트 전략을 사용하여 여러 그룹을 사용하는 방법을 보여 드립니다.

```yaml copy
version: 2

multi-ecosystem-groups:
  # Infrastructure updates - weekly, tracked in milestone
  infrastructure:
    schedule:
      interval: "weekly"
    assignees: ["@platform-team"]
    labels: ["infrastructure", "dependencies"]
    milestone: 10

  # Application code updates - daily, with development team
  full-stack:
    schedule:
      interval: "daily"
    assignees: ["@full-stack-team"]
    labels: ["full-stack"]

updates:
  # Docker images - infrastructure group with additional docker expertise
  - package-ecosystem: "docker"
    directory: "/"
    patterns: ["nginx", "redis", "postgres"]
    assignees: ["@docker-admin"]      # Adds to @platform-team
    labels: ["docker"]                 # Adds to infrastructure, dependencies
    multi-ecosystem-group: "infrastructure"

  # Terraform - infrastructure group
  - package-ecosystem: "terraform"
    directory: "/"
    patterns: ["aws", "terraform-*"]
    multi-ecosystem-group: "infrastructure"

  # Frontend - full-stack group with frontend focus
  - package-ecosystem: "npm"
    directory: "/frontend"
    patterns: ["react", "lodash", "@types/*"]
    labels: ["frontend"]               # Adds to full-stack
    multi-ecosystem-group: "full-stack"

  # Backend - full-stack group with backend specialist
  - package-ecosystem: "bundler"
    directory: "/backend"
    patterns: ["rails", "pg", "sidekiq"]
    assignees: ["@backend-dev"]        # Adds to @full-stack-team
    multi-ecosystem-group: "full-stack"
```

## 다음 단계

* [Dependabot에 대한 다중 에코시스템 업데이트 구성](/ko/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-multi-ecosystem-updates)