Turborepo 기반 Monorepo CI 파이프라인 성능 최적화 전략

🤖 AI 추천

Turborepo를 사용하는 프론트엔드 개발자, monorepo 환경을 관리하는 CI/CD 엔지니어, 빌드 및 배포 파이프라인의 성능 개선에 관심 있는 개발자에게 이 콘텐츠를 추천합니다.

🔖 주요 키워드

Turborepo 기반 Monorepo CI 파이프라인 성능 최적화 전략

핵심 기술

쏘카 FE Core팀은 monorepo 환경에서 Turborepo 기반의 CI 파이프라인 빌드 시간 단축 및 안정성 확보를 위해 Runner 사양 개선, GitHub Workflow의 Matrix 전략 도입, Turborepo의 dry-run 기능 활용 등 다양한 실질적인 개선 방안을 적용했습니다.

기술적 세부사항

  • 환경: Turborepo 기반의 monorepo, 30여 개의 독립적인 상용 프로젝트, pnpm 사용.
  • 기존 문제점:
    • pnpm-lock.yaml 잦은 변경으로 인한 의존성 관리 복잡성 증가.
    • 캐시 미적중 시 30개 이상의 Next.js 앱 전체 빌드에 평균 20분 이상 소요.
    • 여러 워크플로우 동시 실행 시 브랜치 병합 대기 시간 30분 이상 증가.
    • 빌드 시간 증가로 인한 워크플로우 중단 및 Error: The operation was canceled. 오류 빈번 발생.
  • 도입된 전략 및 개선 사항:
    • Runner 사양 상향 조정: Ubuntu Runner의 메모리 및 코어 수 증가로 평균 빌드 시간을 20분대에서 10분대로 단축.
    • GitHub Workflow Matrix 전략 도입: 각 프로젝트 빌드를 병렬로 수행하여 프로젝트별 빌드 동시 진행 및 개별 성공 여부 확인.
      • 캐시 미적중 시: 평균 빌드 시간 10m27s → 8m6s (-22.5%)
      • 캐시 적중 시: 평균 빌드 시간 1m14s → 6m57s (+463.5%) (병렬화 오버헤드로 인해 증가)
    • Turborepo dry-run 기능 활용: 캐시 적중 시 빌드 시간 증가 문제 해결을 위해 모든 패키지 캐시 상태 사전 점검 후 빌드 대상 결정.
      • 캐시 미적중 시: 평균 빌드 시간 10m27s → 5m29s (-47.5%)
      • 캐시 적중 시: 평균 빌드 시간 1m14s → 1m11s (-4%)
    • 빌드 검증 단계 분리: Workflow Matrix를 활용한 개별 빌드 결과가 단일 status check로 기록되는 문제를 해결하기 위해 빌드 완료 후 추가 검증 단계 도입.
  • 전체적인 성능 개선 효과:
    • 빌드 미적중 시: 30분대 → 5분대 단축 (최대 84%)
    • 캐시 적중 시: 오버헤드 최소화 및 불필요 빌드 방지.
    • 브랜치 보호 정책을 단일 status로 관리 가능.

개발 임팩트

CI 파이프라인의 빌드 시간과 안정성을 크게 향상시켜 개발팀의 생산성을 높이고, 프로젝트 규모가 증가하더라도 효율적으로 대응할 수 있는 기반을 마련했습니다. 또한, 자동화 및 캐시 전략의 중요성을 다시 한번 인지하고 향후 지속적인 최적화의 필요성을 강조했습니다.

커뮤니티 반응

  • 원문에서 커뮤니티 반응에 대한 직접적인 언급은 없으나, 제시된 문제 상황과 해결 과정은 monorepo 환경을 사용하는 많은 개발자들이 공감할 만한 내용입니다.

📚 관련 자료