Bazel을 사용해야 하는 이유

문제 신고 출처 보기 보통

Bazel은 업계 최고의 생태계에서 여러 언어, 저장소, 플랫폼을 지원하는 통합 테스트를 갖춘 빠르고 정확하며 확장 가능한 빌드 도구입니다.

Bazel은 빠릅니다

Bazel은 각 빌드 명령어에 필요한 입력 파일을 정확하게 알고 있으므로 각 빌드 간에 입력 파일 세트가 변경된 경우에만 재실행하여 불필요한 작업을 방지합니다. 동일한 컴퓨터 또는 원격 빌드 노드에서 가능한 한 많은 동시 로드로 빌드 명령어를 실행합니다. 빌드 구조상 허용되는 경우 동시에 수천 개의 빌드 또는 테스트 명령어를 실행할 수 있습니다.

이는 메모리, 디스크, 원격 빌드 팜(사용 가능한 경우)의 여러 캐싱 레이어에서 지원됩니다. Google에서는 일상적으로 캐시 적중률이 99%에 달합니다.

Bazel이 맞습니다

Bazel은 바이너리가 자체 소스 코드에서 빌드되도록 합니다. Bazel 작업은 개별 샌드박스에서 실행되고 Bazel은 빌드의 모든 입력 파일을 추적하며 필요한 경우에만 빌드 명령어를 항상 재실행합니다. 이렇게 하면 바이너리를 최신 상태로 유지하여 같은 소스 코드가 항상 동일한 바이너리를 비트 단위로 생성합니다.

끝없는 make clean 호출과 한 번도 빌드되지 않은 소스 코드에서 실제로 해결된 유령 버그를 추적하는 데 좋은 방법을 제공합니다.

확장 가능한 Bazel

자체 규칙과 매크로를 작성하여 Bazel의 모든 기능을 활용하여 다양한 프로젝트에서 특정 요구에 맞게 Bazel을 맞춤설정하세요.

Bazel 규칙은 Python의 하위 집합인 사내 프로그래밍 언어인 Starlark로 작성됩니다. Starlark를 사용하면 대부분의 개발자가 규칙 작성에 액세스할 수 있으며 생태계 전체에서 사용할 수 있는 규칙도 만들 수 있습니다.

통합 테스트

Bazel의 통합 테스트 실행기는 재실행이 필요한 테스트만 알고 실행하며, 원격 실행(사용 가능한 경우)을 사용하여 테스트를 병렬로 실행합니다. 테스트를 수천 번 빠르게 실행하는 원격 실행을 사용하여 플레이크를 조기에 감지합니다.

Bazel은 테스트 결과를 중앙 위치에 업로드할 시설을 제공하여 CI에 있든 개별 개발자가 테스트 결과를 효율적으로 전달할 수 있도록 합니다.

다양한 언어 지원

Bazel은 C++, Java, Kotlin, Python, Go, Rust 등 다양한 일반적인 프로그래밍 언어를 지원합니다. 한 언어의 관용적인 빌드 도구로 제한되지 않고도 동일한 Bazel 호출로 여러 바이너리 (예: 백엔드, 웹 UI, 모바일 앱)를 빌드할 수 있습니다.

다중 저장소 지원

Bazel은 여러 위치에서 소스 코드를 수집할 수 있습니다. 종속 항목을 공급할 필요는 없지만 Bazel이 소스 코드 또는 사전 빌드된 아티팩트(예: Git 저장소 또는 Maven Central)의 위치를 가리키게 할 수 있으며 나머지는 알아서 처리합니다.

멀티 플랫폼 지원

Bazel은 Linux, macOS, Windows, Android를 비롯한 여러 플랫폼용 프로젝트를 동시에 빌드할 수 있습니다. 또한 한 플랫폼에서 코드를 빌드하고 다른 플랫폼에서 빌드를 실행할 수 있는 강력한 크로스 컴파일 기능을 제공합니다.

광범위한 생태계

업계 리더는 Bazel을 사용하고 기여하는 대규모 개발자 커뮤니티를 구축하는 Bazel을 애용합니다. Bazel에서 사용할 수 있는 컨설팅 및 SaaS 서비스를 포함하여 도구, 서비스, 문서를 찾아보세요. 오픈소스 소프트웨어 저장소의 프로그래밍 언어 지원과 같은 확장 프로그램을 살펴보세요.