자주자주 공지를 확인하세요!

SpiderMonkey

Gaon12 (토론 / 기여)님의 2026년 10월 16일 (금) 21:16 판 (SpiderMonkey 문서 신규 작성: 역사(넷스케이프~2026 asm.js 종료), JIT 계층 구조, GC, 사용처, 비교)
(차이) ← 이전 판 / 최신판 (차이) / 다음 판 → (차이)
자바스크립트 엔진
브라우저 내장 V8 V8 (크롬·크로미움) · SpiderMonkey SpiderMonkey (파이어폭스) · JavaScriptCore JavaScriptCore (사파리) · LibJS (래디버드)
경량·임베디드 QuickJS · Hermes (리액트 네이티브) · Duktape · JerryScript · Boa · Espruino
런타임 Node.js Node.js · Deno Deno · Bun
개발 종료 Chakra Chakra · JScript (인터넷 익스플로러) · Carakan (오페라) · Rhino · Nashorn (자바)
관련 기술 자바스크립트 · ECMAScript · WebAssembly · JIT 컴파일러 · 가비지 컬렉션 · 브라우저 엔진
SpiderMonkey
SpiderMonkey의 로고
원작자 브렌던 아이크(Brendan Eich) / 넷스케이프
개발자 모질라 재단 / 모질라 코퍼레이션
발표일 1995년 (넷스케이프 내비게이터 2.0)
버전 정보 파이어폭스와 같은 번호로 릴리스 (2026년 10월 현재 158)
개발 상태 개발 중
프로그래밍 언어 C++, Rust, 자바스크립트
운영 체제 Windows, macOS, 리눅스, 안드로이드 등
종류 자바스크립트 엔진, WebAssembly 엔진
라이선스 모질라 공개 라이선스 2.0
웹 사이트 spidermonkey.dev

개요

SpiderMonkey(스파이더몽키)는 모질라가 개발하는 오픈 소스 자바스크립트 엔진이자 WebAssembly 엔진이다. 파이어폭스를 비롯한 Gecko 기반 브라우저에서 웹 페이지의 자바스크립트와 WebAssembly 코드를 실행하는 역할을 맡고 있다.

1995년 넷스케이프의 브렌던 아이크가 자바스크립트라는 언어를 만들면서 함께 만든 세계 최초의 자바스크립트 엔진이 그 시초다. 즉 자바스크립트와 나이가 같은, 현역 엔진 중 가장 오래된 엔진이다. 구글의 V8, 애플의 JavaScriptCore와 함께 현재 남아 있는 3대 브라우저 자바스크립트 엔진으로 꼽힌다.

C++를 중심으로 작성되었고, 일부 구성 요소는 Rust로 작성되어 있다. 라이선스는 모질라 공개 라이선스(MPL) 2.0이며, 브라우저 밖에서도 쓸 수 있도록 임베딩 API(JSAPI)와 독립 실행용 셸(js)을 제공한다.

명칭

이름의 유래에 대해 공식적으로 자세히 밝혀진 바는 없지만, 이후 모질라는 새로운 JIT 컴파일러를 만들 때마다 TraceMonkey, JägerMonkey, IonMonkey, OdinMonkey, WarpMonkey처럼 ○○Monkey라는 이름을 붙이는 전통을 이어 왔다. WebAssembly 관련 컴파일러에는 북유럽 신화의 신 이름을 딴 BaldrMonkey, RabaldrMonkey 같은 이름도 쓰였다. 한국어로는 '스파이더몽키'라고 읽는다.

역사

탄생 (1995~1998)

1995년 넷스케이프에 입사한 브렌던 아이크는 웹 페이지에 넣을 간단한 스크립트 언어를 단 10일 만에 설계해 구현했다. 이 언어는 Mocha → LiveScript를 거쳐 JavaScript라는 이름으로 넷스케이프 내비게이터 2.0에 탑재되었는데, 이때 언어를 실행하던 인터프리터가 SpiderMonkey의 원형이다.

