GraalVM
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
GraalVM은 썬 마이크로시스템즈 랩스에서 시작된 Java 가상 머신 및 런타임으로, Java, Scala, Kotlin 등 JVM 기반 언어의 실행을 지원한다. GraalVM 컴파일러인 Graal은 JIT 컴파일러로, 기존 컴파일러를 대체하거나 보완하며, 네이티브 이미지 기술을 통해 실행 바이너리를 생성하여 시작 및 실행 시간을 단축시킨다. Truffle 언어 구현 프레임워크를 기반으로 여러 언어를 지원하며, 다국어 임베딩을 통해 Java 코드 내에서 다른 언어의 코드를 통합할 수 있다. 디즈니, 페이스북, 트위터, 골드만삭스 등 다양한 기업에서 사용되며, 국내에서는 네이버, 카카오 등 IT 기업과 핀테크 분야에서 활용 사례가 증가하고 있다.
더 읽어볼만한 페이지
- 자바 컴파일러 - GCJ
GCJ는 자바 코드를 네이티브 코드로 컴파일하는 GCC의 구성 요소였으며, CNI 프레임워크를 통해 자바 코드와 C++ 코드를 상호 호출할 수 있도록 지원했다. - 자바 컴파일러 - Javac
Javac은 자바 소스 코드를 바이트 코드로 컴파일하는 명령줄 컴파일러이며, GNU Classpath는 자유 자바 구현체로서 Javac 컴파일 및 실행을 지원하고, 썬 마이크로시스템즈는 자바를 OpenJDK로 전환하는 데 기여했다. - 자바 가상 머신 - 핫스팟 (가상 머신)
핫스팟은 오라클의 자바 런타임 환경에 포함된 가상 머신으로, 반복되는 코드 영역을 최적화하는 JIT 컴파일러이며, 1999년 출시 후 GNU GPL 라이선스로 사용 가능하다. - 자바 가상 머신 - 안드로이드 런타임
안드로이드 런타임(ART)은 안드로이드 운영 체제에서 애플리케이션 실행을 위한 런타임 환경이며, AOT 컴파일을 통해 실행 효율성을 높이고 전력 소비를 줄이는 장점을 가진다. - 오라클 소프트웨어 - 자바 데스크톱 시스템
- 오라클 소프트웨어 - 스타오피스
스타오피스는 1985년 스타라이터에서 시작하여 다양한 플랫폼으로 확장되고 썬 마이크로시스템즈에 인수되어 OpenOffice.org의 기반이 되었던 오피스 스위트였으나, 오라클에 인수 후 오라클 오픈 오피스로 변경되었다가 판매가 중단되었으며, 워드 프로세서, 스프레드시트, 프레젠테이션 프로그램 등을 포함하고 있었다.
2. 역사
GraalVM은 썬 마이크로시스템즈 랩스(현재 오라클 랩스)의 맥신 가상 머신 프로젝트에서 시작되었다. 초기 목표는 Java 자체로 Java 가상 머신을 작성하여 C++ 개발의 문제점을 해결하고 메타 순환 최적화의 이점을 얻는 것이었다. 이후 프로젝트는 컴파일러에 초점을 맞추고 HotSpot 런타임에 연결하는 방향으로 전환되었다. GraalVM 컴파일러인 Graal은 HotSpot 클라이언트 컴파일러("C1") 코드를 Java로 트랜스파일레이션하여 시작되었으며,[9] 이후 HotSpot의 서버 컴파일러("C2")를 대체하는 데 사용되었다.[10]
Java SE 9부터 15까지 Graal은 OpenJDK에 포함되어 실험적인 AOT(Ahead-of-Time) 컴파일을 제공했다. Java SE 16부터 GraalVM은 독립 실행형 릴리스로 제공되며, 네이티브 이미지 도구를 통해 특정 운영 체제 및 아키텍처용 바이너리를 생성할 수 있게 되었다.
2. 1. 릴리스
GraalVM은 다음 세 가지 에디션으로 제공된다.- Oracle GraalVM (GFTC 라이선스)
- Oracle GraalVM Enterprise Edition (OTN 라이선스)
- Community Edition (오픈 소스 라이선스)
오라클은 2019년 5월 8일에 ''Oracle GraalVM Enterprise Edition'' 출시를 발표했고, 2023년 6월 13일에는 새로운 GraalVM 자유 이용 약관(GFTC) 라이선스를 도입한 ''Oracle GraalVM''을 출시했다.[11] GraalVM은 x64 및 AArch64 CPU의 Linux 및 macOS 플랫폼과 Windows x64 플랫폼에서 기본 JDK를 대체할 수 있다.
GraalVM은 일반적인 자바 가상 머신(OpenJDK)의 구성 요소와 함께 제공되며, 추가적으로 다음과 같은 구성 요소를 포함한다.
3. 구성 요소
3. 1. GraalVM 컴파일러
GraalVM 컴파일러인 Graal은 최신 Java (JIT) 컴파일러이다. 이는 기존 컴파일러(HotSpot의 C1/C2)를 보완하거나 대체한다. 기존 컴파일러와 달리 Graal은 모듈형, 유지 관리 가능하며 확장 가능한 방식으로 Java 자체로 작성되었다. 이는 GPL 버전 2 및 classpath exception 하에 출시되었다.[9]
3. 2. GraalVM 네이티브 이미지
GraalVM 네이티브 이미지는 클래스 파일의 실행 바이너리를 생성하는 AOT(Ahead-of-Time) 컴파일 기술이다.[12] 이는 얼리 어답터 기술로 출시되었으며, 프로덕션 준비가 되었지만 향후 릴리스에서 이전 버전과의 호환성이 없는 업데이트가 포함될 수 있음을 의미한다.
이 기능은 JVM 기반 언어를 지원하지만, GraalVM 위에 Truffle 프레임워크로 개발된 동적 언어를 선택적으로 실행할 수 있다. 실행 파일은 JVM에서 실행되지 않으며, Substrate VM이라고 하는 최소한의 맞춤형 가상 머신에서 스레드 스케줄링 또는 GC와 같은 필요한 런타임 구성 요소를 사용한다. 결과 네이티브 바이너리에 애플리케이션 클래스, JDK 종속성 및 라이브러리가 이미 포함되어 있으므로 시작 및 실행 시간이 크게 단축된다.
GraalVM 네이티브 이미지는 Fn, Gluon, Helidon, Micronaut, Picocli, Quarkus, Vert.x 및 Spring Boot 자바 프레임워크에서 공식적으로 지원된다.[13][14]
3. 3. Truffle 언어 구현 프레임워크
오라클 랩스는 GraalVM을 기반으로 언어를 구현할 수 있게 해주는 "Truffle"이라는 추상 구문 트리(AST) 인터프리터를 개발했다.[22][23] C를 비롯한 여러 언어가 Truffle로 구현되었으며, GCC 및 Clang과 거의 동일한 속도를 낸다고 주장한다.[24]
Truffle 프레임워크와 이에 종속된 GraalVM SDK는 저작권 등의 문제없이 자유롭게 사용될 수 있도록 범용 허용 라이선스 버전 1.0으로 배포된다.
3. 4. 계측 기반 도구 지원
GraalVM 생태계의 주요 장점은 언어 독립적이고 완벽하게 동적인 계측 지원이 VM 런타임에 직접 내장되어 있다는 점이다.[25][26] 실행 이벤트는 완전히 최적화된 코드에서 매우 낮은 오버헤드로 API 클라이언트에서 캡처할 수 있다.
핵심 GraalVM 설치에는 계측 및 기타 VM 지원을 기반으로 하는 언어 독립적인 디버거, 프로파일러, 힙 뷰어 등이 제공된다.[27] GraalVM에는 Chrome Inspector 원격 디버깅 프로토콜의 백엔드 구현도 포함되어 있다.[28] 원래 자바스크립트 디버깅을 위해 설계되었지만, 브라우저에서 모든 GraalVM 언어를 디버깅하는 데 사용할 수 있다.
4. 언어 및 런타임 지원
GraalVM은 자바 생태계에서 작성되었으며, 이를 위해 설계되었다. 자바, 스칼라, 코틀린 등과 같이 자바 바이트코드 형식으로 컴파일되는 모든 언어로 작성된 애플리케이션을 실행할 수 있다.
Truffle Language Implementation Framework를 기반으로, GraalVM과 함께 사용하도록 설계된 추가적인 언어들은 다음과 같다.
- GraalJS:[30] ECMAScript 2023을 준수하는 자바스크립트 런타임으로, Node.js를 지원한다.
- GraalPy:[31] 파이썬 3 언어 구현체
- GraalVM LLVM 런타임(''Sulong''):[32] LLVM 비트코드 인터프리터 구현체
- GraalWasm:[33][34] WebAssembly 구현체
- TruffleRuby:[35] 루비 언어 구현체로, Ruby on Rails에 대한 예비 지원 제공
- FastR:[36] R 언어 구현체
GraalVM 사용자는 추가적인 언어 지원을 구현할 수 있다. 주목할 만한 제3자 언어 구현체로는 grCuda,[37] SOMns,[38] TruffleSqueak,[39][40] 및 Yona가 있다.[41]
5. 다국어 임베딩
GraalVM의 또 다른 장점은 게스트 언어의 코드를 Java에 임베딩하고 "다국어" 애플리케이션을 작성할 수 있다는 것이다.[8] 개발자는 Java 소스 코드 내에 JavaScript, Python 또는 기타 지원되는 언어를 통합하여 해당 언어의 특징적인 이점을 누릴 수 있다. 호스트 Java 애플리케이션과 게스트 언어는 동일한 메모리 공간에서 데이터를 주고받는다. 이는 Truffle 언어 구현 프레임워크[29]와 GraalVM 다국어 API 덕분이다. 다음은 Java에서 Python으로 정의된 함수를 호출하는 예이다:
try (Context context = Context.create()) {
Value function = context.eval("python", "lambda x: x + 1");
assert function.canExecute();
int x = function.execute(41).asInt();
assert x == 42;
}
Python 함수는 제공된 값을 1 증가시킨 다음 호스트 언어로 반환한다. Java에서 보안을 위해 먼저 `canExecute()` 호출을 통해 변수 function을 실행할 수 있는지 확인한 다음 `execute()` 호출로 함수를 호출한다. 더 많은 예제는 https://www.graalvm.org/latest/reference-manual/embed-languages/ Embedding Languages reference documentation에서 확인할 수 있다.
6. 채택
참조
[1]
웹사이트
Downloads
https://www.graalvm.[...]
[2]
웹사이트
GraalVM FAQ
https://web.archive.[...]
2018-04-25
[3]
웹사이트
graal/README.md
https://github.com/o[...]
2018-04-25
[4]
웹사이트
For Building Programs That Run Faster Anywhere: Oracle GraalVM Enterprise Edition
https://blogs.oracle[...]
Oracle Corporation
2022-01-21
[5]
웹사이트
GraalVM for JDK 22 Release Notes
https://www.graalvm.[...]
Oracle Corporation
2024-03-26
[6]
웹사이트
Why GraalVM
https://www.graalvm.[...]
2018-04-25
[7]
웹사이트
Graal : Un compilateur dynamique pour Java
http://www.lemondein[...]
lemondeinformatique.fr
2012-02-13
[8]
웹사이트
Reference Manual for Polyglot Applications
https://web.archive.[...]
2018-04-25
[9]
웹사이트
"Meta-Circularity is Near", GraalVM, Truffle--airhacks.fm podcast : Adam Bien's Weblog
https://adambien.blo[...]
[10]
웹사이트
OpenJDK: Graal
https://openjdk.org/[...]
[11]
문서
https://www.oracle.c[...]
2022-09
[12]
웹사이트
Native Images
https://web.archive.[...]
[13]
웹사이트
GraalVM Open Source Ecosystem
https://www.graalvm.[...]
Oracle Corporation
2019-09-11
[14]
웹사이트
Spring Native Image documentation
https://docs.spring.[...]
Spring Framework
2021-10-26
[15]
웹사이트
Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9
https://www.infoq.co[...]
InfoQ.com
2016-10-01
[16]
웹사이트
JDK-8166089: Ahead-of-Time Compilation
https://bugs.openjdk[...]
Oracle Corporation
2016-09-14
[17]
웹사이트
JEP 295: Ahead-of-Time Compilation
http://openjdk.java.[...]
Oracle Corporation
2016-10-13
[18]
웹사이트
JEP 317: Experimental Java-Based JIT Compiler
http://openjdk.java.[...]
Oracle Corporation
2017-10-20
[19]
웹사이트
OpenJDK: Graal
https://openjdk.java[...]
[20]
웹사이트
"[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode"
https://bugs.openjdk[...]
[21]
웹사이트
GraalVM: Reference Manual: Native Image
https://www.graalvm.[...]
[22]
웹사이트
Truffle: A Self-Optimizing Runtime System
http://wiki.jvmlangs[...]
Oracle Corporation
2013-08-23
[23]
웹사이트
Truffle served in a Holy Graal: Graal and Truffle for polyglot language interpretation on the JVM
https://zeroturnarou[...]
2017-12-05
[24]
웹사이트
Truffle: Languages and Material
https://gist.github.[...]
[25]
간행물
Fast, Flexible, Polyglot Instrumentation Support for Debuggers and other Tools
2018-03-09
[26]
웹사이트
Getting started with Instruments in GraalVM
https://www.graalvm.[...]
2019-04-08
[27]
웹사이트
GraalVM Debugging and Monitoring Tools
https://web.archive.[...]
2019-04-08
[28]
웹사이트
Chrome DevTools
https://developers.g[...]
2019-04-08
[29]
웹사이트
Truffle: A Self-Optimizing Runtime System
http://wiki.jvmlangs[...]
Oracle Corporation
2013-08-23
[30]
Github
GraalVM JavaScript github repository
http://www.github.co[...]
[31]
Github
GraalPython github repository
https://github.com/g[...]
[32]
Github
GraalVM LLVM Runtime github repository
https://github.com/o[...]
[33]
웹사이트
GraalWasm github repository
https://github.com/o[...]
[34]
웹사이트
Announcing GraalWasm — a WebAssembly engine in GraalVM
https://medium.com/g[...]
2019-12-02
[35]
Github
TruffleRuby github repository
https://github.com/o[...]
[36]
Github
GraalVM FastR github repository
https://github.com/o[...]
[37]
Github
grCuda GitHub repository
https://github.com/N[...]
[38]
Github
SOMns GitHub repository
https://github.com/s[...]
[39]
Github
TruffleSqueak GitHub repository
https://github.com/h[...]
[40]
서적
Proceedings of the 16th ACM SIGPLAN International Conference on Managed Programming Languages and Runtimes - MPLR 2019
ACM Digital Library
2020-11-08
[41]
문서
Yona Language
https://yona-lang.or[...]
[42]
웹사이트
Improving Developer Productivity at Disney with Serverless and Open Source {{!}} AWS Open Source Blog
https://aws.amazon.c[...]
2023-07-05
[43]
웹사이트
GraalVM at Facebook
https://medium.com/g[...]
2021-07-10
[44]
웹사이트
How Oracle GraalVM Supercharged Twitter's Microservices Platform
https://www.oracle.c[...]
[45]
웹사이트
One VM to Rule Them All? Lessons Learned with GraalVM {{!}} Curry On London! 2019
https://www.curry-on[...]
2023-07-05
[46]
웹인용
Downloads
https://www.graalvm.[...]
[47]
웹인용
GraalVM FAQ
http://www.graalvm.o[...]
2018-04-25
[48]
웹인용
graal/README.md
https://github.com/o[...]
2018-04-25
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com