Dependabot PR 처리를 위한 SOP(Standard Operating Procedure)

2025-02-03 hit count image

Monorepo 환경에서 Dependabot이 생성한 PR을 효율적으로 처리하기 위한 리스크 분류 기준과 처리 방법에 대해서 알아봅니다.

github_actions

개요

Monorepo 환경에서 개발을 하다 보면 많은 의존성 라이브러리를 관리해야 합니다. 이때, GitHub의 Dependabot을 사용하면 의존성 라이브러리의 업데이트를 자동으로 감지하고 PR을 생성할 수 있습니다.

하지만 Dependabot이 생성하는 PR이 많아지면 어떤 PR을 우선적으로 처리해야 하는지, 어떤 테스트를 수행해야 하는지 판단하기 어려워집니다.

이번 블로그 포스트에서는 Dependabot이 생성한 PR을 효율적으로 처리하기 위한 표준 운영 절차(SOP: Standard Operating Procedure) 에 대해서 알아보겠습니다.

PR 분류

기본 분류 기준

Dependabot PR을 처리하기 위해서는 먼저 해당 라이브러리의 리스크 수준을 파악해야 합니다. 다음 표를 참고하여 라이브러리의 리스크 수준을 분류할 수 있습니다.

기준고위험(High Risk)중위험(Medium Risk)저위험(Low Risk)
프로덕션(런타임)O (런타임)△ (일부 런타임 영향)X (devDependency)
영향 범위모든 앱특정 기능/앱개발 환경만
문제 감지수동 테스트 필요CI에서 일부 감지 가능CI에서 전부 감지 가능
사용자 영향직접간접없음

버전별 리스크 조정

라이브러리의 카테고리와 업데이트될 버전의 유형에 따라 리스크를 조정할 수 있습니다.

라이브러리의 카테고리MajorMinorPatch
고위험(react 등)🔴 고🟡 중🟡 중
중위험 런타임(axios 등)🟡 중🟡 중🟢 저
중위험 CI 감지 가능(vite 등)🟡 중🟢 저🟢 저
저위험 런타임(lodash 등)🟡 중🟢 저🟢 저
저위험 개발 도구(@types 등)🟢 저🟢 저🟢 저

분류 플로우차트

기본 분류 기준과 버전별 리스크 조정을 사용하여 다음과 같이 플로우차트를 만들 수 있습니다. 이 플로우차를 사용하면 새로운 라이브러리를 추가하거나 Dependabot PR을 검토할 때, 쉽게 분류할 수 있습니다.

새로운 라이브러리 추가


┌───────────────────────────────────┐
│ 1. 프로덕션 환경(런타임)에서 사용? │
└───────────────────────────────────┘

    ┌───┴───┐
    │       │
   Yes      No → 저위험(개발 도구)


┌───────────────────────────────────┐
│ 2. 모든 앱에 영향?                │
└───────────────────────────────────┘

    ┌───┴───┐
    │       │
   Yes      No → 영향 범위 확인
    │            │
    │            ▼
    │       특정 앱만 → 중위험(런타임)
    │                   또는
    │                   저위험(런타임)

┌───────────────────────────────────┐
│ 3. CI에서 문제 감지 가능?         │
└───────────────────────────────────┘

    ┌───┴───┐
    │       │
   Yes      No → 고위험


중위험(CI 감지 가능)

고위험(High Risk)

고위험 라이브러리는 다음과 같은 특징을 가집니다.

  • 프로덕션(런타임)에 직접 영향
  • 모든 앱에 영향
  • 수동 테스트 필요

대상 라이브러리

라이브러리버전설명영향
reactMajorUI 프레임워크 코어모든 앱에 영향
react-domMajorReact DOM 렌더러모든 앱에 영향
@reduxjs/toolkitMajor상태 관리 코어API 변경 시 모든 앱에 영향
react-reduxMajorRedux 바인딩모든 앱의 상태 관리에 영향
react-router-domMajor라우팅 시스템모든 앱의 네비게이션에 영향

