WIPIVERSE

GraalVM

GraalVM은 오라클(Oracle Corporation)이 개발한 고성능 JDK(Java Development Kit)이다. 자바(Java) 언어 자체로 작성되었으며, 오픈소스 배포판은 OpenJDK를 기반으로 하고 엔터프라이즈 배포판은 Oracle JDK를 기반으로 한다. 최초의 프로덕션 릴리스는 2019년 5월에 출시된 GraalVM 19.0이며, 최신 안정판은 GraalVM 25.2.4(2026년 7월 기준)이다.

GraalVM의 기원은 Sun Microsystems Laboratories(현 Oracle Labs)의 Maxine Virtual Machine 프로젝트에 있다. 이 프로젝트는 JVM(Java Virtual Machine) 자체를 Java로 작성하여 C++ 개발의 문제점(특히 수동 메모리 관리)을 피하고 메타-순환 최적화의 이점을 얻는 것을 목표로 했다. 이후 프로젝트의 초점은 컴파일러로 전환되어 HotSpot 런타임에 연결되었으며, HotSpot 클라이언트 컴파일러(C1)의 코드를 Java로 수동 변환하는 방식으로 Graal 컴파일러가 개발되었다.

기존 JDK와 차별화되는 GraalVM의 주요 구성 요소는 다음과 같다.

  • Graal Compiler: JIT(Just-In-Time) 컴파일러로, 기존의 C1/C2 컴파일러를 보완하거나 대체한다.
  • Native Image: AOT(Ahead-Of-Time) 컴파일 기술로, Java 애플리케이션의 클래스 파일을 사전에 네이티브 바이너리로 컴파일한다. 결과물은 JVM 위에서 실행되지 않으며, Substrate VM이라는 최소한의 전용 가상 머신이 필요한 런타임 구성 요소(스레드 스케줄링, GC 등)를 제공한다. 이를 통해 애플리케이션의 시작 시간이 최대 100배까지 빨라지고 메모리와 CPU 사용량이 감소한다. 단, 생성된 실행 파일은 컴파일된 플랫폼에서만 실행 가능하다.
  • Truffle Language Implementation Framework: 추상 구문 트리(AST) 기반 인터프리터 프레임워크로, 여러 프로그래밍 언어를 GraalVM 위에서 실행할 수 있게 한다.
  • Polyglot API: Java 기반 호스트 애플리케이션에 게스트 언어 코드를 내장(embedding)할 수 있는 API로, 단일 애플리케이션 내에서 여러 프로그래밍 언어의 코드를 혼합하는 "폴리글랏 애플리케이션"을 구현할 수 있다.

Truffle 프레임워크를 기반으로 GraalVM에서 지원하는 추가 언어로는 GraalJS(ECMAScript 2023 준수 JavaScript 런타임, Node.js 지원), GraalPy(Python 3), GraalVM LLVM Runtime(Sulong, LLVM 비트코드 인터프리터), GraalWasm(WebAssembly), TruffleRuby(Ruby, Ruby on Rails 부분 지원), FastR(R 언어) 등이 있다.

GraalVM Native Image는 Spring, Micronaut, Quarkus, Helidon, Picocli, Vert.x, Gluon, Fn 등 주요 Java 프레임워크에서 공식적으로 지원된다. 2016년 9월 오라클은 Java SE 9에 AOT 컴파일을 추가하기 위한 계획(JEP 295)을 발표했으며, Java SE 9부터 15까지는 실험적 기능으로 Graal 컴파일러가 포함되었다. Java SE 16에서는 중복 유지보수 문제로 JDK 내 Graal 지원이 제거되었으나, 이후 독립형 GraalVM 릴리스의 native-image 도구를 통해 동일한 기능을 사용할 수 있다.

라이선스 측면에서 GraalVM은 Community Edition(GPLv2), Oracle GraalVM(GFTC: GraalVM Free Terms and Conditions), Oracle GraalVM Enterprise Edition(OTN 라이선스)의 세 가지 형태로 제공된다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기