“Bazel 에코시스템”이 정확히 무엇인가?
Source: Dev.to
Bazel: 핵심에 있는 빌드 엔진
가운데에 위치한 것은 Bazel 자체입니다: 구글 Blaze 팀이 오픈소스로 공개한 오픈‑소스 빌드 및 테스트 도구입니다.
BUILD,WORKSPACE또는MODULE.bazel파일을 읽습니다.- 의존성을 분석하고 액션 그래프를 생성합니다.
- 필요한 작업만 실행하며, 병렬 처리와 캐싱을 적극 활용해 빌드를 빠르고 재현 가능하게 유지합니다.
이를 전체 모노레포 빌드 그래프의 “컴파일러”라고 생각하면 됩니다.
Rules와 Starlark: Bazel이 여러분의 세계를 이해하는 방법
Bazel 자체는 작업을 스케줄링하는 방법을 알지만, “Java 라이브러리를 빌드한다”거나 “Docker 이미지를 만든다”는 의미는 모릅니다. 이러한 지식은 Starlark 언어로 작성된 rules에 들어 있습니다.
두 가지 큰 범주가 있습니다:
- 내장 규칙 – Java, C++, Go, Android, 일반
genrule등용. - 외부 규칙 세트 –
rules_python,rules_go,rules_docker,rules_k8s등과 같은 커뮤니티 및 공식 저장소, 그리고 Awesome Bazel에 정리된 다양한 규칙들.
팀이 “우리는 Bazel을 사용한다”고 말할 때 실제 의미는 “우리는 Bazel과 우리 기술 스택을 가르쳐 주는 규칙 세트를 사용한다”는 것입니다.
Toolchains, platforms, and remote builds
현대 시스템은 여러 플랫폼을 대상으로 빌드해야 하고, 때로는 무거운 작업을 원격 클러스터에 맡겨야 합니다. Bazel 생태계는 이를 모두 포괄합니다.
핵심 요소
- 플랫폼 및 툴체인 – OS/CPU와 사용할 컴파일러·도구를 정의합니다. 이를 통해 단일 설정으로 교차 컴파일 및 다중 플랫폼 빌드가 가능합니다.
- 원격 캐시 & 원격 실행 – 빌드 액션과 출력물을 원격에서 실행·캐시할 수 있는 선택적 서비스로, 대규모 팀이 같은 작업을 반복해서 빌드하지 않도록 합니다.
이 단계에서 Bazel은 “그냥 또 하나의 빌드 도구”에서 “대규모 빌드·테스트 인프라”로 변모합니다.
Developer tooling: Bazel을 편리하게 사용하는 방법
순수 Bazel은 저수준이라 느껴질 수 있습니다. 생태계는 이를 보완하는 다양한 도구들을 제공합니다.
전형적인 예시
- Bazelisk 및 래퍼 CLI – Bazel 버전을 관리하고 워크스페이스를 부트스트랩합니다.
- IntelliJ, VS Code, Android Studio, Xcode용 IDE 통합 및 생성기 – Bazel 빌드 위에 코드 탐색·리팩터링 기능을 제공합니다.
bazel-diff같은 헬퍼 도구, 프로젝트 생성기, CI 통합, 그리고 Spotify, Atlassian 등 기업에서 사용하는 레포 전용 유틸리티.
이 도구들은 Bazel을 “강력하지만 사용하기 어려운”에서 조직 전체가 채택할 수 있는 수준으로 바꿔 줍니다.
Community, examples, and real‑world usage
생태계는 커뮤니티만큼 강합니다. Bazel 오픈소스 프로젝트는 대규모 다언어 모노레포를 운영하는 기업과 OSS 프로젝트들의 지원을 받고 있습니다.
- Awesome Bazel 같은 정리된 리스트는 규칙, 도구, 예제 프로젝트(TensorFlow, Kubernetes, Envoy 등)를 모아두어 다른 사람들이 실제 Bazel 워크스페이스를 어떻게 구성하는지 확인할 수 있게 합니다.
- “차세대 Bazel 빌드”와 원격 분석에 관한 블로그, 강연, 교육 자료가 지속적으로 업데이트되며, 오늘날의 Bazel 생태계와 호환되어 풍부한 도구들을 재사용할 수 있게 합니다.
Bazel을 평가한다면 핵심 바이너리만 보지 말고, 의존하게 될 규칙들, 개발자들이 매일 사용할 도구들, 그리고 배울 수 있는 커뮤니티 자원을 함께 살펴보세요. 이 전체 패키지가 사람들이 Bazel 생태계에 대해 이야기할 때 실제로 의미하는 바입니다.