Skip to content

[Feature]: 모노레포 CI/CD: 변경 및 영향받는 패키지만 빌드/테스트/린트 실행 (Affected CI) #24

@sooster910

Description

@sooster910

🚀 기능 설명

현재 CI/CD 파이프라인이 성숙치 못한 단계입니다. 모노레포 내 모든 패키지에 대해 린트, 타입 체크, 테스트, 빌드 작업을 수행하고 있습니다. 이 기능을 통해, Git 변경 사항을 감지하여 실제로 코드가 변경된 패키지 및 해당 패키지에 직접/간접적으로 의존하는 다른 패키지들(영향받는 패키지)에 대해서만 CI/CD Job을 실행하도록 최적화하고자 합니다.

예를 들어, @henlsey-ui/react-button 패키지의 코드만 변경되었다면, validate Job (린트, 타입 체크, 테스트, 빌드)은 @henlsey-ui/react-button과 이 패키지를 사용하는 다른 패키지들(예: @henlsey-ui/web-app)에 대해서만 실행되고, 변경되지 않은 다른 패키지들(예: @henlsey-ui/react-icon)은 건너뛰게 됩니다.

🤔 해결하고자 하는 문제

이 기능은 현재 저희 CI/CD 파이프라인이 가지고 있는 다음과 같은 문제들을 해결합니다:

환경 불일치성 진단 어려움: 로컬에서는 문제가 없지만 CI/CD에서만 발생하는 문제를 진단할 때, 전체를 돌려야 하므로 특정 Job의 특정 패키지에 대한 문제에 집중하기 어렵습니다.

긴 CI/CD 실행 시간: 작은 코드 변경에도 불구하고 모든 패키지를 빌드하고 테스트하는 데 많은 시간이 소요되어, 개발자의 피드백 루프가 길어지고 생산성이 저하됩니다.

비효율적인 자원 사용 및 비용 증가: 불필요한 Job 실행은 CI/CD 서비스(GitHub Actions)의 자원을 낭비하고 운영 비용을 증가시킵니다.

느린 디버깅 주기: CI/CD 관련 문제(예: dist 폴더 누락) 발생 시, 전체 파이프라인을 다시 돌려야 하므로 문제 진단 및 해결에 시간이 오래 걸립니다.

💡 제안하는 해결책

모노레포 CI/CD 최적화: 변경 및 영향받는 패키지만 실행 (Affected CI) 요약

모노레포에서 CI/CD 파이프라인의 효율성을 높이기 위해, 코드 변경이 발생한 패키지와 그에 영향을 받는 패키지만 빌드/테스트/린트 작업을 실행하는 "Affected CI" 구현 방안을 제안합니다.

  1. pnpm --filter & GitHub Actions 액션 활용- 식별된 변경 파일 목록을 기반으로, pnpm의 --filter 옵션 사용 가능
  2. act 도구 도입- 로컬에서 몇 초/분 안에 CI/CD 파이프라인을 실행하여 즉시 결과를 확인하고 문제를 해결할 수 있습니다. (현재 평균 약 7분)
  3. Turborepo 도입 - : Turborepo는 파일 시스템의 변경 사항을 추적하고, 패키지 간의 의존성 그래프를 분석하여 실제로 변경된 패키지와 그에 영향을 받는 패키지만을 정확히 식별하여 빌드/테스트/린트 작업을 실행합니다. 변경되지 않은 패키지는 건너뜁니다.

🔄 대안

제안하는 해결책에 포함됨

📊 우선순위

높음 (Important)

🤝 기여 의향

  • 이 기능을 직접 구현하고 PR을 제출할 수 있습니다.
  • 테스트와 피드백을 제공할 수 있습니다.
  • 문서화에 도움을 줄 수 있습니다.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions