← 블로그 목록으로
TECH2026년 3월 23일⏱ 8분 읽기· 글 RetroArcade 편집팀

WebAssembly가 레트로 게임 에뮬레이션을 어떻게 바꿨나

같은 PS1 에뮬레이터 코어가 순수 JavaScript에서는 원래 속도의 절반도 못 내다가, WebAssembly(WASM)로 바꾸자 네이티브에 근접한 속도로 돌아갑니다. 2017년 Chrome·Firefox·Safari·Edge가 WASM 공식 지원을 동시에 시작하면서, 수십 년 된 C/C++ 에뮬레이터 코드가 손대지 않고도 브라우저에서 구동되기 시작한 것이 결정적이었습니다. 이 글은 그 원리와, RetroArcade가 이를 어떻게 활용하는지 기술적으로 짚어봅니다.

에뮬레이션 역사 — WASM 이전의 브라우저 게임

브라우저에서 레트로 게임을 즐기려는 시도는 오래전부터 있었습니다. 1990년대 말에는 Java Applet, 2000년대에는 Adobe Flash가 많이 사용되었습니다. 그러나 Java는 느렸고, Flash는 2020년 말 공식 지원 종료와 함께 역사 속으로 사라졌습니다.

순수 JavaScript 에뮬레이터도 존재했습니다. JSNES, JSMESS 같은 프로젝트들이 JavaScript만으로 NES·SNES를 구동했지만, 심각한 성능 문제가 있었습니다. JS 인터프리터의 한계로 PS1·GBA 게임 같은 복잡한 시스템은 원래 속도의 30~50% 수준에 불과했고, 음악은 끊기고 그래픽은 지연되었습니다.

📊 연구에 따르면 동일한 에뮬레이터 코어를 JavaScript로 실행했을 때와 WebAssembly로 실행했을 때의 성능 차이는 최대 5~10배에 달합니다.

WebAssembly란 무엇인가?

WebAssembly 공식 사이트(webassembly.org)에 따르면, WASM은 "스택 기반 가상 머신을 위한 이진 명령어 형식(binary instruction format)"입니다. 쉽게 말해 C, C++, Rust, Go 등의 언어로 작성된 코드를 컴파일하면.wasm파일이 생성되고, 브라우저는 이를 네이티브에 가까운 속도로 실행합니다.

WASM의 핵심적인 특징은 세 가지입니다. 첫째, 성능: JIT 컴파일러를 통해 기계어 수준에 가까운 실행 속도를 냅니다. 둘째, 보안: 샌드박스 실행 환경으로 파일 시스템이나 시스템 리소스에 직접 접근할 수 없습니다. 셋째, 이식성: 동일한 .wasm 파일이 Windows·macOS·Linux·Android·iOS에서 완전히 동일하게 동작합니다.

기술성능보안현재 상태
Java Applet낮음중간⛔ 2018 종료
Flash Player중간낮음⛔ 2020 종료
Pure JavaScript중하높음✅ 현재 사용
WebAssembly (WASM)높음 (네이티브 ~80%)높음✅ 현재 표준

RetroArcade의 WASM 에뮬레이션 아키텍처

RetroArcade는 EmulatorJS 프로젝트를 기반으로 합니다. EmulatorJS는 Libretro 생태계의 에뮬레이터 코어들을 Emscripten 툴체인으로 WebAssembly에 컴파일하여 제공합니다.

지원하는 에뮬레이터 코어는 다음과 같습니다:

시스템WASM 코어원본 언어호환성
PlayStation 1pcsx_rearmedC매우 높음
Super Nintendo (SNES)snes9xC++매우 높음
Game Boy AdvancemGBAC매우 높음
Nintendo 64mupen64plus_nextC높음
NES / 패미컴fceummC매우 높음
Sega Mega Drivegenesis_plus_gxC매우 높음

WASM 에뮬레이션의 현재 한계와 미래

현재 한계점

  • 메모리 제한: 브라우저 탭 하나는 통상 4GB 이하의 메모리를 사용할 수 있습니다.
  • 단일 스레드: WASM의 멀티스레딩(SharedArrayBuffer)은 HTTPS 환경에서만 활성화됩니다.
  • 저장 장치: 파일 시스템에 직접 접근 불가능 — IndexedDB 또는 Origin Private File System 사용.
  • 정밀 타이밍: CPU 사이클 단위의 정확한 에뮬레이션은 여전히 네이티브 앱이 유리합니다.

다가오는 WASM 발전 방향

W3C는 현재 WASM Component ModelWASM GC(Garbage Collection)표준화 작업을 진행 중입니다. WASM Threads와 SIMD(Single Instruction Multiple Data) 명령어 지원이 확산되면서 PS2·GameCube 수준의 에뮬레이션도 브라우저에서 가능해질 전망입니다.

자주 묻는 질문 (FAQ)

WebAssembly 에뮬레이터가 PC에 설치된 에뮬레이터보다 느린가요?

현재 기준으로 WASM은 네이티브 C++ 코드 대비 약 80~90% 성능을 냅니다. PS1, GBA, SNES 게임은 이 차이가 거의 체감되지 않으며, N64 같은 더 복잡한 시스템은 고성능 CPU에서 더 쾌적합니다.

WASM 에뮬레이터를 실행할 때 인터넷 연결이 필요한가요?

최초에 코어와 게임 ROM을 로드할 때 네트워크 연결이 필요합니다. 이후 게임 중에는 인터넷 연결이 없어도 로컬에서 실행됩니다.

WebAssembly는 바이러스나 악성코드를 심을 수 있나요?

WASM은 브라우저 샌드박스 내에서만 실행되며, 파일 시스템이나 OS API에 직접 접근할 수 없습니다. 일반적인 웹페이지와 동일한 보안 수준이 적용됩니다.

어떤 브라우저에서 WASM 에뮬레이터 성능이 가장 좋나요?

벤치마크 기준으로는 Chrome V8과 Firefox SpiderMonkey JIT가 가장 우수한 WASM 성능을 보입니다. 2025년 현재는 Chrome 최신 버전을 권장합니다.

관련 글: 브라우저 에뮬레이션 기능 자세히 보기 → | PS1 명작 TOP 20 →

← 블로그 목록으로 돌아가기