[Java] Rhino Engine, Nashorn Engine, GraalVM
카테고리: Java + Kotlin
자바스크립트 인터프리터 엔진
Rhino 엔진, Nashorn 엔진, 그리고 GraalVM은 모두 자바스크립트를 인터프리팅하고 실행하는데 사용되었거나 사용하는 엔진들이다. Java의 버전이 올라감에 따라서 자바스크립트를 인터프리팅하는데 사용하는 엔진들이 바뀌었는데, JDK 버전에 맞추어 각각을 간단히 설명하고자 한다.
Rhino Engine (~ Java SE 7)
Rhino는 Mozilla Foundation에서 개발한 자바스크립트 인터프리터 엔진이다.
자바 가상 머신(JVM)에서 실행되며, 자바스크립트 코드를 자바 바이트 코드로 변환하여 실행한다.
Rhino는 자바 애플리케이션에서 자바스크립트를 사용하는 데 주로 사용되었으나, 성능 면에서 한계가 있어 Java 표준 라이브러리에서 제공하는 공식적인 JavaScript 엔진인 Nashron 엔진으로 대체되었다.
Nashorn Engine (JDK 8 ~ JDK 10)
Nashorn은 Oracle이 JDK 8에서 소개한 자바 표준 라이브러리의 일부로 제공되는 자바스크립트 엔진이다.
Nashorn은 Rhino의 후속 엔진으로, 기존의 Rhino보다 향상된 성능과 기능을 제공한다.
Java 8의 새로운 기능과 통합되어 있어서, 람다식 및 스트림 API와 같은 새로운 자바 기능을 자바스크립트에서 활용 가능해졌다.
그러나DK의 Nashorn 엔진을 유지하고 개선하는 데는 상당한 비용이 들며, GraalVM과 같은 현대적인 대안이 이미 존재하여, JDK 11에서는 더 이상 사용되지 않고[JEP 335] JDK 15에서는 완전히 제거되었다[JEP 372].
GraalVM (JDK 11 ~)
GraalVM은 Oracle Labs에서 개발한 범용 가상 머신 및 개발 플랫폼이다.
다양한 언어로 작성된 애플리케이션을 실행할 수 있는 다중 언어 런타임을 제공한다.
GraalVM은 다양한 언어 간의 상호 운용성을 제공하며, Java, JavaScript, Python, Ruby, R 등 여러 언어를 함께 사용할 수 있다.
GraalVM은 자체적인 JavaScript 엔진인 Graal.js를 포함하며, 이 엔진은 Rhino 및 Nashorn보다 더 높은 성능을 제공한다.
AOT(Ahead-of-Time) 컴파일 및 JIT(Just-In-Time) 컴파일을 통해 더 나은 실행 성능을 제공하고, 다양한 언어로 구성된 애플리케이션을 최적화하여 실행한다.
결론
JDK 11 이상의 프로젝트를 진행한다면 GraalVM을 대안으로 사용할 것을 권장하며, 조금만 검색해본다면 Rhino나 Nashron에서 GraalVM으로 Migrate하는 방법들이 자세히 설명되어 있다.
참고
https://developer.oracle.com/ko/learn/technical-articles/nashorn-javascript-part1
https://github.com/mozilla/rhino?tab=readme-ov-file
https://infoscis.github.io/2017/03/23/Riding-the-Nashorn/
https://www.graalvm.org/latest/reference-manual/js/NashornMigrationGuide/
https://docs.oracle.com/en/graalvm/enterprise/20/docs/reference-manual/js/NashornMigrationGuide/#migration-guide-from-nashorn-to-graalvm-javascript