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 컴파일을 통해 부팅 시간 단축, 이미지 크기 최소화)
- 기존 언어의 대량 메모리 사용 지원
'서버개발' 카테고리의 다른 글
SpringBoot JUnit5 테스트 및 어노테이션 (0) | 2023.02.10 |
---|---|
Protobuf(Protocol Buffers)와 RPC (0) | 2023.02.07 |
백엔드 기술 면접 대비(HTTP, JAVA, Spring, JPA 등) (1) | 2022.10.04 |
[Spring] WebSocketConfig StompConfig SSL 설정 및 failover 설정 (0) | 2022.08.21 |
[Github Actions] Github Secrets에 secret파일 등록(secret.yml 등) (0) | 2022.08.10 |