자바스크립트 런타임 번(Bun) 개발팀이 빌드 시간 최적화를 위해 자체 개발한 오픈소스 도구 'buildprof'를 공개했습니다. 이 도구는 리눅스(Linux)에서 소프트웨어 빌드 명령이 실행하는 모든 하위 프로세스를 하나의 타임라인으로 시각화하여, 개발자들이 빌드 과정의 병목 현상을 직관적으로 이해하고 최적화할 수 있도록 돕습니다. 번의 수석 아키텍트 재러드 섬너(Jarred Sumner)가 러스트(Rust) 기반의 새 빌드가 기존 지그(Zig) 빌드보다 5배 이상 빠르다고 밝히면서, 지그 빌드의 느린 원인을 파악하기 위한 조사에서 이 도구의 필요성이 대두되었습니다.
buildprof는 기존 빌드 명령 앞에 `--buildprof`를 붙여 사용하는 방식으로, 메이크(Make), 카고(Cargo), 닌자(Ninja) 등 다양한 빌드 시스템과 사용자 정의 스크립트에도 적용 가능합니다. 이 도구는 프로세스 생성, 종료, 그리고 파일 읽기/쓰기 활동까지 기록하여 빌드 시스템 간의 의존성까지 추적합니다. 번의 지그 빌드를 추적한 결과, 전체 24분 24초 중 최종 링크(link) 단계가 16분 35초를 차지하며 가장 큰 병목으로 드러났습니다. 링커(linker) 내부 추적을 통해 대부분의 시간이 전체 프로그램 최적화(Full LTO) 작업에 소요되는 것을 확인했으며, 번 자체뿐만 아니라 미리 빌드된 웹키트(WebKit)와 ICU 라이브러리까지 씬LTO(ThinLTO)로 재빌드하자 전체 빌드 시간이 15분 11초로 크게 단축되었습니다. 이는 링커가 단순히 파일을 합치는 것을 넘어 프로그램 전체에 걸쳐 컴파일러 패스를 실행하며 최적화 작업을 수행하기 때문입니다.
이러한 빌드 시각화 도구는 소프트웨어 개발 과정에서 중요한 의미를 가집니다. 복잡한 빌드 시스템에서 어디에 시간이 소요되는지 파악하기 어려웠던 문제를 해결하여, 개발자들이 병렬성 부족, 반복 작업, 의존성 다운로드, 거대한 컴파일러/링커 호출 등 최적화 가능한 원인을 명확히 식별할 수 있게 합니다. 특히 번의 사례처럼 언어 전환이나 빌드 설정 변경 시 성능 차이의 정확한 원인을 분석하는 데 필수적인 역할을 합니다. buildprof는 클랭(Clang), LLD, 나이틀리 러스트(nightly Rust) 등 특정 컴파일러의 내부 추적까지 통합하여 더욱 심층적인 분석을 가능하게 함으로써, 개발자들이 빌드 파이프라인의 효율성을 극대화하고 궁극적으로 개발 생산성을 향상시키는 데 기여할 것으로 기대됩니다.