핑거프린팅이라는 프라이버시 폭풍에 대한 대응책이 논의되는 동안, 드미트리의 레이더에는 또 다른 종류의, 훨씬 더 감지하기 힘든 문제가 포착되고 있었다. 그것은 눈에 보이는 버그나 성능 저하가 아니었다. 그것은 WebGPU의 성공 이면에 조용히 쌓여가고 있는 ‘보이지 않는 세금’, 바로 바이너리 크기(Binary Size) 문제였다.
문제의 심각성을 처음으로 수면 위로 끌어올린 것은 크롬 OS 팀이었다.
크롬 OS는 저사양의 하드웨어에서도 빠르고 가볍게 동작하는 것을 목표로 하는 운영체제다. 그들에게는 단 1메가바이트의 용량도 소중했다.
크롬 OS의 성능 아키텍트, ‘지아’가 드미트리에게 데이터를 들고 찾아왔다.
“드미트리, 저희는 크롬 브라우저의 전체 설치 파일 크기를 분석하고 있습니다. 그리고 최근 몇 년간, 그 크기가 가장 크게 증가한 원인 중 하나가 바로 당신의 팀이라는 것을 발견했습니다.”
그녀는 차트를 보여주었다. 차트에는 크롬의 각 컴포넌트가 차지하는 용량이 표시되어 있었다. ‘Dawn Engine’이라는 항목은, 몇 년 전에는 존재하지도 않았지만, 이제는 수십 메가바이트를 차지하는 거대한 구성 요소가 되어 있었다.
지아가 설명했다.
“문제는 Dawn 자체의 크기만이 아닙니다. Dawn이 의존하는 모든 것들이 문제입니다. Vulkan 셰이더 컴파일러, ANGLE의 D3D11 백엔드, 그리고 수많은 드라이버 버그 우회 코드들… 이 모든 것이 합쳐져, 브라우저의 몸집을 무겁게 만들고 있습니다.”
그녀의 지적은 뼈아팠다.
“저사양 크롬북 사용자에게, 이것은 단순히 디스크 공간 문제가 아닙니다. 브라우저가 무거워질수록, 시작 시간은 느려지고, 시스템 메모리 점유율은 높아집니다. WebGPU가 가져다주는 런타임 성능의 이면에서, 우리는 ‘설치 시간’과 ‘시스템 리소스’라는 보이지 않는 세금을 사용자에게 부과하고 있는 겁니다.”
드미트리는 이 문제를 심각하게 받아들였다.
그는 지금까지 ‘더 많은 기능’, ‘더 나은 성능’만을 향해 달려왔다. 하지만 그 모든 것에는 대가가 따랐다. 코드베이스는 점점 더 복잡해지고, 바이너리는 점점 더 비대해지고 있었다.
그는 팀원들을 모았다.
“우리는 이제 다이어트를 시작해야 한다. 코드의 모든 줄, 모든 기능에 대해 질문을 던져야 해. ‘이것이 정말로 필요한가? 이것 없이도 우리의 목표를 달성할 수 있는가?’”
그날부터 Dawn 팀에는 새로운 문화가 생겨났다. ‘바이너리 크기 회귀 테스트’.
이제 모든 새로운 코드 변경(Commit)은, 기능 테스트와 성능 테스트뿐만 아니라, 최종 바이너리 크기를 얼마나 증가시키는지를 측정하는 테스트를 통과해야만 했다. 단 몇 킬로바이트의 증가라도, 그 타당성을 명확하게 설명해야 했다.
팀은 거대한 코드베이스를 처음부터 다시 샅샅이 훑기 시작했다.
그들은 더 이상 사용되지 않지만, 하위 호환성을 위해 남겨두었던 낡은 API의 잔재들을 과감하게 제거했다.
특정 구형 드라이버의 버그를 우회하기 위해 추가했던 복잡한 코드들을, 이제는 해당 드라이버가 업데이트되었음을 확인하고 삭제했다.
가장 큰 수술은 ‘컴파일러’였다.
Dawn은 내부에 WGSL을 각 플랫폼의 네이티브 셰이더 언어로 변환하는 여러 컴파일러를 내장하고 있었다. 이 컴파일러들은 매우 무겁고 복잡했다.
레나가 새로운 아이디어를 제시했다.
“만약 우리가 이 컴파일러들을 ‘동적 라이브러리(Dynamic Library)’로 분리한다면 어떨까요? 그리고 사용자가 실제로 해당 기능을 사용하는 순간에만, 이 라이브러리를 다운로드하여 로드하는 겁니다.”
예를 들어, 대부분의 사용자는 DirectX 12 환경에 있다. 그들에게 Vulkan이나 Metal을 위한 셰이더 컴파일러는 필요가 없다. 브라우저는 최초 설치 시에는 가장 필수적인 컴포넌트만 포함하고 있다가, 사용자가 리눅스 환경에서 Vulkan을 필요로 하는 WebGPU 사이트에 접속하면, 그 순간에만 ‘Vulkan 셰이더 컴파일러 모듈’을 백그라운드에서 다운로드하는 것이다.
이것은 ‘컴포넌트 기반 업데이트(Component-based Update)’라고 불리는, 크롬의 기존 인프라를 활용하는 영리한 방법이었다.
초기 설치 크기를 획기적으로 줄이고, 사용자에게는 꼭 필요한 기능만을 제공할 수 있었다.
이러한 노력들은 단기간에 눈에 띄는 성과를 가져왔다.
몇 달 후, Dawn 엔진이 차지하는 바이너리 크기는 이전보다 거의 30% 가까이 줄어들었다. 크롬 OS 팀의 지아는 놀라움을 표하며 감사 인사를 전해왔다.
드미트리는 이 과정을 통해 중요한 경영의 원칙을 배웠다.
성장이란 단순히 새로운 것을 더하는 것만이 아니라는 것을.
때로는 불필요한 것을 덜어내고, 본질에 집중하는 것이 더 큰 성장으로 이어진다는 것을.
그는 이제 무작정 영토를 확장하는 정복자가 아니었다.
그는 자신의 왕국을 효율적으로 다스리고, 시민들에게 부과되는 보이지 않는 세금을 줄이기 위해 끊임없이 노력하는, 현명한 통치자가 되어가고 있었다. 그의 리더십은 이제, ‘더하기’의 기술을 넘어 ‘빼기’의 미학을 이해하는 단계로 나아가고 있었다.