게임 Hacker News · 2026-10-25

8년 동안 만든 상용 3D 엔진, 자바스크립트 꼴보기 싫어서 전부 갈아엎은 개발자 썰

핵심 요약
  • 웹 기반 3D 그래픽 엔진 Polygonjs의 개발자가 8년간 다듬어 온 자바스크립트·타입스크립트 기반 엔진을 버리고 밑바닥부터 새로 작성했습니다.
  • 자바스크립트 특유의 불투명한 메모리 관리와 가비지 컬렉터로 인한 프레임 드롭 문제를 해결하기 위해 조나단 블로우가 설계한 저수준 언어 'Jai'를 선택했습니다.
  • 기존 three.js 의존성을 걷어내고 데이터 구조와 렌더러를 직접 재구축하면서 객체지향 방식 대신 완전한 메모리 통제권을 확보했습니다.
요약 웹 기반 절차적 3D 지오메트리 생성 엔진인 Polygonjs의 개발자가 지난 8년간 개발해 상업 프로젝트까지 출시했던 기존 자바스크립트/타입스크립트 기반 엔진을 완전히 버리고, 조나단 블로우(Jonathan Blow)가 만든 신생 저수준 언어 'Jai'로 밑바닥부터 재작성한 개발 비화를 공유했습니다. 개발자가 기존 시스템에서 가장 큰 한계를 느낀 부분은 바로 자바스크립트의 메모리 제어와 가비지 컬렉터(GC)였습니다. 브라우저 환경에서 대량의 절차적 지오메트리를 생성하다 보면 메모리가 급격히 차오르는데, 자바스크립트 환경에서는 어떤 객체가 메모리를 점유하고 있는지 정확히 추적하거나 테스트 코드로 누수를 검증하기가 극도로 어렵습니다. 게다가 가비지 컬렉터가 작동할 때마다 프레임 드롭(스터터링)이 발생해 부드러운 인터랙션이 생명인 3D 그래픽 경험을 심각하게 망쳤습니다. 여기에 더해 스팀(Steam) 등 네이티브 플랫폼 배포를 위해 일렉트론(Electron)을 사용했으나, 스팀 멀티플레이어 API를 연동하는 과정에서 샌드박스를 넘나들며 메모리 누수와 레이스 컨디션 위험이 커지자 배포를 포기하는 상황에 이르렀습니다. 이때 대안으로 눈에 들어온 것이 아직 비공개 베타 상태인 프로그래밍 언어 Jai였습니다. 메모리 할당과 해제를 완전히 통제할 수 있고, 일시적 할당자(temp allocator)나 메모리 풀을 통해 GC 없이도 프레임 드롭을 방지할 수 있다는 점이 결정적이었습니다. 결국 개발자는 수백 개에 달하는 노드와 핵심 로직을 다시 짜야 하고, 오랫동안 의존했던 three.js를 대체해 렌더러와 씬 그래프까지 직접 개발해야 하는 엄청난 위험을 감수하고 전면 재작성에 돌입했습니다. 1년 차에는 C/C++ 감각을 되살리고 객체지향 설계(OOP) 대신 구조체와 함수 기반의 데이터 지향적 설계를 구축하는 힘든 과정을 거쳤으며, 그 결과 데이터 레이아웃을 완벽히 통제할 수 있게 되어 기존 OOP에 대한 흥미를 완전히 잃을 정도로 만족스러운 구조를 얻게 되었다고 밝혔습니다.
Sponsored · 광고