Buck2

개요
Buck2는 Meta(구 Facebook)가 개발한 고성능, 확장 가능한 오픈소스 빌드 시스템으로, 기존 Buck의 한계를 개선한 차세대 빌드 엔진이다. Bazel 및 Pants와 같은 현대적 빌드 시스템과 유사하지만, **더 유연한 스크립팅 구조(Starlark 기반)**와 캐싱 및 병렬화 효율성을 극대화하여 대규모 코드베이스 빌드에 최적화되어 있다.
1. 개념 및 정의
Buck2는 “Build Anything, Anywhere, Fast”라는 목표 아래 설계된 분산 빌드 시스템으로, 단일 프로젝트뿐 아니라 모노리포(monorepo) 환경에서도 수천 개의 타깃을 동시에 빌드할 수 있도록 설계되었다.
기존 Buck과 달리, Buck2는 빌드 규칙(Rule)과 빌드 로직(Build Logic)을 완전히 분리하여, Starlark(파이썬 유사 DSL)를 통해 빌드 정의를 동적으로 작성할 수 있다.
2. 특징
| 항목 | Buck2 | Bazel | Buck |
| 언어 | Starlark (Python 유사 DSL) | Starlark | Java 기반 DSL |
| 캐싱 구조 | Fine-grained Remote Cache | Local/Remote | Local 중심 |
| 병렬 빌드 | DAG 기반 분산 처리 | DAG 기반 | 제한적 |
| 규칙 정의 | 완전 사용자 정의 가능 | 제한적 | 고정형 구조 |
| 성능 | 메타데이터 기반 Incremental Build | 고성능 | 중간 |
→ Buck2는 빌드 규칙의 독립성과 확장성을 강화하여 DevOps 워크플로우에 적합하다.
3. 구성 요소
| 구성 요소 | 설명 | 예시 |
| Starlark Script | 빌드 규칙 및 워크플로우 정의 스크립트 | BUILD, BUCK 파일 |
| Daemon | 빌드 캐싱 및 병렬 처리 관리 | Buck2 Server |
| Dependency Graph (DAG) | 타깃 간 종속성 관리 | 빌드 그래프 최적화 |
| Remote Cache | 결과 재사용 및 분산 빌드 지원 | Cloud Storage 기반 캐시 |
| Build Target | 빌드 단위(패키지, 라이브러리 등) | buck2 build //app:target |
→ Buck2는 Starlark로 정의된 규칙을 DAG 형태로 최적화하여, 병렬 빌드 효율성을 극대화한다.
4. 기술 요소
| 기술 요소 | 설명 | 관련 기술 |
| Starlark Language | 빌드 로직을 정의하는 확장 가능한 DSL | Python 호환 문법 |
| Remote Execution API | 분산 빌드 및 캐시 지원 | BuildGrid, BuildBarn |
| Fine-grained Caching | 결과 단위별 세밀한 캐시 관리 | Content Addressable Storage |
| Incremental Build | 변경 부분만 재빌드 | Dependency Graph 기반 |
| Hermetic Build | 외부 의존성 제거로 재현성 확보 | Sandbox 환경 |
→ Buck2는 재현 가능한(Reproducible) 빌드를 지향하며, 클라우드 네이티브 CI/CD 파이프라인에 최적화되어 있다.
5. 장점 및 이점
| 구분 | 설명 | 효과 |
| 빌드 속도 향상 | 병렬 처리 및 캐싱 최적화 | 대규모 코드베이스 빌드 시간 단축 |
| 유연한 규칙 정의 | Starlark 기반 사용자 정의 빌드 | 다양한 언어 및 타깃 지원 |
| 재현성 보장 | Hermetic Build 환경 | 빌드 결과 일관성 확보 |
| 클라우드 확장성 | Remote Execution 및 캐시 통합 | 분산 빌드 환경에 적합 |
| 오픈소스 | Meta 공개 프로젝트 | 커뮤니티 협업 활성화 |
→ Buck2는 대규모 소프트웨어 엔지니어링 팀이 필요로 하는 속도, 확장성, 일관성을 모두 충족한다.
6. 주요 활용 사례 및 고려사항
| 사례 | 내용 | 기대 효과 |
| Meta 내부 시스템 | 수천 개 타깃의 모노리포 빌드 | 개발 속도 2~3배 향상 |
| Android 빌드 | Gradle 대체용 고성능 빌드 시스템 | CI/CD 파이프라인 최적화 |
| 마이크로서비스 빌드 | 서비스 단위 독립 빌드/배포 | 장애 격리 및 속도 향상 |
| 오픈소스 프로젝트 | 다양한 언어 빌드 지원 (C++, Rust 등) | 크로스 플랫폼 확장성 확보 |
고려사항: 초기 설정 복잡도와 Starlark 문법 학습 곡선이 존재하며, 기존 빌드 시스템에서의 마이그레이션 시 규칙 변환이 필요하다.
7. 결론
Buck2는 Meta가 자사 인프라에서 검증한 차세대 빌드 시스템으로, 모듈화·병렬화·캐싱 최적화를 통해 초대형 코드베이스를 효율적으로 관리한다. 오픈소스 생태계에서도 Bazel 대안으로 주목받고 있으며, 클라우드 기반 DevOps 환경에서의 고속·재현성 빌드 표준으로 자리잡고 있다.