GraalVM meets WebAssembly by Fabio Niephaus
- WebAssembly(Wasm)는 스택 기반 가상 머신을 위한 바이너리 명령어 형식으로, JVM 바이트코드와 유사하게 브라우저, 서버, 샌드박스 환경에서 실행 가능한 휴대용 컴파일 대상입니다. 💻
- Rust로 작성된 이미지 처리 라이브러리(Photon)가 브라우저와 모바일에서 직접 실행되어, 서버 백엔드 없이 클라이언트 측에서 복잡한 연산을 수행할 수 있음을 보여줍니다. 🖼️
- GraalVM은 Java로 작성된 게임(Flurry Monster)의 비즈니스 로직을 WASM으로 컴파일하여 모바일에서 실행 가능하게 합니다. 🎮
- Micronaut CLI 도구를 WASM으로 컴파일하여 브라우저에서 완전히 실행함으로써, 서버 백엔드 없이 모든 로직을 클라이언트에서 처리하고 보안 검토 및 컴퓨팅 비용을 절감합니다. 💸
- Spring Shell과 같은 전체 Spring Boot 애플리케이션을 WASM으로 컴파일하여 서버 백엔드 없이 브라우저에서 직접 실행할 수 있습니다. 🚀
- Java 컴파일러(javac) 자체를 WASM으로 컴파일하여 브라우저에서 Java 소스 코드를 JVM 바이트코드로 컴파일하고, 이를 다시 WASM으로 변환하여 Node.js나 브라우저에서 실행하는 혁신적인 가능성을 제시합니다. ☕
- GraalVM의 Java 인터프리터인 Espresso를 WASM으로 컴파일하여 브라우저 내에서 JVM 바이트코드를 실행하고 동적 클래스 로딩까지 지원하는 완전한 JVM 환경을 구현합니다. 🌐
- GraalVM이 Wasm에 주목하는 이유는 브라우저 및 서버 측 실행, 비용 효율적인 배포, JVM 언어를 Wasm 생태계로 확장, 다국어 컴포넌트 상호 운용성, 플랫폼 독립적인 휴대용 네이티브 확장(JNI 대체) 제공 등 다양한 이점을 제공하기 때문입니다. ✨
- Web Image는 GraalVM의 Native Image와 유사하게 AOT(Ahead-Of-Time) 컴파일을 사용하지만, GU 컴파일러가 머신 코드 대신 WASM을 출력하여 애플리케이션을 WASM 모듈로 변환합니다. ⚙️
- GraalVM은
wasm-gc를 사용하여 WASM 모듈이 런타임(예: 브라우저)의 가비지 컬렉터를 재사용하게 함으로써 모듈 크기를 줄이고, 런타임 자체의 최적화 기능을 활용합니다. ♻️