GraalVM (욕설아님. 진짜아님) 에 대하여
최근에 관심있게 보고있던 녀석 중 하난데요
우선 자바 진영이구요.
그냥 읽어보면 지ㄹVM (…)
이 되서, 우리말로 읽기는 참 그런 녀석이죠.
근데 이 녀석이 오라클이 열심히 밀어주고 있는 녀석입니다.
공식홈
왜 밀어주느냐?
사실 제일 큰 게, 이 녀석이 엔터프라이즈 에디션이 있어서 그렇습니다.
이 엔터프라이즈 에디션은 GFTC 라는 괴상한 라이센스를 씁니다.
https://www.oracle.com/downloads/licenses/graalvm-otn-license.html
무료 커뮤니티 에디션은 GPL 클래스패스 예외 조항 첨가된 버전을 씁니다.
근데, 핵심 기능 (Native Image) 을 쓰려면 엔터프라이즈를 써야 됩니다.
https://www.graalvm.org/22.2/reference-manual/native-image/FAQ/
그럼 각설하고
얘가 뭐하는 녀석이냐?
JDK입니다.
OpenJDK들 빌드 많죠? 이클립스 재단의 Temurin (예전 Adoptium), Azul 사의 JDK 솔루션들도 있고
MS사도 JDK를 만들어 무료 배포 중입니다.
아마존도 Corretto 라는 JDK가 있습니다.
오라클 공식 JDK는 오라클 JDK라 불렀는데
그와 별개로 GraalVM 이라는 JDK가 있다고 보면 됩니다.
즉 얘로도 자바 컴파일 가능하고 실행이 가능합니다.
그럼 얘 왜써?
장점이 몇몇 있습니다.
JIT (Just in time) Compiler
JIT 컴파일러가 적용되어, 코드 변경 없이도 성능이 향상된다 합니다.
Native Image
얘가 제일 큰데, 자바 코드를 기계어 수준으로 컴파일 해버릴 수 있습니다.
이를 통해 C/C++에 준하는 성능을 달성합니다.
대신 얘가 간단하진 않은데
엔터프라이즈 에디선 전용
리플렉션 사용 불가 - 예외적으로 리플렉션 설정을 수정하여 제한적으로 사용 가능
컴파일에 엄청난 시간이 소요됨
기계어로 컴파일 - 컴파일 결과물이 CPU 아키텍처와 운영체제에 종속됨
디버깅이 어렵다 - 스택 트레이스도 간소화되어 출력되고, 기존 모니터링 툴은 아예 호환이 안됨.
Polyglot 구조
닷넷 따라쟁이입니다.
자바 뿐만 아니라 코틀린, 스칼라, 그루비 등 언어는 물론
C, C++, 러스트, 루비, node.js, R 언어까지 한데 묶어서
여러 프로그래밍 언어로 된 코드들이 혼합되어 같은 메모리 공간에서 데이터를 주고 받을 수 있도록 구동이 가능하다고 합니다.
(예제는 봤는데, org.graalvm.polyglot 쪽 추가 라이브러리가 필요합니다. 이럼 JSR223이랑 다를 게…)
문제점
용량이 무진장 큽니다.
오라클 아니랄까봐, 제대로 쓰려면 결국 쓸 수밖에 없는 엔터프라이즈 에디션의 라이센스에 이상한 장난질을 쳐놨습니다.
참고자료