처리 방법

  1. CI 통과 확인(전체 테스트 실행)
  2. CHANGELOG, Breaking Changes 확인
  3. 마이그레이션 가이드 확인(해당하는 경우)
  4. 모든 앱 테스트와 팀 멤버 리뷰

중위험(Medium Risk)

중위험 라이브러리는 다음과 같은 특징을 가집니다.

  • 프로덕션(런타임) 부분적 영향
  • 빌드(CI)에서 감지 가능

대상 라이브러리

고위험 라이브러리의 Minor, Patch 업데이트

라이브러리버전설명영향
reactMinor, PatchUI 프레임워크 코어모든 앱에 영향
react-domMinor, PatchReact DOM 렌더러모든 앱에 영향
@reduxjs/toolkitMinor, Patch상태 관리 코어API 변경 시 모든 앱에 영향
react-reduxMinor, PatchRedux 바인딩모든 앱의 상태 관리에 영향
react-router-domMinor, Patch라우팅 시스템모든 앱의 네비게이션에 영향

CI 감지 가능(빌드/테스트/린트)의 Major 업데이트

라이브러리버전설명영향
viteMajor빌드 도구전체 앱 빌드
typescriptMajor타입 시스템전체 앱 빌드
@vitejs/plugin-reactMajorVite React 플러그인전체 앱 빌드
turboMajor모노레포 빌드 도구CI/CD
jestMajor테스트 프레임워크전체 앱 테스트
vitestMajor테스트 프레임워크전체 앱 테스트
@playwright/testMajorE2E 테스트E2E 테스트
eslintMajor린터코드 품질 체크
@typescript-eslint/*MajorTypeScript ESLint코드 품질 체크
storybookMajor컴포넌트 문서components 패키지
@storybook/*MajorStorybook 관련components 패키지

런타임 영향의 Major, Minor 업데이트

라이브러리버전설명영향
axiosMajor, MinorHTTP 클라이언트전체 앱의 API 호출
i18nextMajor, Minor다국어 지원전체 앱의 다국어 지원 부분
react-i18nextMajor, MinorReact i18n 바인딩전체 앱의 다국어 지원 부분
konvaMajor, MinorCanvas 라이브러리특정 앱만
react-konvaMajor, MinorKonva React 바인딩특정 앱만
rechartsMajor, Minor차트 라이브러리특정 앱만

저위험 런타임 유틸리티의 Major 업데이트

라이브러리버전설명영향
lodashMajor유틸리티프로덕션에서 사용
js-cookieMajorCookie 유틸리티프로덕션에서 사용
date-fnsMajor날짜 유틸리티프로덕션에서 사용
clsxMajor클래스명 유틸리티프로덕션에서 사용
react-ga4MajorGoogle Analytics일부 앱만
qrcode.reactMajorQR 코드 생성특정 앱만
react-hotkeys-hookMajor단축키특정 앱만
papaparseMajorCSV 파싱components만

처리 방법

  1. CI 통과 확인(전체 테스트 실행 / 특정 앱 테스트 실행)
  2. CHANGELOG 확인
  3. 영향받는 앱 테스트와 팀 멤버 리뷰

yarn why <package> 명령으로 영향받는 앱을 확인할 수 있습니다.

저위험(Low Risk)

저위험 라이브러리는 다음과 같은 특징을 가집니다.

  • 개발 도구
  • CI에서 직접 감지
  • 사용자에게 영향 없음

대상 라이브러리

CI 감지 가능(빌드/테스트/린트)의 Minor, Patch 업데이트

라이브러리버전설명영향
viteMinor, Patch빌드 도구전체 앱 빌드
typescriptMinor, Patch타입 시스템전체 앱 빌드
@vitejs/plugin-reactMinor, PatchVite React 플러그인전체 앱 빌드
turboMinor, Patch모노레포 빌드 도구CI/CD
jestMinor, Patch테스트 프레임워크전체 앱 테스트
vitestMinor, Patch테스트 프레임워크전체 앱 테스트
@playwright/testMinor, PatchE2E 테스트E2E 테스트
eslintMinor, Patch린터코드 품질 체크
@typescript-eslint/*Minor, PatchTypeScript ESLint코드 품질 체크
storybookMinor, Patch컴포넌트 문서components 패키지
@storybook/*Minor, PatchStorybook 관련components 패키지

런타임 영향의 Patch 업데이트

라이브러리버전설명영향
axiosPatchHTTP 클라이언트전체 앱의 API 호출
i18nextPatch다국어 지원전체 앱의 다국어 지원 부분
react-i18nextPatchReact i18n 바인딩전체 앱의 다국어 지원 부분
konvaPatchCanvas 라이브러리특정 앱만
react-konvaPatchKonva React 바인딩특정 앱만
rechartsPatch차트 라이브러리특정 앱만

순수 개발 도구(전체 버전)

라이브러리버전설명영향
@types/*Major, Minor, Patch타입 정의개발 환경만
prettierMajor, Minor, Patch코드 포매터개발 환경만
stylelintMajor, Minor, Patch스타일 린터개발 환경만
eslint-config-*Major, Minor, PatchESLint 설정개발 환경만
eslint-plugin-*Major, Minor, PatchESLint 플러그인개발 환경만
@testing-library/*Major, Minor, Patch테스트 유틸리티테스트 환경만
ts-jestMajor, Minor, PatchJest TypeScript 지원테스트 환경만
@vitest/uiMajor, Minor, PatchVitest UI테스트 환경만
sassMajor, Minor, PatchSCSS 컴파일러빌드 환경만
huskyMajor, Minor, PatchGit Hook개발 환경만
lint-stagedMajor, Minor, Patch스테이지 파일 린트개발 환경만
remark-*Major, Minor, PatchMarkdown 린트개발 환경만
cspellMajor, Minor, Patch스펠 체크개발 환경만
chromaticMajor, Minor, Patch비주얼 테스트components만

저위험 런타임 유틸리티의 Minor, Patch 업데이트

라이브러리버전설명영향
lodashMinor, Patch유틸리티프로덕션에서 사용
js-cookieMinor, PatchCookie 유틸리티프로덕션에서 사용
date-fnsMinor, Patch날짜 유틸리티프로덕션에서 사용
clsxMinor, Patch클래스명 유틸리티프로덕션에서 사용
react-ga4Minor, PatchGoogle Analytics일부 앱만
qrcode.reactMinor, PatchQR 코드 생성특정 앱만
react-hotkeys-hookMinor, Patch단축키특정 앱만
papaparseMinor, PatchCSV 파싱components만

처리 방법

  1. CI 통과 확인
  2. 자동 할당된 멤버가 리뷰

처리 스케줄

이렇게 분류한 라이브러리의 버전 업데이트의 PR을 효율적으로 처리하기 위해 다음과 같은 주간 스케줄을 만들 수 있습니다.

요일작업
월요일Dependabot PR 확인 및 담당자 배정
화요일~수요일저위험/중위험 PR 머지
목요일~금요일고위험 PR 검토 및 테스트

이 부분은 팀의 상황에 맞게 조정할 수 있습니다.

우선순위 가이드라인

기본적으로 모든 PR을 빠르게 처리하는게 좋지만, 리소스가 부족한 경우 우선순위를 정할 필요가 있습니다. 예를 들어 다음과 같은 가이드라인을 사용하여, 우선순위를 정할 수 있습니다.

  • Patch: 5개 이상 누적 시 처리(보안 취약점은 즉시 처리)
  • Minor: 2개 이상 누적 시 처리(보안 취약점은 즉시 처리)
  • Major: 팀 논의 후 처리

완료

이것으로 Dependabot PR을 효율적으로 처리하기 위한 리스크 분류 기준에 대해서 알아보았습니다.

다음 포스트에서는 이 분류 기준을 바탕으로 Dependabot 설정과 GitHub Actions를 사용한 자동화 방법에 대해서 알아보겠습니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.



SHARE
Twitter Facebook RSS