‘WebGPU 성능 모범 사례’ 문서는 커뮤니티의 격렬했던 논쟁을 진정시키는 데 큰 역할을 했다. 개발자들은 이제 감정적인 주장 대신, 객관적인 기준을 가지고 각 라이브러리의 장단점을 분석하기 시작했다. 드미트리는 플랫폼의 관리자로서, 한숨 돌릴 수 있었다.
하지만 그 평화는 오래가지 않았다. 이번에는 전혀 다른 종류의 예술가들이, WebGPU의 또 다른 근본적인 한계를 드러내기 시작했다. 그들은 바로 ‘셰이더 아티스트(Shader Artist)’들이었다.
셰이더 아티스트들은 3D 모델이나 텍스처 없이, 오직 WGSL 코드만으로 경이로운 시각적 패턴과 애니메이션을 만들어내는 사람들이었다. 셰이더토이(Shadertoy)와 같은 커뮤니티에서 활동하는 그들은, 웹 그래픽의 최전선에서 가장 창의적인 실험을 하는 이들이었다.
문제는 한 유명 셰이더 아티스트, ‘이녜고 퀼레즈(Iñigo Quílez)’가 자신의 블로그에 올린 글에서 시작되었다.
“WebGPU는 놀라운 도구입니다. 하지만 제 창의력에 예상치 못한 족쇄를 채우고 있습니다. 바로 ‘컴파일 시간’입니다.”
그는 자신이 만든 복잡한 프랙탈 셰이더를 예로 들었다.
“저는 셰이더 코드를 한 줄 한 줄 수정하며, 그 결과가 화면에 어떻게 실시간으로 반영되는지를 즉각적으로 확인해야 합니다. 이것이 저의 작업 방식입니다. 하지만 WebGPU에서는, 코드를 한 글자만 수정해도, 브라우저는 수천 줄의 셰이더를 다시 컴파일하기 위해 1~2초의 시간을 소요합니다. 이 작은 지연이, 제 창작의 흐름을 끊임없이 방해하고 있습니다.”
그의 글은 수많은 셰이더 아티스트들의 공감을 얻었다.
“WebGL 시절에는 이런 문제가 없었다. 셰이더 컴파일이 훨씬 빨랐다.”
“빠른 런타임 성능을 위해, 인터랙티브한 개발 경험을 희생한 것인가?”
드미트리는 이 문제를 심각하게 받아들였다.
WebGPU는 분명 런타임 성능을 위해 ‘사전 컴파일’이라는 비용을 선택했다. 그리고 셰이더 사전 컴파일과 같은 장기적인 해결책을 모색하고 있었다. 하지만 그것은 프로덕션 환경을 위한 것이었다. 지금 당장, 이 예술가들의 창작 과정을 고통스럽게 만드는 ‘개발 환경’의 문제를 해결할 방법은 없는 것일까?
그는 Dawn의 WGSL 컴파일러 팀을 소집했다.
“우리는 두 개의 다른 모드가 필요할지도 몰라. ‘최적화 모드(Optimized Mode)’와 ‘빠른 개발 모드(Fast Development Mode)’.”
그는 아이디어를 설명했다.
“개발자가 브라우저 개발자 도구에서 특정 플래그를 켜면, 우리 컴파일러는 동작 방식을 바꾸는 거야. 최종 성능을 위한 복잡한 최적화 과정들을 모두 건너뛰고, 일단 ‘동작하는’ 네이티브 셰이더 코드를 가장 빠른 속도로 생성해내는 데만 집중하는 거지. 런타임 성능은 조금 떨어지겠지만, 컴파일 시간은 수십 배 빨라질 수 있을 거야.”
이것은 마치 소프트웨어 개발에서 ‘디버그 빌드’와 ‘릴리즈 빌드’를 나누는 것과 같은 개념이었다.
하지만 컴파일러 팀의 리더인 레나는 고개를 저었다.
“그렇게 간단한 문제가 아닙니다, 드미트리. 최적화를 건너뛰는 것만으로는 부족해요. 진짜 시간은 WGSL 코드를 파싱하고, 문법 트리를 분석하고, 타입 검사를 하는 과정에서 소요됩니다. 이걸 빠르게 만들려면, 우리 컴파일러의 아키텍처 자체를 바꿔야 합니다. ‘점진적 컴파일(Incremental Compilation)’을 지원하도록요.”
점진적 컴파일.
개발자가 수정한 코드의 일부, 즉 변경된 함수나 구조체만 다시 파싱하고 컴파일하는 기술. 전체 파일을 다시 읽는 대신, 변경된 부분만 교체함으로써 컴파일 시간을 획기적으로 단축시키는, 매우 고등한 컴파일러 기술이었다.
“그걸 구현하는 데는 수개월, 어쩌면 1년 이상이 걸릴 수도 있습니다. 우리에게 그럴 만한 자원이 있을까요?”
레나의 질문은 현실적이었다.
바로 그 순간, 드미트리의 머릿속에 또 다른 아이디어가 스쳤다.
“만약… 우리가 컴파일을 브라우저에서 하지 않는다면?”
모두가 그를 바라보았다.
“생각해 봐. 자바스크립트 개발자들이 타입스크립트 코드를 어떻게 디버깅하지? 브라우저는 타입스크립트를 직접 실행하지 않아. 개발자의 컴퓨터에서 실행되는 ‘타입스크립트 언어 서버’가 실시간으로 코드를 분석하고, 에러를 찾아내고, 자동 완성을 제공해주지.”
그는 새로운 비전을 제시했다.
“우리도 ‘WGSL 언어 서버’를 만드는 거야. 오픈소스로. 개발자들은 VS Code와 같은 자신들의 코드 에디터에 이 언어 서버 확장 기능을 설치하는 거지. 그러면 개발자가 코드를 작성하는 바로 그 순간, 언어 서버가 백그라운드에서 점진적으로 코드를 컴파일하고, 실시간으로 에러를 표시해주게 되는 거야.”
이 방식은 브라우저의 부담을 완전히 덜어주었다.
셰이더 아티스트는 자신의 에디터에서 코드 수정 즉시 피드백을 받고, 모든 에러가 사라진 완벽한 코드만을 브라우저로 전송하게 된다. 브라우저는 최종 코드만 받아서 한 번만 컴파일하면 되니, 인터랙티브한 개발 경험과 빠른 런타임 성능이라는 두 마리 토끼를 모두 잡을 수 있었다.
이것은 문제를 해결하는 관점을, 브라우저 내부에서 개발자 생태계 전체로 확장하는 발상의 전환이었다.
드미트리는 즉시, 이 ‘WGSL 언어 서버’ 프로젝트를 구글이 직접 주도하는 공식 오픈소스 프로젝트로 추진하기 시작했다.
그는 이녜고 퀼레즈의 블로그에 직접 댓글을 남겼다.
“당신의 고통에 깊이 공감합니다. 저희는 지금, 당신과 같은 예술가들이 창작의 흐름을 방해받지 않도록, 개발 환경 자체를 혁신하는 새로운 프로젝트를 시작하려 합니다. WebGPU는 단지 빠른 런타임을 위한 기술이 아니라, 창의적인 과정을 위한 최고의 도구가 되어야 한다고 믿습니다.”
그의 댓글은, WebGPU가 단순한 실행 플랫폼을 넘어, 이제는 창작자들의 ‘보이지 않는 예술’ 과정까지 보살피는, 더 성숙한 생태계로 나아가고 있음을 알리는 신호탄이었다.