1998년 넷스케이프가 브라우저 소스 코드를 공개하면서 모질라 프로젝트가 출범했고, 자바스크립트 엔진도 C로 재작성되어 SpiderMonkey라는 이름으로 오픈 소스가 되었다. 이후 모질라 스위트, 파이어폭스(2004), 썬더버드 등 모질라의 모든 제품에 들어갔다.

JIT 경쟁 시대 (2008~2013)

2008년 구글 크롬이 빠른 자바스크립트 엔진 V8을 들고 나오면서 브라우저 자바스크립트 속도 경쟁이 시작되었다. SpiderMonkey도 이에 맞서 JIT 컴파일러를 차례로 도입했다.

이름 도입 설명
TraceMonkey 2009년, 파이어폭스 3.5 자주 실행되는 반복문의 실행 경로를 '추적'(tracing)해 기계어로 컴파일하는 트레이싱 JIT. 특정 벤치마크에서는 매우 빨랐지만, 코드 흐름이 복잡하면 효과가 떨어졌다.
JägerMonkey 2011년, 파이어폭스 4 함수 단위로 컴파일하는 메서드 JIT. TraceMonkey의 약점을 보완했다.
IonMonkey 2013년, 파이어폭스 18 중간 표현(IR)을 이용해 본격적인 최적화를 수행하는 최적화 컴파일러. 이후 약 8년간 최상위 계층으로 쓰였다.
Baseline Compiler 2013년, 파이어폭스 23 빠르게 컴파일하면서 타입 정보를 수집하는 중간 계층. TraceMonkey와 JägerMonkey를 대체했다.
OdinMonkey 2013년, 파이어폭스 22 asm.js 전용 사전(AOT) 컴파일러. 후술.

asm.js와 WebAssembly

2013년 모질라는 C/C++ 프로그램을 웹에서 거의 네이티브 속도로 돌리기 위해, 엔진이 쉽게 최적화할 수 있는 자바스크립트의 엄격한 부분집합 asm.js를 제안했다. SpiderMonkey는 "use asm" 지시문을 감지하면 이를 일반 JIT 대신 OdinMonkey로 바로 기계어로 컴파일했다. 이를 통해 유니티, 언리얼 엔진 같은 게임 엔진이 처음으로 플러그인 없이 웹에서 돌아갈 수 있었고, 에픽 게임즈의 'Epic Citadel' 데모는 단 4일 만에 웹으로 포팅되었다.

asm.js의 성공은 구글, 애플, 마이크로소프트를 설득해 정식 바이너리 형식인 WebAssembly를 공동 개발하는 계기가 되었다. WebAssembly는 2017년 파이어폭스 52에 탑재되었고, 같은 해 4대 브라우저에서 모두 지원되었다. 그리고 2026년, 파이어폭스 148부터 SpiderMonkey의 asm.js 전용 최적화가 기본적으로 꺼졌으며, 관련 코드도 향후 완전히 삭제될 예정이다. asm.js 코드는 일반 자바스크립트로 계속 실행되므로 사이트가 깨지지는 않지만, 모질라는 WebAssembly로 다시 컴파일할 것을 권고했다.[1] "asm.js가 없었다면 WebAssembly도 없었을 것"이라는 말처럼, 자기 손으로 낳은 기술을 자기 손으로 정리한 셈이다.

퀀텀과 WarpMonkey (2017~2020)

2017년 파이어폭스 57의 퀀텀(Quantum) 프로젝트 이후 모질라는 엔진 전반을 대대적으로 손봤다. SpiderMonkey 쪽에서는 다음과 같은 변화가 있었다.

  • Baseline Interpreter(2019) - 바이트코드 인터프리터와 Baseline JIT 사이에 들어가는 새로운 계층으로, JIT 컴파일 전에도 빠르게 실행되도록 했다.
  • CacheIR - 객체의 속성 접근, 함수 호출 등에서 관찰한 정보를 공통 중간 표현으로 기록하는 인라인 캐시 시스템. 모든 계층이 이 정보를 공유한다.
  • WarpMonkey(2020, 파이어폭스 83) - 기존 IonMonkey의 타입 추론(Type Inference) 시스템을 걷어내고, CacheIR 정보를 바탕으로 최적화하는 새 최상위 계층. 코드가 단순해지고 메모리 사용량과 실제 웹 페이지 성능이 개선되었다.
  • Stencil(2021) - 파서가 만든 결과물을 스레드 간에 안전하게 공유·캐시할 수 있는 형태로 바꿔, 페이지 로딩 시 파싱 비용을 줄였다.

