마지막 관문, 빌드 봇과의 사투

232025년 08월 14일4

보안 패치는 완성되었다. 하지만 그것은 전투의 끝이 아니라, 새로운 전쟁의 시작이었다. 이제 그들의 코드는 Dawn 프로젝트라는 안전한 울타리를 떠나, 크롬이라는 거대한 제국의 심장부, 즉 중앙 빌드 시스템으로 보내져야 했다.

드미트리는 기능 동결까지 남은 시간을 확인했다. 11시간 52분. 그는 심호흡을 하고, ‘COMMIT’ 버튼을 눌렀다. 수정된 코드가 크로미움의 메인 코드베이스에 제출되었다.

곧바로 거대한 기계가 움직이기 시작했다. 전 세계에 흩어져 있는 수백 대의 서버, 통칭 ‘빌드 봇(Build Bots)’들이 깨어났다. 그들의 임무는 새로 제출된 코드를 포함하여, 윈도우, 맥, 리눅스, 안드로이드 등 모든 지원 플랫폼에서 크롬 브라우저를 처음부터 끝까지 컴파일하고, 수십만 개에 달하는 자동화된 테스트를 실행하는 것이었다. 단 하나의 플랫폼, 단 하나의 테스트라도 실패하면, 커밋은 자동으로 거부(Revert)된다.

“이제 우리가 할 수 있는 건 없어. 기다리는 수밖에.”
드미트리가 굳은 표정으로 말했다. 팀원들은 모두 그의 등 뒤에서, 빌드 봇들의 진행 상황을 보여주는 거대한 대시보드를 응시하고 있었다.

대시보드의 패널들이 하나둘 녹색불로 바뀌기 시작했다.
Windows x64 - Compile: PASS
Linux x64 - Compile: PASS
macOS ARM64 - Compile: PASS

컴파일은 순조롭게 통과했다. 하지만 진짜 지옥은 테스트 단계였다.

첫 번째 붉은불이 켜졌다.
Android ARM32 - Test Suite ‘GfxTests’: FAIL

“젠장!”
벤이 책상을 내리쳤다. 안드로이드의 구형 32비트 기기에서 그래픽 테스트가 깨진 것이다.
드미트리는 즉시 에러 로그를 분석했다. 보안 패치를 위해 추가했던 강력한 메모리 배리어 코드가, 저사양 기기에서는 드라이버의 또 다른 버그를 촉발시킨 것이었다.

“수정해야 해. 지금 당장!”
드미트리와 팀원들은 즉시 해당 버그를 우회하는 코드를 작성했다. if (is_android_arm32) { ... } 조건문이 또 하나 늘어났다. 수정된 코드를 다시 커밋했다. 남은 시간 8시간.

빌드 봇들이 다시 움직이기 시작했다.
이번에는 안드로이드 테스트를 통과했다. 모두가 안도의 한숨을 내쉬려는 순간, 전혀 예상치 못한 곳에서 또 다른 붉은불이 켜졌다.

Windows x86 Debug - Test Suite ‘BrowserTests’: FAIL

“이건 또 뭐야! 브라우저 테스트?”
이번엔 그래픽 테스트가 아니었다. WebGPU와는 전혀 상관없어 보이는, 브라우저의 북마크 기능을 테스트하는 코드에서 오류가 발생한 것이다.

팀은 패닉에 빠졌다. 원인을 알 수 없었다. 그들의 변경 사항이 어떻게 북마크 테스트에 영향을 줄 수 있단 말인가?

“타이밍 문제일 거야.”
드미트리가 붉게 충혈된 눈으로 말했다.
“우리 패치가 GPU 드라이버 초기화 시간을 아주 미세하게 바꿨고, 그게 다른 테스트의 비동기 동작 타이밍에 나비효과를 일으킨 거다. 이건 우리 코드를 고칠 게 아니라, 테스트 코드 자체를 수정해서 타이밍 의존성을 없애야 해.”

하지만 그 테스트 코드의 주인은 다른 팀이었다. 드미트리는 새벽 시간에 다른 팀의 담당자에게 긴급하게 연락을 취했다. 다행히 상황의 심각성을 이해한 담당자가 즉시 테스트 코드 수정에 착수해주었다. 남은 시간 4시간.

수정된 테스트 코드가 포함된 새로운 패치가 다시 제출되었다.
모두가 숨을 죽이고 대시보드를 지켜보았다. 시간은 무심하게 흘러갔고, 패널들은 하나씩, 아주 천천히 녹색으로 채워졌다.

Windows: PASS
Linux: PASS
macOS: PASS
Android: PASS

모든 플랫폼, 모든 테스트에 녹색불이 켜졌다.
“……됐다.”
누군가의 잠긴 목소리. 연구실에는 탈진한 사람들의 거친 숨소리만이 가득했다.

기능 동결까지 남은 시간은 단 58분.
그들은 마침내 거대한 빌드 시스템의 모든 관문을 통과했다.

이제 마지막 허들이 남았다.
출시 관리 총책임자, 메이슨 이사의 최종 승인. 그녀가 ‘LGTM(Looks Good To Me)’이라는 사인을 해주지 않으면, 이 모든 노력은 물거품이 된다. 드미트리는 마지막 남은 힘을 쥐어짜 그녀에게 메일을 보냈다.

제목: WebGPU for Chrome 113 - Final Approval Request
본문: 모든 P0 보안 이슈 해결. 모든 빌드 봇 통과 완료. 최종 승인을 요청합니다.

메일을 보낸 뒤, 그는 의자에 깊숙이 몸을 묻었다. 이제 정말로 그가 할 수 있는 일은 아무것도 없었다. 그의 운명은, 그리고 WebGPU의 운명은 이제 다른 사람의 손에 달려 있었다. 그는 조용히 눈을 감고, 그녀의 회신을 기다렸다.