최근 'WATaBoy'라는 게임보이 에뮬레이터 프로젝트가 웹어셈블리(WebAssembly, Wasm)의 실시간 컴파일(JIT) 기능을 활용해 기존 인터프리터 방식보다 뛰어난 성능을 달성하며 주목받고 있습니다. 특히 iOS와 같이 JIT 컴파일이 제한된 환경에서 웹 브라우저의 Wasm JIT 기능을 우회적으로 활용하여 고성능 에뮬레이션을 구현했다는 점에서 의미가 큽니다. 이는 모바일 기기에서 복잡한 에뮬레이터를 구동하는 새로운 접근 방식을 제시합니다.
이 프로젝트의 핵심은 'JIT-to-Wasm'이라는 기법입니다. 이는 게임보이의 CPU 명령어(SM83)를 직접 네이티브 머신 코드로 컴파일하는 대신, 웹어셈블리 바이트코드로 변환하는 방식입니다. 이렇게 생성된 Wasm 코드는 웹 브라우저 내부의 자바스크립트 엔진(예: WebKit의 JavaScriptCore)에 의해 다시 네이티브 머신 코드로 컴파일되어 실행됩니다. 저자는 학부 졸업 프로젝트로 이 방식을 채택하여 게임보이 에뮬레이터를 개발했고, 그 결과 네이티브 인터프리터 방식보다 더 빠른 성능을 벤치마크를 통해 입증했습니다. 이는 웹 브라우저가 Wasm 코드를 최적화하는 과정에서 발생하는 성능 이점을 활용한 것입니다.
이 기술은 단순히 게임보이 에뮬레이션의 성능 향상을 넘어, iOS와 같이 JIT 컴파일에 제약이 있는 플랫폼에서 고성능 애플리케이션을 개발할 수 있는 새로운 길을 열어줍니다. 돌핀(Dolphin)과 같은 고성능 에뮬레이터가 iOS에서 작동하기 어려운 이유가 JIT 제한 때문이었는데, JIT-to-Wasm 방식은 이러한 제약을 우회할 수 있는 잠재력을 보여줍니다. 이는 웹 기술 스택을 활용하여 플랫폼별 제한을 극복하고 더 넓은 범위의 기기에서 복잡한 소프트웨어를 실행할 수 있음을 시사하며, 향후 클라우드 게임 스트리밍이나 웹 기반 고성능 애플리케이션 개발에도 영감을 줄 수 있습니다.