2020년대

  • 사이트 격리(Fission) 도입에 맞춰 메모리 사용량과 시작 속도를 최적화했다.
  • 브라우저 벤치마크 Speedometer 3(2024년, 애플·구글·마이크로소프트·모질라 공동 개발)에서 V8과의 격차를 크게 좁혔다.
  • 2025년 5월, 파이어폭스 139에서 날짜·시간 처리의 고질적인 문제를 해결하는 새 표준 API Temporal을 주요 브라우저 중 가장 먼저 기본 탑재했다.
  • 2026년, 앞서 말한 asm.js 최적화가 비활성화되었다.[1]
  • 2026년, 모질라는 앤트로픽과 협력해 AI 모델 Claude로 파이어폭스 코드를 2주간 분석해 22건의 취약점(그중 14건이 높은 등급)을 찾아 수정했다고 밝혔다. 이는 2025년 한 해 동안 수정된 높은 등급 취약점의 약 5분의 1에 해당하는 규모였다.[2]
  • 파이어폭스 릴리스 주기가 2026년 하반기 4주에서 2주로 짧아지면서, SpiderMonkey도 같은 주기로 릴리스되고 있다. 2026년 10월 13일 파이어폭스 158이 출시되었다.

구조

실행 계층

현대 SpiderMonkey는 코드가 얼마나 자주 실행되는지에 따라 점점 더 강력한 계층으로 승급(tier-up)시키는 다단계 구조를 가진다.

계층 역할
파서 / Stencil 소스 코드를 바이트코드로 변환한다. 당장 실행하지 않는 함수는 대충 훑기만 하는 지연 파싱(lazy parsing)으로 시간을 아낀다.
바이트코드 인터프리터 처음 실행되는 코드를 실행한다.
Baseline Interpreter 인라인 캐시를 활용하는 빠른 인터프리터.
Baseline Compiler 바이트코드를 빠르게 기계어로 옮기는 단순 JIT.
WarpMonkey(Ion) 아주 자주 실행되는 핫 코드를 인라이닝, 타입 특화 등 고급 최적화로 컴파일한다.

최적화 과정에서 가정이 깨지면(예: 지금까지 숫자만 들어오던 변수에 문자열이 들어오면) 최적화된 코드를 버리고 하위 계층으로 되돌아가는 역최적화(deoptimization, bailout)를 수행한다.

WebAssembly는 별도의 파이프라인을 쓴다. 빠르게 컴파일하는 베이스라인 컴파일러(RabaldrMonkey)로 먼저 실행한 뒤, 백그라운드에서 최적화 컴파일러(BaldrMonkey, Ion 기반)로 다시 컴파일해 교체한다. WebAssembly 가비지 컬렉션(WasmGC), 예외 처리, SIMD, 꼬리 호출 등 최신 기능도 지원한다.

객체와 Shape

자바스크립트 객체는 마음대로 속성을 추가·삭제할 수 있어 그대로 두면 매우 느리다. SpiderMonkey는 같은 속성 구성을 가진 객체들이 같은 Shape(V8의 Hidden Class와 비슷한 개념)를 공유하도록 하여, JIT 코드가 "이 Shape이면 속성은 몇 번째 칸에 있다"는 식으로 빠르게 접근할 수 있게 한다.

가비지 컬렉터

