2004년 명작이 탭 하나로
혹시 하프라이프2(Half-Life 2)라는 게임 기억하시나요? 2004년에 밸브(Valve)가 내놓은 FPS 게임인데요, 당시 물리 엔진이랑 그래픽으로 게임 역사에 한 획을 그은 작품이거든요. 그런데 이 묵직한 게임이 이제 따로 설치할 필요도 없이 그냥 웹 브라우저 주소창에 URL 하나 치면 바로 실행된다고 하면 좀 놀랍지 않으세요?
원래 이런 게임은 C++로 짜여 있어서 윈도우나 리눅스 같은 운영체제 위에서 직접 돌아가도록 만들어졌어요. 브라우저랑은 완전히 다른 세계인 거죠. 그런데 이걸 브라우저 안으로 통째로 끌고 들어온 거예요.
어떻게 가능한 걸까 — WebAssembly 이야기
여기서 핵심 기술이 바로 웹어셈블리(WebAssembly), 줄여서 WASM이라고 부르는 녀석이에요. 이게 뭐냐면요, 원래 브라우저는 자바스크립트만 알아들었거든요. 근데 자바스크립트는 게임처럼 무거운 연산을 빠르게 돌리기엔 좀 느려요. 그래서 'C++ 같은 언어로 짠 프로그램을 브라우저가 거의 네이티브 속도로 돌릴 수 있게 하자'고 만든 게 WASM이에요. 일종의 브라우저용 기계어라고 생각하면 편해요.
그럼 C++로 된 게임 코드를 어떻게 WASM으로 바꿀까요? 여기서 Emscripten(엠스크립튼)이라는 도구가 등장해요. 이건 C/C++ 코드를 받아서 WASM으로 변환해주는 컴파일러인데요. 게임이 OpenGL로 그림을 그리던 부분은 브라우저의 WebGL이나 WebGPU로 자동으로 연결해주고, 파일을 읽고 쓰던 부분은 브라우저 안의 가상 파일 시스템으로 바꿔줘요. 덕분에 운영체제에 직접 말 걸던 코드가 브라우저 환경에서도 그대로 돌아가게 되는 거죠.
물론 쉬운 일은 아니에요. 게임 데이터(텍스처, 사운드, 맵)가 수 기가바이트인데 이걸 브라우저로 다 받아와야 하고, 메모리 관리도 까다롭고, 게임패드나 마우스 잠금 같은 입력 처리도 다시 맞춰야 하거든요. 이런 걸 하나하나 손봐서 결국 완성도 있게 굴러가게 만든 거예요.
사실 처음은 아니에요
브라우저에서 게임 돌리는 시도는 꽤 역사가 깊어요. 둠(Doom)이나 퀘이크(Quake) 같은 고전 게임은 이미 오래전에 브라우저로 포팅됐고요. 유니티(Unity)나 언리얼(Unreal) 같은 게임 엔진도 WebGL/WebAssembly 빌드를 공식 지원해요. 최근엔 WebGPU라는 새로운 그래픽 API가 브라우저에 들어오면서, 예전엔 무리였던 고사양 3D 게임도 점점 브라우저에서 돌릴 수 있게 됐어요. 이번 하프라이프2 포팅도 바로 그 흐름 위에 서 있는 거죠.
한국 개발자에게 주는 의미
게임 개발자가 아니어도 이건 의미가 커요. WASM은 게임뿐 아니라 무거운 클라이언트 앱을 브라우저로 옮기는 데 다 쓸 수 있거든요. 예를 들어 피그마(Figma)도 C++ 렌더링 엔진을 WASM으로 돌려서 그 빠른 속도를 내는 거예요. 영상 편집, 이미지 처리, CAD 같은 무거운 작업을 설치 없이 웹에서 제공하고 싶다면 WASM이 답이 될 수 있어요. 사내 도구나 데모를 만들 때 '설치 없이 링크만 보내면 바로 실행'이라는 경험은 사용자한테 정말 강력하거든요.
한번 Emscripten으로 간단한 C 프로그램을 WASM으로 빌드해서 브라우저에서 돌려보는 것만으로도 시야가 확 넓어질 거예요. 생각보다 진입 장벽이 높지 않아요.
마무리
설치 없이 링크 하나로 풀스펙 게임이 돌아가는 시대, WASM이 웹의 한계를 어디까지 밀어붙일지 지켜볼 만해요. 여러분은 어떤 무거운 앱을 브라우저로 옮겨보고 싶으신가요?
🔗 출처: Hacker News