GraalVM이란?

김남주 - 2023년 10월 11일

GraalVM

GraalVM

Oracle GraalVM은 대체 JIT(Just-In-Time) 컴파일러를 사용하여 Java 및 JVM 기반 애플리케이션의 성능을 가속화할 수 있는 고성능 JDK입니다. 이 솔루션은 애플리케이션 대기 시간을 줄이고 가비지 수집 시간을 단축하여 최대 처리량을 개선하며 연중무휴 Oracle 지원을 제공합니다.

또한 Java 바이트코드 AOT(Ahead Of Time)를 컴파일하고 거의 즉시 시작되며 메모리 리소스를 거의 사용하지 않는 일부 애플리케이션에 대해 기본 실행 파일을 생성하는 네이티브 이미지 유틸리티가 있습니다.

GraalVM 은 다음과 같은 특징을 가진다.

AOT 컴파일

GraalVM은 Java 바이트코드를 네이티브 코드로 컴파일하는 AOT 컴파일러를 제공합니다. 이 컴파일러는 Java 애플리케이션을 네이티브 이미지로 컴파일하고 실행 파일을 생성합니다.

이 실행 파일은 JVM에 필요한 메모리 및 CPU 리소스의 일부만 사용하므로 활용도가 향상되고 비용이 절감됩니다.

GraalVM 사용해보기

1. 스프링 프로젝트 생성

spring initializr를 프로젝트 생성 시 spring native support 를 선택한다.

2. Docker 설치

본인 환경에 맞는 도커를 설치한다.

빌드 이미지의 경우 Gradle에서 자동으로 내려받는다.

3. 코드 작성

본인이 원하는 코드를 작성한다.

4. gradle 이미지 빌드

아래 명령어를 통해 이미지를 빌드한다.

./gradlew bootBuildImage

또는 gradle 탭에서 bootBuildImage를 실행한다.

자동으로 이미지를 빌드하고, 도커 이미지를 생성한다.

본인의 경우 약 3분 정도 소요되었다.

자동으로 생성된 도커 이미지를 확인할 수 있다.

5. 도커 이미지 실행

이미지 실행 시 다음과 같이 실행된다.

기존 스프링 실행 시 3초 정도 소요되었던 것과 비교하여 Spring Native의 경우 0.1초 정도 소요되었다.

클라우드 환경에서 GraalVM

최근 서버리스 및 마이크로서비스 아키텍처가 대세가 되면서, 클라우드 환경에서의 JVM 입지가 줄어들고 있다고 생각한다.

그 이유는 JVM은 메모리를 많이 사용하며, 부팅 시간이 오래 걸리기 때문이다.

하지만, GraalVM을 사용하면서 이러한 단점을 극복할 수 있다.

GraalVM은 메모리를 적게 사용하며, 부팅 시간이 짧다.

따라서, 클라우드 환경에서 GraalVM을 사용하면 더 많은 서비스를 운영할 수 있다.

결론

GraalVM을 사용하면 기존의 JVM보다 빠른 실행 속도를 보여준다.

또한, 메모리 사용량이 적어서 더 많은 서비스를 운영할 수 있다.

하지만, GraalVM을 사용하면서 단점도 존재한다.

미지원 라이브러리가 존재하며, 빌드 시간이 오래 걸린다.

따라서, GraalVM을 사용하면서 이러한 단점을 고려하여 사용해야 한다.

참고