SpiderMonkey의 가비지 컬렉터는 다음과 같은 특징을 가진다.

  • 세대별(generational) - 대부분의 객체는 금방 죽는다는 점을 이용해, 새로 만든 객체를 '너서리'(nursery)에 두고 자주 빠르게 정리한다.
  • 점진적(incremental) - 수집 작업을 잘게 쪼개 실행해 화면 멈춤을 줄인다.
  • 압축(compacting) - 살아남은 객체를 모아 메모리 단편화를 줄인다.
  • 병렬·동시 처리 - 일부 작업을 여러 스레드에서 처리한다.

임베딩

SpiderMonkey는 JSAPI라는 C++ 임베딩 API를 제공해 다른 프로그램에 자바스크립트 실행 기능을 넣을 수 있다. 다만 V8과 마찬가지로 API가 버전마다 자주 바뀌어, 외부 프로젝트는 보통 파이어폭스 ESR 버전에 맞춰 업데이트한다.

사용처

  • 파이어폭스 및 Gecko 기반 브라우저 - Tor Browser, LibreWolf, Waterfox, Floorp, Zen Browser, Mullvad Browser 등.
  • 썬더버드 - 모질라의 이메일 클라이언트.
  • GNOME - 리눅스 데스크톱 환경 그놈의 자바스크립트 바인딩 GJS가 SpiderMonkey를 사용한다. 그놈 셸의 상당 부분과 여러 기본 앱이 자바스크립트로 작성되어 있다.
  • MongoDB - 서버 측 자바스크립트 실행(일부 기능)과 과거의 mongo 셸에서 SpiderMonkey를 사용했다. 원래 V8을 쓰다가 3.2 버전부터 SpiderMonkey로 바꾸었다.
  • Servo - 모질라에서 시작해 현재 리눅스 재단 산하에서 개발되는 Rust 기반 브라우저 엔진. Rust 바인딩(mozjs)을 통해 SpiderMonkey를 쓴다.
  • 어도비 애크로뱃 - PDF 문서 안의 자바스크립트 실행에 SpiderMonkey 기반 엔진을 사용하는 것으로 알려져 있다.
  • 엣지 컴퓨팅 - 패스틀리(Fastly) 등은 SpiderMonkey 자체를 WebAssembly로 컴파일해 서버리스 환경에서 자바스크립트를 실행하는 방식(StarlingMonkey 등)을 사용한다. 이를 위해 JIT 없이도 빠르게 동작하는 Portable Baseline Interpreter가 개발되었다.

다른 엔진과의 비교

엔진 개발 주요 사용처 특징
SpiderMonkey 모질라 파이어폭스 최초의 자바스크립트 엔진. 새 표준 기능을 일찍 탑재하는 편
V8 구글 크롬, 엣지, Node.js, Deno 점유율 압도적 1위. 서버 측 생태계까지 장악
JavaScriptCore 애플 사파리, Bun 4단계 JIT(LLInt, Baseline, DFG, FTL). iOS의 모든 브라우저가 사용
Chakra 마이크로소프트 구 엣지(EdgeHTML) 엣지의 크로미움 전환 후 사실상 개발 종료

여담

  • 모질라의 엔진 이름 짓기 전통 덕분에 버그질라와 개발 문서에는 온갖 '○○Monkey'가 등장한다.
  • 브렌던 아이크는 자바스크립트와 SpiderMonkey를 만든 뒤 모질라 재단 설립에 참여하고 모질라 CTO와 CEO를 지냈으나, 2014년 CEO 취임 직후 과거의 정치 기부 논란으로 열흘 만에 사임했다. 이후 브레이브를 창업했는데, 브레이브는 크로미움 기반이라 자신이 만든 엔진이 아닌 V8을 쓰고 있다.
  • 파이어폭스에서 about:support를 열면 JIT 관련 설정 상태를 확인할 수 있고, 개발자는 about:config에서 javascript.options.로 시작하는 항목으로 개별 JIT 계층을 켜고 끌 수 있다.

관련 문서

외부 링크

각주

  1. ↑ 1.0 1.1 Saying goodbye to asm.js - SpiderMonkey 블로그, 2026년 5월 20일.
  2. ↑ Firefox - 영어 위키백과. 2026년 10월 기준.

최근 바뀜

더 보기