브라우저에서 자바(Java)를? 55초 만에 'Hello World' 출력!

by DD
3개월 전
조회수 22

자바(Java)를 서버 없이 브라우저에서 실행하는 JavaBox 프로젝트가 등장, QEMU를 WebAssembly로 컴파일하여 구현

55초의 초기 실행 시간과 227MB의 WASM 블롭(Blob) 크기 등 성능상의 제약 존재

CompileServer를 활용한 JVM 재사용으로 컴파일 시간 단축, 개발 편의성 개선

커뮤니티에서는 기술적 구현에 대한 놀라움과 실용성에 대한 의문이 공존

WebAssembly 기반의 JVM 에뮬레이션

JavaBox는 브라우저 내에서 자바(Java) 코드를 실행하기 위해 QEMU(Quick Emulator)를 WebAssembly로 컴파일하여 사용한다. 이는 x86_64 명령어를 에뮬레이션하는 방식으로, QEMU의 Tiny Code Generator를 통해 WebAssembly로 변환되고, 브라우저의 JavaScript 엔진이 이를 네이티브 코드로 JIT 컴파일한다. 이러한 다중 레이어의 에뮬레이션(Emulation)은 초기 실행 시간을 55초까지 증가시키는 주요 원인으로 작용한다.

CompileServer를 활용한 컴파일 시간 최적화

프로젝트는 CompileServer라는 지속적인 JVM 데몬(Daemon)을 활용하여 컴파일 시간을 획기적으로 단축했다. 최초 실행 시 JVM을 부팅하고, 이후에는 스냅샷(Snapshot)을 통해 JVM 상태를 보존하여 재사용한다. 이를 통해 매번 새로운 JVM을 시작하는 데 소요되는 12분 이상의 시간을 절약하고, 컴파일 및 실행 시간을 35초 수준으로 개선했다. 이는 지속적인 JVM(Persistent JVM) 운영을 통해 개발 생산성을 향상시키는 전략이다.

데이터 격리 아키텍처(Data Isolation Architecture) 및 WASM 블롭(Blob) 크기

JavaBox는 227MB 크기의 WebAssembly 블롭을 Cloudflare Worker를 통해 제공한다. 이 블롭은 Alpine Linux, OpenJDK 21, QEMU를 포함하며, 브라우저 환경에서 자바(Java) 코드를 실행하는 데 필요한 모든 구성 요소를 담고 있다. 하지만, 큰 블롭 크기는 초기 로딩 시간을 증가시키는 요인으로 작용하며, 데이터 전송량(Data Transfer)에 대한 고려가 필요하다.

성능 트레이드오프(Trade-offs) 및 활용 가능성

JavaBox는 성능상의 제약에도 불구하고, 자바(Java) 코드의 온라인 실행 환경(Online Execution Environment)을 제공하는 데 초점을 맞춘다. 특히, 자바(Java) 관련 문서 사이트에서 예제 코드 실행을 위한 'Try It' 버튼을 구현하거나, 코드 스니펫(Snippet) 공유 기능을 통해 서버 비용 없이 코드를 공유하는 데 활용될 수 있다. 하지만, 현재의 실행 속도는 실시간 개발 환경(Real-time Development Environment)으로 사용하기에는 무리가 있다.

커뮤니티 반응 및 기술적 의미

커뮤니티에서는 JavaBox의 기술적 구현에 대한 놀라움과 함께, 실용성에 대한 다양한 의견이 제시되었다. 일부 사용자는 '왜 해야 하는가(Why)'에 대한 의문을 제기했지만, 다른 사용자들은 기술적 도전과 혁신에 대해 긍정적인 반응을 보였다. 특히, 브라우저 환경의 한계(Browser Environment Limitations)를 극복하고 자바(Java)를 실행하는 기술적 시도 자체에 높은 가치를 부여하는 분위기이다.

I Put a Full JVM Inside a Browser Tab. It "Works". Technically. Eventually.