Bazel을 사용해야 하는 이유

문제 신고 소스 보기

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

Bazel은 빠름

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

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

Bazel이 정확함

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

끝없는 make clean 호출을 수행하고, 아직 빌드되지 않은 소스 코드에서 해결되었던 가상 버그를 쫓아가세요.

Bazel 확장 가능

자체 규칙과 매크로를 작성하여 Bazel의 강력한 기능을 활용하여 광범위한 프로젝트에서 구체적인 요구사항에 맞게 Bazel을 맞춤설정하세요.

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

통합 테스트

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

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

다양한 언어 지원

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

여러 저장소 지원

Bazel은 여러 위치에서 소스 코드를 수집할 수 있습니다. 즉, 종속 항목을 벤더링할 필요가 없고 대신 Bazel을 소스 코드나 사전 빌드된 아티팩트(예: git 저장소 또는 Maven Central)의 위치로 가리킬 수 있으며 나머지는 Bazel에서 처리합니다.

다중 플랫폼 지원

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

광범위한 생태계

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