C++ 개발자들 사이에서 Ninja는 '빌드 속도의 기준점' 같은 존재인데요. 그런 Ninja를 상대로 build2라는 빌드 시스템이 '우리가 더 빠르다'는 벤치마크 결과를 들고나왔어요. 단순히 숫자 자랑이 아니라, 빌드 시스템 설계에 대한 오래된 통념 하나를 건드리는 이야기라서 소개해 드릴게요.
먼저, Ninja가 뭐길래 이게 뉴스가 될까요
Ninja는 원래 구글 크롬 빌드를 빠르게 하려고 만들어진 도구예요. 철학이 아주 극단적인데요. 빌드 설정을 사람이 편하게 쓰는 기능은 다 빼버리고, 오직 '주어진 의존성 그래프를 최대한 빨리 실행하는 것'에만 집중했어요. 그래서 Ninja는 보통 단독으로 쓰지 않고, CMake나 Meson 같은 상위 도구가 빌드 파일을 생성해 주면 그걸 실행하는 역할만 해요. 이런 구조를 '메타 빌드 시스템' 방식이라고 하는데, 지난 10년간 C++ 진영의 표준 공식처�럼 굳어졌죠. 'CMake로 설정하고 Ninja로 실행하면 가장 빠르다'는 게 상식이었으니까요.
특히 Ninja가 자랑하는 건 '아무것도 안 바뀐 빌드', 영어로는 no-op 빌드 속도예요. 이게 뭐냐면, 코드를 하나도 안 고치고 빌드 명령을 다시 실행했을 때 '바뀐 게 없네요' 하고 판단을 끝내는 시간이거든요. 별거 아닌 것 같지만, 개발자는 하루에 수십 번씩 빌드를 돌리니까 이 판단 시간이 개발 경험을 좌우해요. Ninja는 대형 프로젝트에서도 이걸 1초 안쪽으로 끝내는 걸로 유명하고요.
build2는 어떻게 그걸 이겼다고 주장하는 걸까요
build2는 접근이 정반대예요. 설정 언어, 의존성 분석, 실행을 하나의 통합된 시스템으로 만들었거든요. 메타 빌드 방식은 'CMake가 분석해서 파일 생성, Ninja가 실행'이라는 2단계 구조라서, 빌드 설정이 바뀌면 생성 단계를 다시 거쳐야 하는 비용이 숨어 있어요. 반면 통합 시스템은 중간 산출물 없이 원본 설정에서 바로 판단하니까 이 재생성 비용이 아예 없죠. 또 build2는 파일 변경을 감지할 때 단순히 수정 시각(mtime)만 보는 게 아니라 내용 기반 검사를 섞어 써서, 불필요한 재컴파일을 더 정교하게 걸러내는 것도 특징이에요. 예를 들어 헤더 파일을 저장만 하고 내용은 그대로인 경우, 시각 기반 도구는 재빌드를 시작하지만 내용 기반 도구는 그냥 넘어가거든요. 통념상 '기능이 많은 통합 시스템은 미니멀한 실행기보다 느릴 수밖에 없다'고 여겨졌는데, 설계를 잘하면 그렇지 않다는 게 이 글의 핵심 주장인 거예요.
그래도 벤치마크는 늘 한 발 떨어져서 봐야 해요
물론 자사 블로그의 벤치마크는 자기에게 유리한 시나리오를 고르기 마련이에요. 어떤 프로젝트 규모인지, 풀 빌드인지 no-op 빌드인지에 따라 결과가 뒤집힐 수 있고요. 그리고 빌드 도구 선택에서 순수 속도는 사실 절반의 이야기예요. 나머지 절반은 생태계거든요. CMake는 사실상 C++ 세계의 공용어라서 서드파티 라이브러리, IDE 연동, CI 템플릿까지 모든 게 맞춰져 있어요. build2가 기술적으로 우수해도 이 관성을 넘기는 쉽지 않죠. 비슷하게 기술적 완성도가 높았던 Meson도 CMake를 대체하기보다는 공존하는 정도에 머물러 있는 게 현실이고요.
한국 개발자에게는 어떤 의미가 있을까요
당장 회사 프로젝트를 build2로 갈아타자는 이야기는 아니에요. 다만 두 가지는 챙겨갈 만해요. 첫째, 빌드가 느리다면 그건 참아야 할 운명이 아니라 개선 가능한 엔지니어링 문제라는 관점이요. ccache 같은 컴파일 캐시, mold 같은 고속 링커, 미리 컴파일된 헤더만 조합해도 체감 속도가 크게 달라지거든요. 둘째, '단계를 나누면 각자 단순해져서 좋다'는 설계 원칙이 항상 옳지는 않다는 교훈이에요. 단계 사이를 오가는 비용이 쌓이면, 잘 설계된 통합 시스템이 오히려 빠를 수 있다는 걸 build2가 보여준 거니까요. 이건 빌드 시스템만이 아니라 데이터 파이프라인이나 마이크로서비스 설계에도 똑같이 적용되는 이야기예요.
마무리
정리하면, '미니멀한 도구가 항상 가장 빠르다'는 통념에 통합 설계로 반박한 사례예요. 여러분 팀의 빌드는 지금 몇 초 걸리나요? 그리고 그 시간, 정말 줄일 수 없는 걸까요? 각자의 빌드 최적화 경험담이 궁금하네요.
🔗 출처: Hacker News