Spring Boot의 버전 별 특징 (JIT vs AOT)

최민길(Gale)·2023년 1월 9일
1

Spring Boot 적용기

목록 보기
4/46

안녕하세요 오늘은 Spring boot의 최신 버전인 3.0.1 버전의 특징과 새롭게 추가된 AOT에 대해서 JIT과의 비교를 통해 알아보는 시간을 갖도록 하겠습니다.


출처 : https://docs.spring.io/spring-boot/docs/3.0.0/reference/html/native-image.html#native-image

Spring boot 3.x 버전부터 GraalVM Native Image를 제공합니다. GraalVM이란 어플리케이션의 성능 및 효율성을 크게 향상시키는 고성능 런타임으로 JVM과 마찬가지로 Java 바이트코드를 기계어로 컴파일합니다. GraalVM의 컴파일러는 객체 할당을 효과적으로 제거해서 추상화된 프로그램에서 큰 성능을 발휘할 수 있다고 합니다.


출처 : https://www.graalvm.org/why-graalvm/

GraalVM에서는 JVM 어플리케이션의 Native Image를 생성할 수 있습니다. 이 이미지는 Java의 메인 메소드로 접근하는 모든 코드들, 어플리케이션, 라이브러리, JDK 및 JVM의 모든 클래스들을 정적 분석하고 AOT 컴파일링을 진행합니다.

AOT(Ahead Of Time) 컴파일러는 소스 코드를 실행 전 컴파일하는 방식으로 실행 전에 바이트 코드를 기계어로 바꾸는 작업을 수행합니다. GraalVM에서 AOT 컴파일러는 사용하지 않는 코드과 그 코드의 의존성 코드 등을 삭제하는 최적화 작업도 같이 수행하게 됩니다. 이 과정을 통해 JVM 없이 실행 가능한 실행 파일이 생성되며, 따라서 JVM 없이도 정상적으로 동작할 수 있으며 최적화 작업을 통해 더 빠르게 초기 실행이 가능하고 메모리도 절약할 수 있습니다.

https://velog.io/@gale4739/Java%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC-%EB%B0%8F-%EB%B2%84%EC%A0%84%EB%B3%84-%ED%8A%B9%EC%A7%95-Java-vs-Kotlin

이전에 작성한 JVM의 구조에 관련된 게시글에서 (상단 링크 참고) 실행 엔진에서는 JIT 컴파일러를 사용합니다. JIT 컴파일러는 바이트 코드 전체를 컴파일한 후 네이티브 코드로 변경하여 더 이상 인터프리팅 하지 않고 네이티브 코드를 직접 실행하는 방식인데, AOT 방식과의 차이점은 코드가 실행 중일 때 동작한다는 점입니다. JVM 내의 가비지 컬렉터가 프로그램 실행 중에 힙 영역에 존재하는 가비지들을 제거하기 때문에 실행 Latency가 감소하게 되며 순간적인 피크 발생 시 더 안정적으로 대응할 수 있습니다.


출처 : https://www.cesarsotovalero.net/blog/aot-vs-jit-compilation-in-java.html

살펴보신 것처럼 AOT와 JIT 컴파일러의 경우 장단이 뚜렷하기 때문에 상황에 따라 적용하면 되겠습니다. 우선 AOT 컴파일링의 경우 부팅 속도가 빠르고 실행 파일이 가볍기 때문에 클라우드 환경에서, 특히 여러 컨테이너를 띄우는 MSA 환경에서 더 유리하며, JIT 컴파일러의 경우 무겁지만 레이턴시를 줄이고자 하는 경우 더 유리하게 사용할 수 있습니다. GraalVM에서도 선택적으로 JIT 컴파일러를 사용할 수 있도록 하여 레이턴시가 많이 발생하거나 피크로 인해 안정적인 서비스를 제공해야 할 경우 커스텀하여 사용하면 될 것 같습니다.

새로운 버전의 Spring Boot의 경우 현재의 트렌드인 클라우드 환경의 서버 구축과 MSA 방식을 통한 여러 컨테이너를 띄우는 방식에 맞추어 GraalVM의 AOT 컴파일러를 새롭게 도입하지 않았나 생각해봅니다. 투다 서비스 역시 AWS 위에서 동작하기 때문에 AOT 컴파일러를 통해 비용을 절감하고, 성능 이슈가 발생할 부분은 JIT 컴파일러를 통해 커스텀하는 방법을 찾아보면 좋을 것 같습니다. 이상으로 포스팅 마치겠습니다. 감사합니다!

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글