이 영역을 누르면 첫 페이지로 이동
butter_shower 블로그의 첫 페이지로 이동

butter_shower

페이지 맨 위로 올라가기

butter_shower

Bazel이란?

  • 2021.05.24 19:41
  • IT Trends
글 작성자: _rian

최근은 아니지만.. 최근인가? 최근에 TFLite를 안드로이드에서 실행해야하는 상황이 생겼는데요, 그때 사용해야하는 툴 중에서 이 Bazel이라는 것을 알게되어 한번 정리해보려고 합니다!! ☺️

빌드 도구라고 함은 짧은 모바일/백엔드 지식으로.. gradle과 maven밖에 몰랐는데 이런 것도 있다니 신기하네요 ㅎㅁㅎ; 아직 안드로이드 환경에서 실행해보지는 않았지만 환경 셋팅만 해도 매우 헉헉대서 ㅋㅋㅋㅋㅠㅠ 중간 정리하는 겸사겸사 글을 작성합니다.


Bazel이란?

https://docs.bazel.build/versions/master/bazel-overview.html

 

Bazel Overview

Bazel Overview Bazel is an open-source build and test tool similar to Make, Maven, and Gradle. It uses a human-readable, high-level build language. Bazel supports projects in multiple languages and builds outputs for multiple platforms. Bazel supports larg

docs.bazel.build

  • make, maven, gradle과 같은 오픈소스 빌드 및 테스트 툴
  • 바젤은 다중 플랫폼용 출력을 구축한다.
  • 여러 레포지코리에 걸쳐 대규모 코드베이스를 지원한다.

조금 더 쉽게 설명을 하자면, 예전에 C언어만 있었을 때에는 하나의 언어로 통일된 execution 파일이 있었습니다. 그러나 점차 java, python 등 다른 고급 프로그래밍 언어가 생기면서 서로 다른 언어라서 서로 다른 플랫폼에서 적용되지 않는 이슈가 있었는데요, 이를 해결하기 위해 만든 것이 바로 이 bazel입니다. 바젤 혹은 베이즐이라고 하는데, 서로 다른 언어들을 하나의 RPC(remote procedute call)로 만들어 서로 다른 언어로 쓰였더라도 하나의 실행파일이 만들어지게 되는 원리입니다.

 

Bazel 의 장점

  • High Level build language
    • 추상적이고 사람이 읽을 수 있는 언어를 사용하여 프로젝트의 빌드 속성을 높은 의미 수준에서 설명한다
    • library, binary, script, dataset의 개념으로 작동하여 compiler와 linker같은 도구에 개별 호출의 복잡성에서 자유롭다.
  • Fast and Reliable
    • 이전에 수행한 모든 작업을 캐시하고 파일 콘텐츠 및 빌드 명령의 변경 사항을 추적한다.
    • 이런식으로 bazel은 재구축해야하는 시기를 알고 재구축을 한다.
    • 빌드 속도를 높이기 위해 고도로 병렬화되고 증분된 방식으로 프로젝트를 설정할 수 있다.
  • Multi platform
    • Linux, macOS, 윈도우에서 실행 가능하다.
    • 동일한 프로젝트에서 데스크톱, 서버 및 모바일을 포함한 여러 플랫폼 용 바이너리 및 배포 가능한 패키지를 빌드할 수 있다.
  • Bazel scales
    • 10만개 이상의 소스 파일로 빌드를 처리하면서 빠른 속도를 유지한다. 수만개의 여러 저장소 및 사용자 기반에서 작동한다.
  • Extensible
    • 확장 가능성. 많은 언어가 지원되며 다른 언어 또는 프레임워크를 지원하도록 확장할 수 있다.

 

Bazel 사용 방법

