미래의 파편, 확장 기능

452025년 08월 25일4

‘헤드리스 WebGPU’라는 야심 찬 목표가 설정되었지만, 팀은 곧바로 현실의 벽에 부딪혔다. 그것은 W3C의 느리고 신중한 표준화 절차였다.

W3C 커뮤니티 그룹 미팅.
드미트리가 헤드리스 WebGPU의 필요성을 역설했지만, 돌아온 반응은 미지근했다.

애플의 딘 잭슨이 신중하게 말했다.
“매우 흥미로운 사용 사례입니다, 드미트리. 하지만 이것은 WebGPU 1.0의 핵심 철학에서 벗어나는 큰 변화입니다. 우리는 먼저 사용자의 화면에 그리는 경험을 완벽하게 다듬는 데 집중해야 합니다. 이 논의는 시기상조라고 봅니다.”

모질라의 알렉스 역시 동의했다.
“이 기능을 사양에 추가하려면, 보안과 안정성에 대한 수많은 새로운 고려사항이 필요합니다. 섣불리 움직였다가 오히려 기존의 안정성을 해칠 수 있습니다. 충분한 연구와 합의가 필요합니다.”

그들의 말은 틀리지 않았다. 표준은 안정성이 생명이었다. 구글 클라우드 팀의 시급한 요구를 위해, 전체 표준을 흔드는 위험을 감수할 수는 없었다.

회의가 끝나고, 드미트리는 깊은 고민에 빠졌다. 표준화 절차를 기다리자니 몇 년이 걸릴지 알 수 없었다. 그렇다고 구글 독자적으로 비표준 기능을 만들어 넣는 것은, 그가 그토록 경계했던 ‘웹의 파편화’를 스스로 저지르는 꼴이었다.

진퇴양난의 상황.
그때, 그의 머릿속에 과거의 한 논의가 스쳐 지나갔다.
‘선택적 확장 기능(Optional Extension)’.

그는 즉시 팀 미팅을 소집했다.
“우리는 사양 전체를 바꾸려 할 필요가 없어. 대신, 이 기능을 원하는 개발자들만이 사용할 수 있는 ‘실험적인 깃발’을 먼저 세우는 거야.”

그는 화이트보드에 WebGPU의 초기화 과정을 그렸다.

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

“현재의 구조는 이렇지. 하지만 만약, requestDevice 함수에 새로운 ‘옵션’을 추가한다면?”

그는 코드를 수정했다.

const device = await adapter.requestDevice({
  requiredFeatures: ['headless'],
});

requiredFeatures 배열에 우리가 제안하는 실험적인 기능의 이름을 문자열로 넣는 거야. 만약 브라우저가 이 ‘headless’라는 기능을 지원한다면, 캔버스 없이도 작동하는 특별한 Device 객체를 반환해주는 거지. 만약 지원하지 않는다면, requestDevice는 실패하고 개발자는 이 기능을 사용할 수 없다는 것을 명확히 알게 돼.”

이것은 절묘한 해법이었다.
핵심 사양은 전혀 건드리지 않는다. 기존의 모든 코드는 예전과 똑같이 작동한다. 오직 이 새로운 기능을 명시적으로 요청하고, 그 위험을 감수할 준비가 된 개발자들만이 실험에 참여할 수 있다.

카이가 눈을 빛내며 말했다.
“마치 크롬의 about:flags 페이지와 같은 개념이군요. API 레벨에서 구현하는 실험 기능 플래그!”

“정확해.”
드미트리가 고개를 끄덕였다.
“이 방식을 통해, 우리는 표준화가 완료되기 전이라도 새로운 기능의 프로토타입을 만들고, 실제 사용자들의 피드백을 받을 수 있어. 여기서 얻어진 경험과 데이터는 훗날 이 기능이 정식 표준으로 승격될 때 가장 강력한 근거 자료가 될 거야.”

이것은 ‘미래의 파편’을 현재로 가져오는 방법이었다.
WebGPU의 안정적인 본체는 그대로 둔 채, 가장자리에 실험적인 모듈을 붙였다 떼었다 할 수 있는 유연한 구조.

이 제안은 W3C 커뮤니티 그룹에서 훨씬 긍정적인 반응을 얻었다.
“핵심 사양의 안정성을 해치지 않는다는 전제 하에, 매우 합리적인 접근법입니다.”
“각 브라우저 벤더가 자신들의 실험적인 아이디어를 테스트해 볼 좋은 기회가 될 수 있겠군요.”

‘확장 기능’이라는 개념은 빠르게 공식적인 절차로 자리 잡았다.
이제 WebGPU는 두 개의 속도로 진화하기 시작했다. 하나는 모든 브라우저가 함께 발맞추는, 느리고 신중한 표준의 진화. 다른 하나는 각 브라우저가 각자의 필요와 비전에 따라 새로운 가능성을 탐색하는, 빠르고 실험적인 확장의 진화.

Dawn 팀은 즉시 ‘headless’ 확장 기능의 구현에 착수했다.
그들의 작업은 더 이상 표준화의 장벽에 막혀 있지 않았다. 그들은 이제 미래를 기다리는 대신, 스스로 미래의 작은 조각을 만들어내고 있었다.

얼마 후, 구글 클라우드 팀의 데이비드로부터 한 통의 메시지가 도착했다.
“최신 크롬 카나리 빌드에서 ‘headless’ 확장 기능을 테스트했습니다. 완벽하게 작동합니다. 당신들이 웹의 역사를 다시 쓰고 있습니다, 드미트리.”

드미트리는 메시지를 보며 조용히 미소 지었다. 그들은 역사를 쓴 것이 아니었다. 그들은 단지, 미래가 현재로 흘러 들어올 수 있는 작은 통로를 열었을 뿐이었다. 그리고 이제 그 통로를 통해, 수많은 새로운 아이디어들이 쏟아져 들어올 터였다.