1. 패키지 그룹 관리 방식의 근본적인 변화
Depfu는 과거 Greenkeeper의 정의를 활용하거나 내부적인 비공개 리스트를 통해 모노레포 패키지들을 그룹화해 왔습니다. 하지만 패키지 생태계의 빠른 변화에 대응하기 위해, 이러한 그룹 정의를 GitHub의 depfu/package-groups 저장소로 공개했습니다.
- 커뮤니티 참여: 이제 누구나 npm이나 Bundler(RubyGems) 환경에서 함께 업데이트되어야 하는 패키지 목록을 발견하면 Pull Request를 통해 직접 기여할 수 있습니다.
- 자동 반영: 제출된 리스트가 승인되면 Depfu 시스템에 신속하게 반영되어 모든 사용자가 혜택을 입게 됩니다.
- 적용 기준: 그룹화의 핵심 전제 조건은 해당 패키지들이 ‘동일한 버전 번호’로 ‘동시에(Lockstep)’ 배포되어야 한다는 점입니다.
2. 프라이빗 패키지 그룹 지원 (Proprietary Package Parcels)
오픈소스 외에도 기업 내부에서 운영하는 프라이빗 모노레포 패키지들에 대한 그룹화 요구가 높았습니다. Depfu는 이를 해결하기 위해 .depfu.yml 설정 파일을 통한 사용자 정의 그룹 기능을 출시했습니다.
주요 특징 및 제약 사항:
- 저장소 단위 설정: 현재는 조직(Org) 단위가 아닌 개별 저장소 수준에서 설정이 이루어집니다.
- 접근 권한: 프라이빗 레지스트리에 대한 읽기 권한이 필요하며, 권한이 없을 경우 Depfu 대시보드에서 접근 승인을 요청하는 안내가 표시됩니다.
- 우선순위: 사용자가 정의한 그룹보다 Depfu의 공용(Public) 그룹 정의가 항상 우선순위를 가집니다. 만약 공용 패키지가 누락되었다면 설정 파일에 추가하기보다 오픈소스 저장소에 기여하는 것이 권장됩니다.
3. 설정 방법 및 예시
사용자는 프로젝트 루트에 위치한 .depfu.yml 파일에 다음과 같이 패키지 그룹을 정의할 수 있습니다.
npm 설정 예시:
yaml
npm:
package_groups:
depfu_npm_support:
- "@depfu/npm-support-main"
- "@depfu/npm-support-parser"
- "@depfu/npm-support-updater"
npm의 경우 그룹 이름은 자유롭게 정할 수 있으며, 이는 PR 제목이나 브랜치 이름에 반영됩니다.
Bundler (Ruby) 설정 특이점:
Ruby의 Bundler 환경에서는 그룹의 이름이 해당 그룹의 ‘메인 패키지’ 이름과 일치해야 합니다. 예를 들어 Rails 관련 젬들을 그룹화한다면 그룹명을 rails로 지정해야 active*, action* 계열의 젬들이 올바르게 통합됩니다.
4. 도입 효과 및 기대 가치
이러한 그룹화 기능을 활용하면 다음과 같은 이점을 얻을 수 있습니다. 1. PR 노이즈 감소: 수십 개의 개별 패키지 업데이트 PR 대신, 논리적으로 연결된 하나의 통합 PR만 검토하면 됩니다. 2. 업데이트 무결성 보장: 모노레포 패키지 중 일부만 업데이트되어 발생할 수 있는 의존성 충돌이나 빌드 오류를 사전에 방지합니다. 3. 워크플로우 최적화: 프라이빗 패키지에 대한 자동화된 관리가 가능해짐에 따라 내부 라이브러리 유지보수 비용이 절감됩니다.