bazel을 사용하여 프로젝트를 빌드하거나 테스트하려면 아래와 같은 방법을 따르면 된다.

  1. set up Bazel
    1. bazel을 다운로드하고 설치한다.
  2. Set up a project
    1. bazel이 빌드 입력 및 BUILD 파일을 찾고 빌드 출력을 저장하는 디렉토리 인 프로젝트 작업 공간을 설정한다.
  3. Write a BUILD file
    1. 바젤이 어떻게 빌드하고 무엇을 빌드하는지 알려주는 파일이다.
    2. BUILD 파일을 작성하는데, domain-specific한 언어인 Starlark를 이용하여 빌드 대상을 선언하여 build 파일을 작성한다.
    3. 빌드 대상은 Bazel이 빌드할 입력 아티팩트와 해당 종속성, bazel이 빌드에 사용할 빌드 규칙 및 규칙을 구성하는 옵션을 지정한다.
    4. 빌드 규칙은 bazel이 사용할 빌드 도구(예. 컴파일러 및 링커, configurations)를 지정한다.
    5. bazel이 지원되는 플랫폼에서 가장 일반적인 artifact 유형을 다루는 빌드 규칙과 함께 제공된다.
  4. Run Bazel
    1. 커맨드라인툴로 bazel을 실행시킨다. bazel은 workspace 작업공간 내에 출력을 배치한다.

 

Bazel 빌드 프로세스

빌드 또는 테스트를 실행할 때 bazel은 아래와 같은 프로세스로 실행됩니다.

  1. BUILD 파일 대상과 관련된 파일을 로드합니다.
  2. 입력 및 해당 종속성을 분석하고 지정된 빌드 규칙을 적용하여 작업 그래프를 생성합니다.
  3. 최종 빌드 출력이 생성될 때 까지 입력에 대한 빌드 작업을 실행합니다.

모든 이전 빌드 작업이 캐시되므로 bazel은 캐시 된 아티팩트를 식별 및 재사용하고 변경된 사항만 다시 빌드하거나 다시 테스트할 수 있습니다.

'IT Trends' 카테고리의 다른 글

구글 Gemini에 관해 이모저모  (0) 2023.12.16
Tensorflow Lite에서 Delegate란? - GPU Delegate  (0) 2021.06.02
Google I/O 2021 키노트를 듣고 몇가지 흥미로운 것들  (0) 2021.05.20
요즘 제일 힙한 프로그래밍 언어, Rust  (0) 2021.04.26
완전 편한 Data Science용 Python 웹 프레임워크, Streamlit  (2) 2021.04.09

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 구글 Gemini에 관해 이모저모

    구글 Gemini에 관해 이모저모

    2023.12.16
  • Tensorflow Lite에서 Delegate란? - GPU Delegate

    Tensorflow Lite에서 Delegate란? - GPU Delegate

    2021.06.02
  • Google I/O 2021 키노트를 듣고 몇가지 흥미로운 것들

    Google I/O 2021 키노트를 듣고 몇가지 흥미로운 것들

    2021.05.20
  • 요즘 제일 힙한 프로그래밍 언어, Rust

    요즘 제일 힙한 프로그래밍 언어, Rust

    2021.04.26
다른 글 더 둘러보기

정보

butter_shower 블로그의 첫 페이지로 이동

butter_shower

  • butter_shower의 첫 페이지로 이동

검색

메뉴

  • All Categories
  • About Me
  • Guest Book

카테고리

  • 전체보기 (223)
    • 💫 주인장 이야기 (17)
    • 🌱 와글와글뻘글 (27)
    • IT Trends (11)
    • 주인장 일상 (0)
    • 📒 내 마음대로 독서 서평 (12)
    • 머신러닝 꿈나무 (30)
      • 기본 개념 (6)
      • Hands-on! (5)
      • Paper Review (5)
      • 캐린이의 Kaggle (1)
    • 알고리즘 Algorithm (33)
      • PS (8)
    • Computer Engineering (75)
      • Python (8)
      • Cloud Computing (9)
      • C (9)
      • C++ (0)
      • Java (6)
      • Django 장고 (4)
      • 임베디드 시스템 (10)
      • 병렬 처리(Parallel Processing) (9)
      • 데이터 통신 Data communication (4)
      • 유닉스 시스템 (Unix System) (3)
      • GitHub (1)
      • 마이크로 프로세서 (micro processor) (1)
      • 데이터 마이닝 (1)
    • Error Note 🚨 (3)
    • 영어 공부 (6)
      • Live Academy (6)
    • HOBBY (2)
      • Film Log (2)

최근 글

정보

_rian의 butter_shower

butter_shower

_rian

나의 외부 링크

  • Github
  • Facebook
  • Instagram
  • LinkedIn
  • Twitter

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © _rian. Designed by Fraccino.

티스토리툴바