티스토리 뷰

🎯 서론

💡 Spring Boot 3.x에서는 GraalVM Native Image를 공식 지원하여 애플리케이션을 빠르게 실행하고, 메모리 사용량을 줄일 수 있는 네이티브 바이너리로 변환할 수 있습니다.

🔥 기존의 JVM 방식과 달리 GraalVM Native Image를 사용하면 애플리케이션의 기동 속도를 획기적으로 단축하고,
☁️ 클라우드 환경에서 서버리스(Serverless) 애플리케이션을 운영하는 데 최적화할 수 있습니다.

📢 이번 포스팅에서는 GraalVM Native Image의 장점, 설치 방법, 실습 예제까지 초보자도 따라 할 수 있도록 완벽 가이드를 제공합니다!


📌 1. GraalVM Native Image란?

🔍 GraalVM Native ImageJVM 없이도 실행 가능한 바이너리 파일을 생성하는 기술입니다.

GraalVM Native Image를 사용하면 다음과 같은 이점이 있습니다.

  • 🚀 애플리케이션 실행 속도 10배 이상 향상
  • 🔋 메모리 사용량 절감 (JVM의 힙 공간 불필요)
  • ☁️ 클라우드 및 서버리스 환경에서 성능 최적화
  • 🐳 Docker 이미지 크기 최소화 가능

📊 GraalVM Native Image와 기존 JVM의 실행 속도 비교

실행 방식기동 속도 (Startup Time)메모리 사용량

JVM 실행 ⏳ 2~5초 🛑 상대적으로 높음
GraalVM Native Image ⚡ 50~200ms ✅ 낮음 (Heap 메모리 절감)

🏗 2. GraalVM 설치 및 환경 설정

🔧 GraalVM을 사용하려면 먼저 GraalVM과 native-image 툴을 설치해야 합니다.

1) GraalVM 다운로드 및 설치

📢 GraalVM 공식 사이트에서 최신 버전을 다운로드하세요.

💻 Mac & Linux (Homebrew 사용)

brew install --cask graalvm/tap/graalvm-ce-java17

 

💻 Windows (Scoop 사용)

 
scoop install graalvm17-ce

2) GraalVM을 기본 JDK로 설정

설치 후 GraalVM을 기본 Java 환경으로 변경해야 합니다.

💻 Mac & Linux

export JAVA_HOME=/Library/Java/JavaVirtualMachines/graalvm-ce-java17/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

 

💻 Windows (PowerShell)

$env:JAVA_HOME="C:\Program Files\GraalVM\graalvm-ce-java17"
$env:Path="$env:JAVA_HOME\bin;$env:Path"

 

✅ 설정 후 Java 버전을 확인하세요.

java -version
 
출력 결과 예시
GraalVM 21.3.0 Java 17
 
🎉 정상적으로 설정되었다면 이제 GraalVM을 사용할 준비가 완료되었습니다!

🔥 3. Spring Boot 3.x 프로젝트에서 GraalVM Native Image 빌드

💡 이제 Spring Boot 3.x 프로젝트에서 GraalVM Native Image를 빌드해보겠습니다!


📝 1) Spring Boot 프로젝트 생성 및 설정

✅ 먼저, Gradle 프로젝트의 build.gradle을 수정해야 합니다.

plugins {
    id 'org.springframework.boot' version '3.1.2'
    id 'io.spring.dependency-management' version '1.1.0'
    id 'java'
    id 'org.graalvm.buildtools.native' version '0.9.27'  // 🔥 GraalVM 플러그인 추가
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

tasks.named('bootBuildImage') {
    builder = 'paketobuildpacks/builder:tiny'
}

GraalVM 플러그인을 추가하고, bootBuildImage를 사용하여 네이티브 빌드를 설정합니다.


🛠 2) 간단한 Spring Boot 컨트롤러 작성

🔥 예제 애플리케이션을 실행하여 GraalVM의 빠른 기동 속도를 확인해 보겠습니다!

📌 Spring Boot 3.x 컨트롤러 예제 (HelloController.java)

@RestController
public class HelloController {
    @GetMapping("/")
    public String hello() {
        return "🚀 Hello, GraalVM Native Image!";
    }
}

🚀 3) GraalVM Native Image로 빌드 및 실행

Step 1) Spring Boot 애플리케이션을 네이티브 이미지로 빌드하기

./mvnw -Pnative native:compile

 

Step 2) 생성된 네이티브 실행 파일 실행하기

./target/myapp

🎉 애플리케이션이 매우 빠르게 실행되는 것을 확인할 수 있습니다!


📊 4. GraalVM Native Image의 성능 테스트

JVM vs Native Image 비교 테스트

time java -jar myapp.jar      # JVM 실행
time ./myapp                  # GraalVM Native Image 실행

 

📌 결과 예시

JVM 실행: 3.5초
GraalVM Native Image 실행: 0.15초 🚀 (약 20배 빠름!)

 

메모리 사용량 비교

ps aux | grep myapp
 
📌 결과 예시
JVM 실행: 200MB GraalVM 실행: 50MB ✅ (메모리 절감)
🎉 GraalVM을 사용하면 실행 속도가 빨라지고 메모리 사용량이 줄어듭니다!

🎯 결론

Spring Boot 3.x + GraalVM Native Image를 활용하면 애플리케이션 기동 속도가 10배 이상 빨라지고, 메모리 사용량이 줄어듭니다.
서버리스 및 클라우드 환경에서 더욱 효과적이며, 빠른 배포가 가능합니다.
Java 애플리케이션을 경량화하여 최적의 성능을 발휘할 수 있습니다.

💡 지금 바로 프로젝트에 GraalVM을 적용하여 더 빠르고 강력한 애플리케이션을 만들어 보세요! 🚀