피드로 돌아가기
Dev.toDevOps
원문 읽기
불필요한 CI 빌드 제거, Bazel 도입으로 최적화한 프론트엔드 모노레포 기록
Bazel For a Frontend Monorepo
AI 요약
Context
GitHub Actions 기반의 CI 파이프라인 운영 중. pnpm install 및 build 단계가 매번 전체 패키지를 대상으로 무조건 실행되는 구조. 변경 사항이 없는 패키지까지 재빌드하는 자원 낭비 발생.
Technical Solution
- Bazelisk 도입을 통한 Bazel 버전 관리 및 팀원 간 빌드 환경 일관성 유지
- aspect_rules_js 및 rules_nodejs를 활용한 Node.js 런타임 및 pnpm 의존성 관리 체계 구축
- pnpm-lock.yaml 파일을 Bazel 타겟으로 변환하여 효율적인 의존성 그래프 생성
- Bazel 내부 캐시와 node_modules 간의 심볼릭 링크 설정을 통한 기존 툴체인 호환성 확보
- TypeScript 컴파일, Jest 테스트, ESLint 린팅 과정을 개별 Bazel 타겟으로 정의하여 증분 빌드 구현
- 기존 package.json 스크립트가 Bazel 명령어를 호출하는 브릿지 구조 설계로 외부 인터페이스 유지
Key Takeaway
초기 설정 비용과 학습 곡선이 높지만, 정교한 의존성 그래프 모델링을 통해 빌드 아티팩트를 캐싱함으로써 CI 파이프라인의 실행 시간을 획기적으로 단축 가능.
실천 포인트
모노레포 규모 확장 시 pnpm의 기본 캐싱 한계를 느끼면 Bazel의 증분 빌드 및 원격 캐싱 도입 검토