TheKoguryo's 기술 블로그

 Version 2024.11.15

8.1 GraalVM 사용하기

GraalVM은 고급 JIT(Just-In-Time) 최적화 컴파일러를 추가하여 자바 애플리케이션의 성능 향상을 제공하는 자바 런타임입니다. Just-In-Time 방식으로 자바 바이트코드를 실행시점에 머신코드로 변환하여 실행할때, 개선된 최적화 기법을 사용합니다. 여기에 추가하여 AOT(Ahead-Of-Time) 방식도 지원하여, JVM 없이 바로 실행할수 있도록, 바이트 코드가 아닌, 실행가능한 Native Image 생성 기능을 제공합니다.

AOT(Ahead-Of-Time) 방식은 Native Image을 생성하는 방식이라, 실행시점에 머신코드를 최적화하여 변경할 수 없으므로, Native Image 생성시점에, 분석한 코드를 기반으로 최적화합니다. 네이티브 이미지를 실행하므로 초기 기동이 빨라, 빠른 기동과 기동 즉시 실행되어야 하는 Serverless, 컨테이너 애플리케이션 등에 유용합니다.

그리고 자바스크립트, 루비, R과 같은 다른 언어를 실행할 수 있는 Poliglot 환경을 제공하여 서로 다른 언어가 동일 환경에서 구동할 수 있는 기능을 제공합니다.

  • 향상된 JIT(Just-In-Time) 컴파일러를 통한 성능향상
    • 코드 변경 없이 기존 JDK에 비해 자바 애플리케이션의 성능 개선을 가져올 수 있습니다.
    • Accelerating Java performance
  • Native Image를 통한 빠른 초기 기동 및 실행 지원
    • Native Image는 Serverless 함수, 컨테이너 등에서 빠른 기동을 제공하지만, 사용하는 개발 프레임워크에서 지원하여야 합니다. MicroNaut, Helidon, Quarkus 등에서 지원하며, Spring 프레임워크에서도 3.0부터 Spring Native를 통해 지원합니다.
    • Spring Boot 3.0 Goes GA
  • 여러 언어를 동일 환경에서 실행할 수 있는 기능 제공

GraalVM PM이 트위터(tweet by Thomas Würthinger)에서 JIT와 AOT간 트레이드 오프을 그림과 같이 설명하고 있습니다.

Image

참고

Oracle GraalVM for JDK

GraalVM 에디션

최근 GraalVM 라이선스 방식이 업데이트 이전에는 아래 표와 같이 Community 버전과 Enterprise 버전으로 나뉘었습니다. GraalVM Enterprise 에디션은 추가적인 기능을 통해 Community 버전에 비해 더 뛰어난 성능을 제공합니다. 하지만, GraalVM Enterprise 에디션은 운영에서 사용하기 위해서는 상업용 라이센스가 필요했습니다.

  • Community 버전과 Enterprise 버전 비교

    image-20220426164317927

GraalVM 무료 라이센스 발표

2023년 6월 발표 GraalVM 무료 라이선스 인 GraalVM Free Terms and Conditions (GFTC) 발표와 함께 GraalVM Enterprise 버전은 이제 Oracle GraalVM for JDK 17, Oracle GraalVM for JDK 20로 변경되었습니다. GFTC 라이선스에 따라 상업적 용도를 포함한 모든 사용자가 무료로 사용할 수 있게 변경되었습니다. 분기별 보안 업데이트를 포함한 후속 릴리즈 또한 무료로 제공합니다.

블로그 내용을 번역해 보면 다음과 같습니다.

  • 이전 Oracle GraalVM Enterprise을 이제 JDK 버전에 맞춰 Oracle GraalVM for JDK 17, Oracle GraalVM for JDK 20으로 출시하여, 이후 모든 분기별 보안 업데이트를 포함한 후속 릴리스를 무료로 제공합니다.
  • 이러한 릴리스는 GraalVM 무료 이용 약관(GFTC) 라이선스에 따라 제공됩니다. 본 라이센스는 해당 조건에 따라 모든 사용자에게 무료 사용을 허용하며, 운영으로도 사용할 수 있습니다. 유료가 아니라면 재배포는 허용됩니다.
  • 지정된 LTS 버전(예, Oracle GraalVM for JDK 17)의 경우, 후속 LTS 릴리스 후 1년까지 해당 버전을 제공합니다.
  • 개발자와 조직은 무료 라이센스 발표 이전에 있었던, 클릭기반 라이선스 계약 동의 과정 없이, 쉽게 Oracle GraalVM을 다운로드하고, 사용, 공유 및 재배포할 수 있습니다.
  • Oracle의 OpenJDK 빌드처럼동일한 조건에 따라 GPL 라이센스로 GraalVM Community Edition 릴리스를 계속 제공할 것입니다.

엔터프라이즈 환경에서 오라클 프리미어 서포트와 My Oracle Support를 통한 기술지원이 필요한 경우에는 여전히 Java SE 구독이 필요합니다.

OCI에서 Java SE 및 GraalVM 사용에 대한 권한
  • Oracle Cloud Infrastructure 서비스는 Java SE 구독과 기술지원을 포함하고 있습니다. 또한 Java SE 구독에는 GraalVM 엔터프라이즈가 포함되어 있습니다. 따라서 OCI 서비스 상에서는 GraalVM을 추가비용없이 사용할 수 있습니다.

    image-20230927211107121

GraalVM 기술지원관련

GraalVM은 Java SE 구독에 포함되어 기술지원합니다. Experimental 기능은 운영환경에 사용하는 것을 권장하지 않으며, 기술지원하지 않습니다. 정확한 사항은 아래 링크를 참조하세요.

새로운 Oracle GraalVM 컨테이너 이미지 발표

지난 9월 5일 오라클 블로그를 통해 New Oracle GraalVM Container Images를 발표하였습니다.

커뮤니티 버전의 컨테이너 이미지는 GraalVM Community Edition Container Images에서 보듯이 여전히 사용할 수 있습니다. GraalVM Enterprise 버전 컨테이너 이미지는 Oracle Container Registry (OCR) 를 통해 제공하였지만, 라이선스 동의과정이 필요하여, OTN 사이트 가입후 Oracle Account로 로그인한 후 라이선스 동의 절차를 거치는 과정이 필요하였습니다. 또한 인증이 필요한 Private Repository 형태로 제공하였습니다.

New Oracle GraalVM Container Images를 발표 이후에는 동일하게 Oracle Container Registry (OCR) 를 통해 이미지를 제공하지만, GFTC 라이선스 하에, Public Repository로 형태로 제공합니다. OTN 사이트 가입이나, 추가 인증없이 바로 사용할 수 있습니다.

지난 9월 Oracle GraalVM for JDK 21 출시와 함께 현재 Oracle GraalVM for JDK 17, Oracle GraalVM for JDK 21 두 가지 버전을 jdk, native-image로 제공합니다.

아래와 같이 이미지를 Docker CLI로 가져올 수 있습니다.

docker pull container-registry.oracle.com/graalvm/jdk:17
docker pull container-registry.oracle.com/graalvm/jdk:21

native-image cli가 포함된 이미지는 -muslib를 태그에 추가해야 합니다.

docker pull container-registry.oracle.com/graalvm/native-image:17-muslib
docker pull container-registry.oracle.com/graalvm/native-image:21-muslib
참고


이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.

Last updated on 10 Oct 2023