피드로 돌아가기
Slack EngineeringDevOps
원문 읽기
Build better software to build software better
Quip과 Slack Canvas 팀이 Bazel과 소프트웨어 공학 원칙을 적용해 빌드 시간을 60분에서 10분 수준으로 단축
AI 요약
Context
Quip과 Slack Canvas의 백엔드 빌드 파이프라인이 60분이 소요되면서 엔지니어들이 코드 변경에 대한 피드백을 늦게 받게 되어 개발 사이클이 저하되었다.
Technical Solution
- 빌드 그래프를 의존성 관계로 명시적으로 정의: 백엔드와 프론트엔드의 독립적인 빌드 경로를 지정했고, 파이썬 파일 변경 시에만 백엔드 재빌드, TypeScript 파일 변경 시에만 프론트엔드 재빌드하도록 모델링
- 빌드 태스크를 세분화된 단위로 재설계: 번들 빌드와 CSS 컴파일 작업을 개별적으로 캐싱 가능하도록 구조 변경
- Bazel 빌드 시스템 도입: 현대적이고 고성능의 빌드 도구를 통해 그래프 기반 의존성 관리와 자동 병렬화 구현
- 캐싱 전략 최적화: 세분화된 캐시 키를 적용해 불필요한 캐시 무효화를 감소시키고 캐시 히트율 향상
- 병렬 실행 권한을 Bazel에 위임: 빌드 스크립트의 병렬화 로직을 제거하고 Bazel의 병렬화 엔진에 전담
Impact
전체 빌드 그래프에 원칙을 적용한 결과, 풀 리빌드 시간이 최대 6배 단축되었다.
Key Takeaway
소프트웨어 공학 원칙인 관심사의 분리(separation of concerns), 시스템 전체에 대한 사고, 합성 가능성(composability) 설계는 애플리케이션 코드뿐만 아니라 빌드 코드, 릴리스 파이프라인, 환경 설정 전략 전체에 적용되어야 한다.
실천 포인트
멀티스텝 빌드 프로세스를 운영하는 팀은 세분화된 캐시 키와 개별 작업 단위 설계를 통해 캐시 히트율을 높이고, Bazel 같은 DAG 기반 빌드 도구를 도입하면 병렬화 로직 관리 부담을 줄이면서 풀 리빌드 시간을 대폭 단축할 수 있다.