Skip to main content

다중 에코시스템 업데이트

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

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

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

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

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

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

  1. 파일의 dependabot.yml 섹션에서 multi-ecosystem-groups 일정을 사용하여 그룹을 정의합니다.
  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 사용하여 그룹에 에코시스템 할당

            **단일 에코시스템 그룹:**
    
  • 하나의 패키지 에코시스템 내에서 작업

  •         `updates` 항목 내에서 `groups` 키 사용
    
  • 부모 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 옵션 참조을 참조하세요.

사용 사례

인프라 프로젝트

인프라 코드는 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
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"

다음 단계

  •         [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-multi-ecosystem-updates)