EmulatorJS란 무엇인가? 에뮬레이션 엔진 설명

EmulatorJS는 libretro 코어가 모든 최신 브라우저에서 실행되도록 하는 오픈소스 JavaScript 래퍼입니다. 이 글에서는 EmulatorJS가 무엇을 하는지, 왜 중요한지, 그리고 어떤 시스템을 에뮬레이션할 수 있고 할 수 없는지 설명합니다.

Mira Köhler 이(가) 에 마지막으로 검토

정의

EmulatorJS는 WebAssembly로 컴파일된 libretro 에뮬레이터 코어를 감싸는 오픈소스 JavaScript 프론트엔드입니다. 2017년에 처음 출시되었으며 현재 GitHub의 기여자 커뮤니티에 의해 유지보수되고 있습니다. 간단하고 안정적인 API — ROM 로드, 컨트롤 설정, 상태 저장, 스크린샷 촬영 — 를 제공하면서 기초가 되는 코어의 복잡성을 숨깁니다.

내부 작동 원리

libretro는 에뮬레이터 코어(콘솔의 CPU, 메모리, 그래픽을 시뮬레이션하는 프로그램)와 프론트엔드(컨트롤, 오디오, 캔버스를 연결하는 UI) 사이의 인터페이스를 표준화하는 프로젝트입니다. EmulatorJS는 C/C++로 작성된 기존 libretro 코어 — 예를 들어 SNES용 Snes9x, NES용 FCEUmm, Game Boy Advance용 mGBA — 를 Emscripten을 사용하여 WebAssembly로 컴파일합니다.

게임을 로드할 때 EmulatorJS는 해당 코어를 Web Worker로 스트리밍하고, ROM 바이트를 전달하며, 코어가 초당 60회 렌더링되는 캔버스를 노출합니다. 오디오는 낮은 지연 시간의 재생을 위해 Web Audio의 AudioWorklet을 통해 라우팅됩니다. 입력은 키보드, 온스크린 터치 오버레이, 또는 Gamepad API에서 옵니다.

지원 시스템

EmulatorJS는 카트리지 시대부터 초기 디스크 시대의 광범위한 하드웨어를 지원합니다:

  • Nintendo: NES, SNES, Game Boy, Game Boy Color, Game Boy Advance, Nintendo 64
  • Sega: Master System, Genesis/Mega Drive, Sega CD, 32X, Saturn
  • NEC: PC Engine / TurboGrafx-16, PC-FX
  • Atari: 2600, 5200, 7800, Lynx, Jaguar
  • Sony: PlayStation 1
  • SNK: Neo Geo, Neo Geo Pocket / Color
  • 기타: Arcade (MAME), MSX, ColecoVision, Vectrex, WonderSwan

에뮬레이션할 수 없는 것 (아직)

EmulatorJS는 브라우저에서 쾌적하게 실행되는 것의 범위로 제한됩니다. PlayStation 2, GameCube, Xbox, Wii, 3DS는 불가능합니다 — 이들은 GPU 드라이버, 브라우저가 보안상의 이유로 제한하는 JIT 컴파일, 그리고 수 기가바이트의 RAM이 필요합니다. WebGPU와 SharedArrayBuffer가 성숙해짐에 따라 결국 가능해질 것이지만, 2026년 중반 현재로서는 네이티브 전용으로 남아 있습니다.

EmulatorJS vs RetroArch vs 커스텀 WASM 포트

RetroArch는 libretro용 데스크톱 및 모바일 프론트엔드로, EmulatorJS와 가장 유사하지만 브라우저가 아닌 네이티브로 실행됩니다. 커스텀 WebAssembly 포트(예: 수작업으로 튜닝된 Snes9x 빌드)는 libretro 추상화 계층을 축소하여 순수 성능에서 EmulatorJS를 능가할 수 있지만, 광범위한 시스템 지원을 포기합니다. EmulatorJS는 2~3개 이상의 플랫폼을 지원하고자 하는 모든 브라우저 기반 사이트를 위한 실용적인 기본값입니다.

자주 묻는 질문

EmulatorJS가 유일한 브라우저 에뮬레이터인가요?
아니요, 하지만 가장 널리 배포된 것입니다. 개별 코어의 커스텀 WebAssembly 포트(Snes9x, mGBA, FCEUmm)가 존재하며, 스트리밍 에뮬레이션 서비스에서 구축한 독점 엔진도 있습니다.
EmulatorJS는 오픈소스인가요?
네. MIT 라이선스이며 소스는 GitHub에 있습니다. 이것이 감싸는 libretro 코어는 개별적으로 라이선스됩니다(대부분은 GPL).
EmulatorJS는 오프라인에서 작동하나요?
코어와 ROM이 로드되면 에뮬레이터는 네트워크 호출 없이 전적으로 브라우저에서 실행됩니다. 탭을 닫았다가 다시 열면 호스트 사이트가 서비스 워커를 사용하여 캐시하지 않는 한 코어를 다시 다운로드해야 합니다.