
안녕하세요, 10년 차 개발자 김현수입니다.
여러분, 자바스크립트 하면 뭐가 떠오르시나요?
아마 대부분은 크롬 브라우저를 떠올리실 거고,
조금 더 깊이 아시는 분들은 Node.js나 그 심장인 'V8 엔진'을 생각하실 겁니다.
저도 그랬습니다.
주니어 시절엔 브라우저 호환성 때문에 IE 잡느라 바빴고,
백엔드 개발하면서는 Node.js 버전 올리기에 급급했거든요.
"자바스크립트 엔진? 그냥 V8 아니면 스파이더몽키(Firefox) 정도 있는 거 아니야?"
이렇게 생각하고 살았습니다.
그런데 말입니다.
최근에 정말 재밌는 사이트를 하나 발견했습니다.
이름하여 'JavaScript engines zoo'.
말 그대로 자바스크립트 엔진들의 동물원 같은 곳인데요.
들어가 보고 깜짝 놀랐습니다.
우리가 아는 메이저 엔진만 있는 게 아니라,
세상에 존재하는 거의 모든 JS 엔진을 한데 모아서 벤치마크를 돌리고 있더군요.

오늘은 이 흥미로운 동물원을 같이 산책하면서,
"도대체 왜 이렇게 많은 엔진이 만들어졌을까?"에 대해 커피 한 잔 하듯 이야기해볼까 합니다.
자, 일단 스크롤을 내려보면 엔진 목록이 정말 깁니다.
V8(Chrome), JavaScriptCore(Safari), SpiderMonkey(Firefox) 같은 '대장'들은 당연히 있고요.
QuickJS, Hermes, JerryScript 같은 낯선 이름들도 보입니다.
재밌는 건 이 사이트가 단순히 이름만 나열한 게 아니라는 점이에요.
점수(Score), 바이너리 크기(Binary), 코드 라인 수(LOC), 작성 언어(Language), JIT 컴파일러 유무까지 싹 다 비교해 놨습니다.
심지어 M4 칩셋이 달린 맥북과 인텔 i9 리눅스 머신에서 각각 돌려본 결과까지 보여주죠.

여기서 우리는 아주 중요한 사실을 하나 깨닫게 됩니다.
"성능이 전부가 아니다."
보통 개발자들은 "빠르면 장땡"이라고 생각하기 쉽습니다.
V8이 짱 먹는 이유도 압도적인 속도 때문이죠.
하지만 표를 자세히 보면 재밌는 녀석들이 보입니다.
예를 들어 'QuickJS'라는 엔진을 볼까요?
얘는 Fabrice Bellard라는 천재 프로그래머가 만든 건데,
바이너리 크기가 믿을 수 없을 만큼 작습니다.
V8이 수십 메가바이트 단위라면, 얘는 몇백 킬로바이트 수준이에요.
속도는 V8보다 느리지만, 시작 속도가 엄청나게 빠르고 메모리를 정말 적게 먹습니다.
이게 무슨 뜻일까요?
모든 곳에 V8 같은 거대한 엔진을 넣을 수는 없다는 겁니다.
여러분이 만드는 스마트 냉장고,
IoT 센서,
아니면 아주 가벼운 임베디드 기기들.
여기서 자바스크립트를 돌리고 싶은데, V8을 올리면 메모리가 터져 나갈 겁니다.
그럴 때 이런 경량 엔진들이 빛을 발하는 거죠.
'Hermes'라는 친구도 있습니다.
이건 메타(구 페이스북)에서 만든 건데, React Native 앱을 위해 최적화된 엔진이에요.
특이하게도 바이트코드를 미리 컴파일해서 앱 구동 시간을 확 줄여버립니다.
"표준을 100% 지키는 것보다, 앱이 켜지는 속도가 더 중요하다"는 실용주의적 접근이죠.
이 표를 보고 있으면,
각 엔진을 만든 사람들의 '고민'과 '철학'이 보입니다.
누군가는 "무조건 빨라야 해!"라며 JIT(Just-In-Time) 컴파일러를 극한으로 깎았고 (V8),
누군가는 "어디서든 돌아가야 해!"라며 C언어로 아주 가볍게 짰고 (Duktape),
누군가는 "Go 언어로 JS 엔진을 만들어볼까?"라며 언어의 한계를 실험하기도 했습니다 (Goja).
심지어 Rust나 Zig로 만든 최신 엔진들도 보입니다.
저도 예전에 사내에서 작은 스크립팅 도구를 만들 때,
무작정 V8을 래핑해서 쓰려다가 빌드 시간이 너무 오래 걸려서 고생한 적이 있습니다.
그때 "아, 내가 잡으려는 게 닭인데 소 잡는 칼을 들고 왔구나" 싶었죠.
만약 그때 이 사이트를 알았다면,
아마 훨씬 가벼운 엔진을 선택해서 뚝딱 만들었을지도 모릅니다.
이 '동물원' 사이트가 우리에게 주는 교훈은 명확합니다.
기술에는 '정답'이 없다는 겁니다.
상황에 맞는 '최선'만 있을 뿐이죠.
우리가 흔히 쓰는 도구가 업계 표준이라고 해서,
그게 모든 문제의 해결책은 아닙니다.
가끔은 시야를 넓혀서,
"이런 상황에서는 좀 덜 유명해도, 더 적합한 도구가 있지 않을까?"
라고 의심해 보는 태도가 시니어 개발자로 가는 지름길 아닐까요?
오늘 점심 먹고 나른할 때,
이 JavaScript engines zoo에 한번 들어가 보세요.
"세상에 자바스크립트를 돌리는 방법이 이렇게나 많았구나"
하고 감탄하게 되실 겁니다.
그리고 혹시 모르죠.
여러분의 다음 프로젝트에서 V8 대신,
이 동물원에 사는 작고 귀여운 녀석 중 하나를 입양하게 될지도요.
항상 열려있는 마음으로 기술을 바라보시길 바랍니다.
오늘도 즐거운 코딩 하세요!


