GraalVM 소개
서버개발

GraalVM 소개

 

GraalVM이란

GraalVM은 Java 코드를 작성하고 실행할 수 있는 도구

- 더 빠르고 유지하기 쉬운 컴파일러 작성 ex)트위터 : Scala 코드의 성능 향상

- JVM에서 실행되는 언어의 성능 향상

- 애플리케이션 시작 시간 단축

- Java 에코 시스템에 다국어 지원 통합

 

구성요소

- 고성능 최적화 Just-In-Time 컴파일러 : JVM 기반 어플리케이션을 기본적으로 실행 가능한 바이너리로 컴파일하는데 사용

- 네이티브 실행 파일을 빌드하기 위한 Ahead-of-Time 컴파일러

- 다국어 지원 : 프로그래밍 언어 인터프리터를 제공, 이를 이용해 GraalVM을 확장하여 Java 에코 시스템에 언어 추가

 

Just-In-Time(JIT) 컴파일러란

- 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법

- 실행 시점에서 인터프리트 방식으로 기계어 코드를 생성하면서 그 코드를 캐싱하여, 같은 함수가 여러번 불릴 때 매번 기계어 코드를 생성하는 것을 방지하는 기법

- 인터프리터 방식과 정적 컴파일 방식의 혼합한 방식..?

 

Ahead-Of-Time(AOT) 컴파일러란

- 목표 시스템의 기계어와 무관하게 중간 언어 형태로 배포된 후 목표 시스템에서 인터프리터나 JIT 컴파일 등 기계어 번역을 통해 실행되는 중간 언어를 미리 목표 시스템에 맞는 기계어로 번역하는 방식

- 중간언어 : 자바 바이트코드, 공통 중간언어, IBM

- JIT는 런타임에 바이트코드를 기계어로 바꾼다면, AOT는 실행 전에 바이트코드를 기계어로 바꾸는 컴파일러

- 그로 인해 JIT의 런타임 성능 이슈가 발생하지 않고 네이티브 성능을 낼 수 있음

 

 

 

JVM 대체제로써의 GraalVM

Java, Scala, Kotlin 및 Java 바이트 코드에서 실행되는 모든 언어를 실행하는 JVM을 대체하려는 목적

 

유지보수

- 최적화 및 확장 가능성을 두고 만듦

- 많은  Java Programmer가 시간을 할애하고 개선에 기여

 

Truffle

- 컴파일러를 만드는 영리한 접근 방식

- 최적화 Just-In-Time 컴파일러를 사용하면 모든 것을 컴파일하고 최적화한다는 아이디어

- 각 언어마다 특징이 존재하는데 Truffle을 이용하면 프로그래밍 언어를 쉽게 구현할 수 있기 때문에 개발자가 언어를 잘 선택할 수 있도록 도움

 

Cloud

- 가장 큰 핵심은 AOT 컴파일러

-  Java가 어셈블리 코드로 컴파일 할 수 있게 되었고, 네이티브 코드가 필요한 상황이 존재하자 AWS Lambda로 표현

-  Lambda는 사용량에 따라 비용을 지불하며, 코드가 실행되는 경우에만 비용을 지불

- 이를 VM 기반으로 구현하면 VM을 반복 종료해야 함.. 요청이 왔을 때만 구동하고

- 이걸 방지하기 위해 AOT 컴파일러 사용 -> Java는 수천 개의 클래스를 로드해서 느리게 시작 -> 간단한 CRUD 어플리케이션은 로드된 클래스의 극히 일부만 사용(GET요청을 위해 모든 SpringBoot의 기능이 필요하지 않듯이) ->코드를 최적화하고 컴파일 후 네이티브 코드로 제공.. 이를 통해 아주 짧은 시간 내에 응답 가능한 Lambda 함수 제작 가능 

 

활용 방안

- 기존 자바 응용 프로그램의 성능 향상

- 다양한 언어 확장(자바 코드에서 js, R, python LLVM IR, Web Assembly 사용, 각 언어별 라이브러리 활용, 고성능이 필요한 모듈 C/C++ 사용, 호스트 접근 필터링 기능으로 스크립트 실행 시 보안성 향상)

- 네이티브 이미지 생성(AOT 컴파일을 통해 부팅 시간 단축, 이미지 크기 최소화)

- 기존 언어의 대량 메모리 사용 지원