MVP, 최소 기능 제품

202025년 08월 12일4

오리진 트라이얼의 폭풍이 지나가고 있었다. 쏟아지는 피드백 속에서 WebGPU는 깎이고 다듬어지며 점차 안정된 형태를 갖추어 갔다. 이제 커뮤니티와 Dawn 팀의 시선은 하나의 목표를 향하고 있었다. 바로 MVP(Minimum Viable Product), 즉 ‘최소 기능 제품’의 완성이었다.

MVP는 정식 출시를 위해 ‘최소한 이 기능들은 반드시 포함되어야 한다’고 합의된 핵심 기능의 집합이었다. 그것은 WebGPU 1.0의 공식적인 얼굴이 될 것이었다.

W3C 그룹의 편집자 회의. 드미트리와 각 브라우저 벤더의 대표들이 다시 한번 머리를 맞댔다. 화두는 ‘무엇을 포함하고, 무엇을 제외할 것인가?’였다.

“메시 셰이더(Mesh Shaders)는 이번 MVP에 포함하기엔 너무 이릅니다. 아직 하드웨어 지원도 보편적이지 않고, 사양 논의도 초기 단계입니다.”
모질라의 알렉스가 의견을 냈다. 메시 셰이더는 GPU가 스스로 지오메트리를 생성하고 처리하는 혁신적인 기술이었지만, 아직은 시기상조라는 데 모두가 동의했다.

“레이 트레이싱(Ray Tracing)도 마찬가지입니다. 언젠가는 웹에서 실시간 레이 트레이싱을 보게 될 날이 오겠지만, 그건 WebGPU 2.0 혹은 그 이후의 목표가 되어야 할 겁니다.”
마이크로소프트의 엔지니어가 덧붙였다.

회의는 마치 조각가가 거친 대리석 덩어리에서 불필요한 부분을 쳐내는 과정과 같았다. 미래에 추가될 화려하고 강력한 기능들은 과감하게 ‘Post-MVP(MVP 이후)’라는 이름표를 붙여 뒤로 미뤄졌다. 지금 중요한 것은 가장 근본적이고 안정적인 핵심을 먼저 완성하는 것이었다.

수많은 논의 끝에, WebGPU 1.0 MVP의 윤곽이 드러났다.

  • 렌더 파이프라인: 화면에 2D/3D 그래픽을 그리기 위한 모든 기능. 버텍스 및 프래그먼트 셰이더, 블렌딩, 뎁스 테스트 등 WebGL의 모든 기능을 포함하고 뛰어넘는 핵심.
  • 컴퓨트 파이프라인: 범용 계산을 위한 컴퓨트 셰이더. 웹에서의 고성능 병렬 처리를 가능하게 하는, WebGPU의 가장 큰 차별점.
  • WGSL 1.0: MVP 기능에 필요한 모든 문법과 내장 함수를 포함하는 셰이더 언어의 첫 번째 공식 버전.
  • 자원 관리: 버퍼, 텍스처, 샘플러, 그리고 이들을 묶는 바인드 그룹.
  • 기본적인 동기화: Queue와 같은 객체들을 통한 CPU와 GPU 간의 명시적인 작업 제출 및 관리.

이것이 바로 WebGPU 1.0의 약속이었다. 더도 말고 덜도 말고, 이 기능들만큼은 모든 브라우저에서 동일하고 안정적으로 동작할 것을 보장하겠다는 선언.

MVP의 범위가 확정되자, Dawn 팀의 개발 방향도 명확해졌다. 이제는 새로운 기능을 탐색하는 대신, 정의된 MVP 기능들의 안정성을 100%까지 끌어올리는 데 모든 역량을 집중해야 했다.

드미트리는 팀의 칸반 보드에 새로운 규칙을 추가했다.
“지금부터 MVP 범위에 포함되지 않는 모든 이슈와 기능 요청은 ‘Post-MVP’ 백로그로 옮깁니다. 우리의 유일한 목표는 MVP 기능들의 버그를 제로(Zero)로 만드는 것입니다.”

팀은 ‘버그 번다운(Bug Burndown)’ 체제에 돌입했다. 매일 아침, 남은 버그의 개수를 그래프로 확인하며 목표를 향해 나아갔다.

  • 안드로이드 특정 기기에서 간헐적으로 발생하는 렌더링 깨짐 현상.
  • 리눅스 환경에서 Vulkan 드라이버와의 호환성 문제.
  • WGSL 컴파일러가 특정 엣지 케이스에서 잘못된 코드를 생성하는 버그.

남아있는 과제들은 하나같이 까다롭고 어려운 것들이었다. 하지만 이제 팀에게는 ‘언젠가 고치자’는 막연함 대신, ‘출시를 위해 반드시 넘어야 할 산’이라는 명확한 목표가 생겼다.

개발자들은 코드 한 줄을 수정하고, 수십 개의 테스트를 돌려 다른 곳에서 부작용이 없는지 확인했다. QA 팀은 상상할 수 있는 모든 기기와 운영체제 조합에서 MVP 기능들을 반복적으로 테스트했다.

시간이 흐르면서, 버그 번다운 그래프의 곡선은 서서히 아래로 향하기 시작했다. 붉은색으로 가득했던 이슈 목록이 하나둘 초록색으로 바뀌어갔다. 마침내 모든 주요 버그가 해결되고, MVP 기능들이 모든 플랫폼에서 안정적으로 동작하는 순간이 찾아왔다.

드미트리는 팀원들을 둘러보았다. 모두의 얼굴에는 길고 긴 전투를 마친 병사처럼 깊은 피로가 서려 있었지만, 그 눈빛만큼은 그 어느 때보다 단단하고 빛나고 있었다.

“우리가 해냈습니다.”

드미트리의 한마디에 연구실에는 조용한 박수가 터져 나왔다.
MVP 완성. 이것은 WebGPU 프로젝트의 1부가 끝났음을 알리는 신호였다. 수년간의 논쟁과 설계, 구현의 시대가 막을 내리고, 이제 곧 세상의 모든 개발자들에게 그 결과물을 선보일, 정식 출시라는 2부의 서막이 열리려 하고 있었다.