Bazel 101

빌드 시스템은 소프트웨어 개발에 중요합니다. 단일 어플리케이션을 개발한다면 해당 언어에서 주요한 빌드 시스템이 보통 존재하고 초기에 조금 세팅만 하면 추후에 크게 볼 일이 없었던 것 같습니다. 이 글에서 살펴볼 빌드 시스템은 Bazel은 Google에서 만들고 사용 중인 오픈 소스 프로젝트로, monorepo에서 그 필요성과 강력함이 나타납니다. 구글은 monorepo로 모든 어플리케이션, 라이브러리, 모듈이 관리되는 것으로 유명합니다. Bazel은 그 독특한 설계와 효율성으로 주목받고 있는 빌드 시스템이며 확장성과 성능을 갖췄습니다. 이번 글에서는 Bazel의 핵심 개념과 장점, 그리고 어떻게 사용할 수 있는지에 대해 살펴보겠습니다.

Bazel 소개

Bazel이란? Bazel은 Google에서 개발된 오픈 소스 빌드 시스템으로, 대규모 프로젝트에서의 빌드, 테스트, 패키징 등의 작업을 관리하는 도구입니다. Bazel은 다양한 언어와 플랫폼을 지원하며, 확장성과 성능을 갖춘 빌드 시스템의 새로운 표준으로 인정받고 있습니다.

Bazel의 주요 특징과 장점으로 증분 빌드(incremental build)와 병렬 처리를 통해 빠른 빌드 시간을 제공하며, 빌드 과정에서 의존성 그래프를 활용하여 최적화된 작업 실행을 지원합니다. 또한, 다양한 언어와 플랫폼을 지원하며 빌드의 재현성을 보장합니다.

Bazel의 핵심 개념

Bazel의 장점

Bazel의 사용 방법

Bazel 설치 및 설정

Bazel을 설치하기 위해 공식 웹사이트에서 해당 플랫폼에 맞는 설치 패키지를 다운로드합니다. 설치 후, Bazel의 환경 변수를 설정하고 프로젝트의 작업 영역을 초기화합니다. 이는 Bazel이 프로젝트를 올바르게 인식하고 빌드를 수행할 수 있도록 합니다.

BUILD 파일 작성과 빌드 명령 실행:

Bazel은 빌드 작업을 정의하는 BUILD 파일을 사용합니다. 프로젝트 디렉토리에서 BUILD 파일을 작성하고, 빌드 대상(Target)과 빌드 규칙(Rule)을 정의합니다. BUILD 파일에서는 어떤 파일을 컴파일하거나 라이브러리로 패키징하고, 어떤 종속성을 사용하며, 어떻게 실행 가능한 결과물을 생성하는지를 명시합니다. 작성한 BUILD 파일이 있는 디렉토리에서 Bazel 명령을 실행하여 빌드를 수행합니다. 일반적인 명령은 bazel build입니다.

Bazel을 활용한 테스트와 디버깅:

Bazel은 다양한 종류의 테스트를 지원합니다. 단위 테스트부터 통합 테스트까지 다양한 수준의 테스트를 작성하고 실행할 수 있습니다. Bazel은 테스트 결과를 자동으로 수집하고 보고서를 생성하여 테스트 결과를 확인할 수 있도록 합니다. 디버깅을 위해 Bazel은 bazel run 명령을 제공합니다. 이를 사용하여 실행 가능한 결과물을 직접 실행하고 디버깅할 수 있습니다. 또한, Bazel은 로그 및 디버그 정보를 제공하며, 문제 발생 시 해당 정보를 통해 디버깅을 지원합니다. Bazel의 사용 방법은 상세한 프로젝트의 요구 사항에 따라 다를 수 있으며, Bazel 공식 문서 및 튜토리얼을 참고하여 자세한 사용 방법을 익힐 수 있습니다.

Bazel의 활용 사례

Google에서의 Bazel 사용 사례: Google은 Bazel을 다양한 프로젝트에 적용하고 있으며, Google의 대규모 빌드 인프라의 핵심 도구로 사용되고 있습니다. 대규모 오픈 소스 프로젝트에서의 Bazel 적용 사례: Bazel은 TensorFlow, Angular, Android Open Source Project 등의 대규모 오픈 소스 프로젝트에서도 사용되고 있습니다.

마무리

Bazel은 계속해서 발전하고 있는 빌드 시스템 도구이며, 커뮤니티에 의해서 많이 발전하고 있습니다. javascript, typescript로 개발을 한다면 aspects에서 제공하는 커뮤니티 규칙을 많이 마주치게 됩니다. Monorepo에 대한 관심이 높아지고 있는데 Bazel을 사용한다면 빌드 시스템 문제를 쉽게 다루어볼 수 있습니다. 다음 글에서는 실제 예시와 함께 더 자세히 설명해보겠습니다.

Reference

Discuss this post here.

Published: 2023-05-20

Tagged: Bazel

Archive