SpringBoot

GraalVM 으로 SpringBoot 시작 시간 줄이기 (맛보기)

pepega 2024. 3. 27. 23:02

TL;DR

GraalVM(지랄VM)은 Java 어플리케이션을 미리 컴파일하여 바로 시작될 수 있게 합니다.
시작 시 워밍업이 필요하지 않으며, 더 적은 리소스를 사용합니다. 대신 빌드가 느립니다.
자세한 정보는
https://www.graalvm.org/latest/docs/getting-started/
 

시작시간 비교하기

Spring Batch를 사용하였습니다. (아주 간단한 Job을 실행하였습니다.)
2.474s -> 0.114s
 
예시 코드
https://github.com/GHGHGHKO/migration-v3-with-graal

migration-v3-with-graal/src/main at main · GHGHGHKO/migration-v3-with-graal

Migrating from Spring Boot(batch) 2 to 3 with GraalVM - GHGHGHKO/migration-v3-with-graal

github.com

 
 

프로젝트에 GraalVM 적용해보기

기본적으로 GraalVM은 SpringBoot 3.x.x 버전 이상에서만 실행됩니다.
SpringBoot 2.x.x 버전을 사용하고 있다면
Migration 문서를 참고하면 좋습니다!
 

사전 준비사항

Rancher Desktop(혹은 Docker Desktop)
SpringBoot 3 이상
GraalVM Native Support

https://start.spring.io/

 
 

적용하기

gradlew이 제공하는 bootBuildImage를 사용할겁니다.

./gradlew bootBuildImage --imageName=migration-v3-with-graal:0.3.1-SNAPSHOT
느린 빌드시간(최악의 단점)

 
 
빌드가 완료되면 Container image를 실행합니다.

docker run -p 8080:8080 -e SPRING_BATCH_JOB_NAME=sampleTaskletJob migration-v3-with-graal:0.3.1-SNAPSHOT

 
속도를 확인해봅니다!
 

Without GraalVM

Build time

 

 
Started MigrationV3WithGraalApplication in 2.474 seconds (process running for 2.888)

 

With GraalVM

Build time

 
 

 
Started MigrationV3WithGraalApplication in 0.114 seconds (process running for 0.121)
 
 
 
 
출처
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide
https://www.graalvm.org/latest/docs/getting-started/