과거로부터의 부름

462025년 08월 25일4

‘확장 기능’이라는 새로운 길을 연 덕분에, WebGPU는 안정성과 혁신이라는 두 마리 토끼를 모두 잡으며 순항하고 있었다. 드미트리는 이제 미래의 로드맵을 설계하고, 새로운 세대의 개발자들을 지원하는 역할에 점차 익숙해져 갔다. 그의 삶은 안정적인 궤도에 오른 듯 보였다.

그 평온을 깨뜨린 것은 그의 책상 위에 놓인, 낡고 먼지 쌓인 상자 하나였다.
구글은 주기적으로 직원들의 오래된 업무용 기기를 수거하여 폐기한다. 그 과정에서, 10여 년 전 드미트리가 사용했던 구형 노트북이 발견되었고, 데이터 백업 여부를 묻기 위해 그에게 전달된 것이었다.

그는 무심코 노트북의 전원을 켰다. 놀랍게도 부팅이 되었다. 바탕화면에는 그가 까맣게 잊고 있던 옛 프로젝트 폴더들이 흩어져 있었다. 그중 하나가 그의 시선을 사로잡았다.

Project: ANGLE

ANGLE.
그가 WebGPU라는 거대한 파도에 몸을 싣기 훨씬 이전에, 그의 청춘을 바쳤던 프로젝트. WebGL을 윈도우의 DirectX 위에서 구동시키기 위해 만들었던, 그의 첫 번째 위대한 ‘번역기’.

호기심에, 그는 그 시절에 만들었던 ANGLE의 초기 버전 데모를 실행해 보았다. 화면에는 조악한 3D 큐브가 투박하게 회전하고 있었다. 지금의 기준으로 보면 우스울 정도의 퀄리티였다. 하지만 드미트리는 그 화면에서 눈을 뗄 수가 없었다.

그는 당시의 코드를 열어보았다. OpenGL ES의 함수 하나하나를, 그에 대응하는 DirectX 함수로 수동으로 매핑해놓은, 정직하지만 무수히 많은 if-elseswitch 문으로 가득 찬 코드. 그 코드 속에는 풋풋했던 시절의 고민과 열정이 고스란히 담겨 있었다.

그때, 문득 그의 머릿속에 기묘한 의문이 떠올랐다.
‘지금의 ANGLE은 어떻게 되어 있을까?’

그는 현재 크롬에 탑재된 최신 ANGLE 프로젝트의 소스 코드를 열었다.
그리고 그는 경악했다.

그가 기억하던 단순한 번역기는 온데간데없었다.
ANGLE은 지난 10년간 수많은 엔지니어들의 손을 거치며, 그 자체가 하나의 거대한 괴물처럼 진화해 있었다. 이제는 DirectX뿐만 아니라 Vulkan, Metal, 심지어 데스크톱 OpenGL까지 지원하는, 복잡하고 거대한 추상화 계층으로 변모해 있었다.

수백 개의 설정 플래그. 수천 개의 드라이버 버그 우회 코드. 그리고 여러 백엔드를 아우르기 위한 난해한 매크로와 템플릿 코드들이 미로처럼 얽혀 있었다.

“이게… 내가 만들었던 ANGLE이라고?”

그는 마치 자신이 어릴 적 살던 고향 집에 돌아왔는데, 그곳에 알아볼 수 없는 거대한 빌딩이 들어서 있는 것을 본 듯한 이질감을 느꼈다.

그의 눈에 한 가지 흥미로운 부분이 들어왔다. 최근에 추가된 ‘Vulkan 백엔드’의 성능 최적화 코드였다. ANGLE은 WebGL의 상태 기반 API를, Vulkan의 명령 기반 API로 번 '역하는 과정에서 상당한 성능 오버헤드를 겪고 있었다. 이 문제를 해결하기 위해, 후배 엔지니어들은 ‘파이프라인 캐시(Pipeline Cache)’라는 복잡한 시스템을 도입했다. 자주 사용되는 WebGL 상태의 조합을 미리 Vulkan 파이프라인으로 변환하여 저장해두는 방식이었다.

그 코드를 읽어 내려가던 드미트리는 숨을 멈췄다.
후배들이 ANGLE의 성능을 개선하기 위해 고안해 낸 그 복잡한 해결책.
그것은 놀라울 정도로, 그가 몇 년 전 WebGPU를 설계하며 만들었던 ‘렌더 파이프라인’의 개념과 본질적으로 맞닿아 있었다.

과거의 문제를 해결하려던 후배들의 노력이, 자신도 모르는 사이에 미래의 해결책을 향해 수렴하고 있었던 것이다.

그 순간, 드미트리는 깨달았다.
자신이 WebGPU를 만들 수 있었던 것은, 그가 천재적인 선구안을 가졌기 때문이 아니었다.
그의 머릿속에는 이미 ANGLE을 만들면서 겪었던 수많은 문제와 실패의 경험이 데이터베이스처럼 축적되어 있었다. WebGL의 상태 기계가 왜 비효율적인지, 드라이버 버그가 얼마나 끔찍한지, 여러 백엔드를 아우르는 추상화가 얼마나 어려운지를 그는 누구보다 뼈저리게 알고 있었다.

WebGPU는 어느 날 갑자기 하늘에서 떨어진 발명품이 아니었다.
그것은 ANGLE이라는 과거의 거인이 겪었던 고통과 한계, 그 위대한 실패의 유산 위에서 피어난 꽃이었다.

그는 과거의 자신과 현재의 자신이 하나의 선으로 연결되어 있음을 느꼈다.
낡은 노트북을 덮으며, 그는 자신에게 새로운 임무를 부여했다.
그는 종종 잊고 지냈던 ANGLE 프로젝트의 코드 리뷰와 멘토링에 다시 참여하기로 결심했다. 그곳에는 여전히 수많은 젊은 엔지니어들이 과거의 문제와 씨름하고 있었다.

그들의 고민 속에서, 그는 어쩌면 WebGPU의 다음 진화를 위한, 또 다른 영감의 씨앗을 발견하게 될지도 모를 일이었다. 미래로 나아가기 위해, 때로는 가장 먼저 과거의 부름에 응답해야 한다는 것을 그는 비로소 깨닫고 있었다.