대규모 웹에서 Bazel 적용하기
에어비앤비는 최근 구글의 오픈 소스 빌드 툴인 Bazel을 백엔드, 웹, iOS 플랫폼을 아우르는 유니버설 빌드 시스템으로 채택했습니다. 1,100만 줄이 넘는 코드로 구성된 대규모 웹 모노리포는 맞춤형 빌드 스크립트와 캐싱 로직으로 인해 유지 보수가 어려웠고 확장성이 좋지 않았습니다. 이러한 문제를 해결하기 위해 에어비앤비는 Bazel로 마이그레이션하여 복잡성, 병렬 처리, 캐싱 및 성능을 제공했습니다.마이그레이션 프로세스는 2021년에 시작되었지만 구글 외에 대규모 웹에서 Bazel을 통합하는 산업 전례는 공개되지 않았습니다. 팀은 원격 환경으로 큰 파일을 전송할 때 발생하는 성능 문제를 해결해야 했으며, 마이그레이션 원칙을 수립하여 전체 성능을 개선하거나 유지하고 마이그레이션 중에 모노리포에 기여하는 개발자의 영향을 줄였습니다.Bazel을 위한 저장소를 준비하기 위해 팀은 사이클 브레이킹과 자동화된 BUILD.bazel 파일 생성을 수행했습니다. 또한 TypeScript, ESLint 및 Jest를 활성화하고 캐싱을 도입하여 입력 크기를 줄이고 성능을 개선했습니다.후퇴를 방지하기 위해 팀은 테스트를 "숨김"에서 "필수"로 이동시키기 위해 규칙 속성을 사용하고, Jest 설정을 대체하는 동안 테스트를 실행하지 않도록 하여 단일 소스 진실을 보장했습니다. 또한 마이그레이션 준비 여부를 확인하기 위해 테스트 런타임, 코드 커버리지 통계 및 실패율과 같은 메트릭을 사용하여 Bazel 이전과 이후를 비교하는 스크립트를 작성했습니다.CI 마이그레이션과 함께 팀은 개발자가 로컬에서 Bazel을 실행하여 CI 실패를 재현하고 반복할 수 있도록 보장했습니다. 개발자가 익숙한 도구를 계속 사용하고 유익할 때 Bazel을 선택할 수 있도록 로컬 Bazel 경험을 제공했습니다.