Dependabot 길들이기: 업데이트를 그룹화하고, 주기를 늦추되, 보안 업데이트는 신속하게 (새 탭에서 열림)
활성 저장소에서는 Dependabot이 의존성마다 개별 PR을 생성해 알림, 리뷰, CI 실행을 과도하게 늘릴 수 있다. 글은 Microsoft GCToolkit 사례를 통해 의존성 업데이트를 생태계별로 그룹화하고 주기를 월간으로 늦추면 유지보수 소음을 크게 줄일 수 있다고 설명한다. 다만 일반 버전 업데이트와 달리 보안 업데이트는 신속하게 처리되므로, 업데이트 빈도를 낮춰도 보안 대응 속도는 유지할 수 있다.
Dependabot이 만드는 유지보수 소음
- GCToolkit의 578개 커밋 중 92개가 Dependabot 버전 업데이트였으며, 최근 12개월에만 61개가 발생했다.
- 기존 설정은 다음과 같았다.
- GitHub Actions만 감시
- 매일 업데이트 확인
- 최대 10개의 PR 허용
- 의존성 10개가 업데이트되면 PR 10개, CI 실행 10회, 리뷰 알림 10건이 발생한다.
open-pull-requests-limit: 10은 PR 수를 제한할 뿐, 업데이트가 쏟아지는 원인을 해결하지 못한다.
여러 업데이트를 하나의 PR로 그룹화
groups와patterns: ["*"]를 사용하면 모든 의존성 업데이트를 하나의 PR로 묶을 수 있다.- 예를 들어 10개의 업데이트가 발생해도 다음처럼 처리된다.
- 브랜치 1개
- PR 1개
- CI 실행 1회
- 리뷰 및 병합 1회
- 그룹 이름은 자유롭게 정할 수 있으며 PR 제목과 브랜치 이름에 표시된다.
- 규모가 큰 프로젝트에서는 테스트 라이브러리, 운영 의존성 등 목적별로 여러 그룹을 만들 수 있다.
- 모노레포에서는
directories와group-by: dependency-name을 사용해 여러 디렉터리에 같은 의존성이 있을 때 하나의 PR로 통합할 수 있다.
- package-ecosystem: "npm"
directories:
- "/apps/*"
schedule:
interval: "monthly"
groups:
monthly-batch:
group-by: dependency-name
patterns:
- "*"
업데이트 주기를 일간에서 월간으로 변경
interval: daily는 평일마다 업데이트를 확인하므로 지속적인 PR 생성으로 이어질 수 있다.interval: monthly로 바꾸면 계획 가능한 월간 배치 방식으로 전환된다.- 그룹화와 결합하면 생태계별로 한 달에 하나의 일괄 PR을 받게 된다.
- 프로젝트 특성에 따라
weekly를 선택할 수도 있고,schedule.day와schedule.time으로 실행 시점을 지정할 수 있다. - 의존성이 안정적인 성숙한 라이브러리에는 월간 주기가 적합하다.
실제 사용하는 생태계를 모두 설정
- 기존 설정은 GitHub Actions만 대상으로 했지만, GCToolkit은 Maven 기반 Java 프로젝트이므로 Maven 의존성도 별도로 등록해야 했다.
- 생태계마다
updates항목을 추가해야 한다.
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
groups:
monthly-batch:
patterns:
- "*"
- package-ecosystem: "maven"
directory: "/"
schedule:
interval: "monthly"
groups:
monthly-batch:
patterns:
- "*"
- GitHub Actions와 Maven 업데이트는 각각 독립된 그룹과 일정으로 관리된다.
- 소음을 줄이는 것뿐 아니라, 실제 애플리케이션 의존성까지 Dependabot이 감시하도록 만드는 것이 중요하다.
보안 업데이트는 빠르게 유지
- 월간 일정과 그룹 설정은 일반적인 버전 업데이트의 처리 방식을 조정하는 설정이다.
- Dependabot 보안 업데이트는 별도의 메커니즘으로 동작하므로, 일반 업데이트 주기를 늦춰도 보안 취약점 대응까지 월간으로 미뤄지지 않는다.
- 따라서 평상시에는 일괄 업데이트로 리뷰 부담을 줄이고, 보안 수정은 기존처럼 신속하게 처리하는 균형을 유지할 수 있다.
실용적인 적용 방법
- 안정적인 저장소라면 생태계별로
monthly일정과 전체 의존성 그룹화를 적용한다. - 업데이트가 자주 필요하거나 변경 영향이 큰 프로젝트는
weekly또는 목적별 다중 그룹을 사용한다. - GitHub Actions뿐 아니라 Maven, npm 등 실제 사용하는 모든 패키지 생태계를
dependabot.yml에 등록한다. - 보안 업데이트 설정은 별도로 확인해 취약점 수정이 지연되지 않는지 점검한다.