참고:
- 이 자습서는 Oracle에서 제공하는 무료 실습 환경에서 사용할 수 있습니다.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값이 사용됩니다. 랩을 완료한 후에는 이러한 값을 클라우드 환경과 관련된 값으로 대체하십시오.
GraalVM Enterprise를 사용하여 Oracle Cloud의 애플리케이션 가속화
소개
GraalVM Enterprise는 신뢰할 수 있고 안전한 Oracle Java SE를 기반으로 구축된 고성능 JDK 배포로, 애플리케이션 실행 및 효율성을 대폭 향상시킵니다.
GraalVM Enterprise가 Oracle Java SE Subscription에 포함되어 OCI(Oracle Cloud Infrastructure)에 추가 비용 없이 사용 가능
GraalVM Enterprise는 HotSpot JVM에서 또는 사전 컴파일된 고유 경험의 두 가지 방법을 통해 Java 애플리케이션을 실행할 수 있습니다. HotSpot JVM에서 실행되는 경우 GraalVM Enterprise는 Graal 컴파일러를 최상위 계층 JIT 컴파일러로 사용합니다. 컴파일러는 고급 최적화를 수행하며 공격적인 인라이닝 기술을 적용하여 코드 변경 없이 모든 애플리케이션의 성능을 가속화합니다. 고유의 귀중한 GraalVM Enterprise에서 실행하는 것은 Native Image를 사용하여 JVM을 실행하고 즉시 시작하며 웜업 시간 없이 최대 성능을 제공하는 독립형 실행 파일로 Java 앱을 변환합니다.
이 실습에서는 JVM에서 데모 프로젝트를 실행하고, 성능을 비교하고, GraalVM Enterprise가 OCI에서 애플리케이션을 가속화하는 방법을 알아봅니다. 리소스 요구사항이 낮은 애플리케이션이 더 적은 수의 서버나 더 작은 서버로 더 빠르게 전환되어 클라우드 비용이 절감됩니다.
랩 내용
이 실습에서는 다음 작업을 수행합니다.
- GraalVM Enterprise를 통해 이미 사용 가능한 실습을 수행할 Oracle Cloud의 VM 인스턴스에 접속합니다.
- JMH 성과 벤치마크 실행
- Micronaut 응용 프로그램에 대한 고유 실행 파일을 생성하여 실행합니다.
- VM 인스턴스에 대한 트래픽을 허용하도록 호스트 방화벽 구성(선택 사항)
예상 랩 시간: 30분
참고: 랩톱 아이콘이 나타날 때마다 명령 입력 또는 파일 편집과 같은 작업을 수행해야 합니다.
![]()
# The box under the icon will tell you what to do.
명령을 복사하려면 필드를 가리키고 클립보드로 복사 아이콘을 누릅니다.
복사한 명령을 터미널 창에 붙여 넣으려면 마우스 오른쪽 버튼을 누르고 컨텍스트 메뉴에서 Paste 옵션을 선택합니다. 키보드 단축키를 선호하는 경우 CTRL+SHIFT+V를 사용하십시오.
작업 1: Oracle Cloud의 VM 인스턴스에 연결합니다.
실습을 시작하면 필요한 리소스가 VCN(가상 클라우드 네트워크)과 함께 Oracle Linux 8 사전 구축된 이미지가 포함된 컴퓨트 인스턴스에 프로비전됩니다. 리소스 프로비저닝에는 또한 이 랩을 간결하게 유지하고 시간을 절약하기 위해 Native Image를 사용하여 GraalVM Enterprise 런타임 환경을 설치하고 구성하는 작업이 포함됩니다. 프로비저닝을 완료하는 데 최대 5분 정도 걸릴 수 있습니다. Luna Lab 웹 페이지의 Resources 탭에 문의하여 리소스가 완전히 프로비전되고 준비되었는지 알 수 있습니다(아래 1단계 참조).
-
바탕 화면에서 Luna Lab 아이콘을 두 번 눌러 브라우저를 엽니다.

리소스 외에 애니메이션된 기어가 확인 표시로 바뀔 때까지 기다립니다. 필요한 모든 컴퓨팅 및 네트워크 리소스가 프로비저닝되며, 계속 진행할 수 있습니다.

-
Luna Lab 페이지에서 Resources 탭을 누릅니다. Resources 페이지에는 프로비전된 VM 인스턴스의 이름과 공용 IP 주소가 표시됩니다.
-
SERVER_IP 상자에서 공용 IP 주소를 복사합니다.
View Details을 클릭해야 하는 경우가 많습니다. 필드 위로 마우스를 복사한 다음 클립보드로 복사 아이콘을 누릅니다.
-
Luna Desktop을 볼 수 있도록 브라우저 창을 최소화합니다. 애플리케이션 메뉴를 누르고 터미널 에뮬레이터를 엽니다.

-
SSH 접속 명령을 입력합니다. 여기서
는 VM 인스턴스 공용 IP 주소입니다. 
ssh opc@<SERVER_IP>프롬프트에
yes을 입력하여 ECDSA 키 지문을 수락합니다.
이제 Oracle Cloud의 VM 인스턴스에 접속되었습니다. VM 인스턴스는 이미 GraalVM Enterprise 및 이 실습에 필요한 네이티브 이미지 툴로 사전 구성되어 있습니다. 다음 명령을 실행하여 쉽게 확인할 수 있습니다.
![]()
java -version
![]()
native-image --version
GraalVM Enterprise 및 해당 기능을 Oracle Linux에 설치하는 방법을 배우려면 이 실습을 완료한 후 Oracle Linux에서 GraalVM 시작하기 실습을 실행하십시오.
다음 작업을 진행할 수 있습니다.
태스크 2: 데모 실행: JMH(Java Microbenchmark Harness)
이 부분에서는 Java 벤치마크를 실행하여 GraalVM Enterprise JIT 컴파일러와 C2 JIT 컴파일러의 성능을 비교합니다. GraalVM Enterprise에서 기본적으로 사용되는 Graal 컴파일러는 코드 분석 및 고급 최적화에 대한 고유 접근 방식을 통해 JVM에서 실행되는 프로그램에 대해 최적화된 성능을 제공하며, 심층적이고 광범위한 계층 계층에 대해 매우 공격적인 인라이닝 알고리즘을 수행합니다.
실행할 벤치마크는 JMH(Java Microbenchmark Harness)로 작성되고 Java Stream API를 사용합니다. 이 슬라이드는 컴파일러가 병렬로 수행하는 인라이닝 및 부분 탈출 분석을 보여줍니다. 이 분석은 런타임에 상당한 성능 향상을 설명합니다.
데모 소스 코드는 java-simple-stream-benchmark 디렉토리에서 사용할 수 있습니다.
마이크로벤치마크는 배열 요소에서 스트림을 생성하고 여러 매핑 기능을 사용하여 각 번호를 매핑합니다.
public class JavaSimpleStreamBenchmark {
static int[] values = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
@Benchmark
public int testMethod() {
return Arrays.stream(values)
.map(x -> x + 1)
.map(x -> x * 2)
.map(x -> x + 2)
.reduce(0, Integer::sum);
}
}
JavaSimpleStreamBenchmark.testMethod은 3회 반복으로 실행되어 JIT 컴파일러가 성능을 샘플링하기 전에 준비하도록 허용합니다. 벤치마크 결과는 콘솔에 인쇄되며 작업당 초 단위이며 더 낮은 숫자가 더 좋습니다.
-
VM 인스턴스에 연결된 터미널 창에서 demo 디렉토리로 이동합니다.

cd java-simple-stream-benchmark -
벤치마크 프로젝트는 Maven을 통해 구축되지만 Maven 래퍼(
.mvnw)는 제공되지 않으며, Oracle Linux는 기본적으로 Maven을 포함하지 않습니다.yum를 사용하여 Maven을 설치합니다.
sudo yum install maven -
프로젝트를 작성합니다.

mvn package -
GraalVM Enterprise JIT 컴파일러를 사용하여 벤치마크를 실행합니다.

java -jar target/benchmarks.jarjava명령을 호출하면 기본적으로 GraalVM Enterprise에서 사용으로 설정된 최적화된 Graal JIT 컴파일러를 사용합니다. -
동일한 JVM(GraalVM Enterprise)에서 벤치마크를 실행하지만
-XX:-UseJVMCICompiler옵션을 적용하여 Graal 컴파일러 대신 C2 컴파일러를 사용합니다.
java -XX:-UseJVMCICompiler -jar target/benchmarks.jar
4-5단계를 완료한 후 벤치마크 결과를 비교합니다. 물론 결과는 VM 인스턴스의 프로세서 수와 메모리 수에 따라 달라집니다. 다음은 VM.Standard.2-2 구성과 30GB의 메모리가 포함된 컴퓨트 인스턴스에서 가져온 숫자입니다.
Graal JIT 컴파일러:
[opc@demo-instance java-simple-stream-benchmark]$ java -jar target/benchmarks.jar
...
Benchmark Mode Cnt Score Error Units
JavaSimpleStreamBenchmark.testMethod avgt 3 53.474 ? 1236.199 ns/op
C2 JIT 컴파일러:
[opc@demo-instance java-simple-stream-benchmark]$ java -XX:-UseJVMCICompiler -jar target/benchmarks.jar
...
Benchmark Mode Cnt Score Error Units
JavaSimpleStreamBenchmark.testMethod avgt 3 361.844 ? 37.120 ns/op
Graal JIT 컴파일러 평균 결과는 동일한 벤치마크에서 C2보다 5배 더 빠름합니다.
다음 작업을 진행할 수 있습니다.
작업 3: 데모 실행: Micronaut Native Linux 실행 파일
이 작업은 JVM에서 Java 마이크로서비스를 실행할 때 및 고유 실행 파일로 시작 시간을 비교하는 데 중점을 둡니다. 두 경우 모두 마이크로 서비스가 GraalVM Enterprise에서 실행되지만, JIT(Just-in-time) 또는 사전 컴파일 방식으로 다른 모드로 실행되어 시작 성능이 저하됩니다.
이 마이크로서비스는 마이크로서비스 및 서버리스 애플리케이션 구축에 적합한 전체 스택 Java 프레임워크인 Micronaut을 사용하여 작성되었습니다. 이 응용 프로그램은 간단한 서버측 렌더링 응용 프로그램으로, 서비스 ConferenceService.java는 컨퍼런스 목록을 포함하며 임의 컨퍼런스를 반환합니다. 컨트롤러는 @Controller 주석으로 정의되고 /conferences 경로에 매핑되어 임의 컨퍼런스 이름을 가져옵니다. Micronaut는 자동으로 응답의 JSON으로 변환됩니다.
-
홈 디렉토리로 돌아갑니다.

cd -
Maven 또는 Gradle 빌드 도구를 지정하는 Micronaut 응용 프로그램을 만들고, 응용 프로그램 소스를 다운로드하고, 아카이브 압축을 해제하고, 해당 응용 프로그램으로 이동합니다.

mkdir micronaut-demo && cd micronaut-demoMaven:

curl https://guides.micronaut.io/latest/micronaut-creating-first-graal-app-maven-java.zip -o micronaut-creating-first-graal-app.zipGradle:

curl https://guides.micronaut.io/latest/micronaut-creating-first-graal-app-gradle-java.zip -o micronaut-creating-first-graal-app.zipMicronaut 3.0.x 버전을 다운로드합니다.

unzip micronaut-creating-first-graal-app.zip -
JVM(GraalVM Enterprise)에서 Gradle 또는 Maven 래퍼로 애플리케이션을 구축하고 실행합니다.
Maven:

./mvnw mn:runGradle:

./gradlew run응용 프로그램이 포트 8080에서 시작됩니다. 이 간단한 Micronaut 마이크로서비스를 시작하는 데 걸린 시간을 확인하십시오.

-
CTRL+C를 입력하여 응용 프로그램을 종료합니다. -
Native Image를 사용하여 독립형 고유 Linux 실행 파일을 생성합니다. Gradle 또는 Maven을 사용하여 고유 실행 파일을 빌드할 수 있습니다.
Maven -
native-image패키징 형식을 지정합니다.
./mvnw package -Dpackaging=native-imageMicronaut 프로젝트의
nativeImage작업을 실행하여 Gradle:
./gradlew nativeImageMaven을 사용한 경우 기본적으로
micronautguide이라는 실행 파일이 프로젝트 target/ 디렉토리 또는 Gradle을 사용한 경우application이라는 build/native-image/ 디렉토리에 기록됩니다.주: 실행 파일 작성 시간은 애플리케이션 크기와 복잡성에 따라 다르며, 전원이 부족한 VM에 시간이 걸릴 수 있습니다.
-
실행 파일을 호출합니다.
Maven으로 구축:

./target/micronautguideGradle을 사용하여 빌드:

./build/native-image/application다시 한번 이 마이크로서비스를 고유 실행 파일로 시작하는 데 걸린 시간을 기록합니다. 실행 파일이 자체 포함 바이너리이고 JDK를 실행할 필요가 없으므로 훨씬 빠르게 시작되어 애플리케이션을 쉽게 배포할 수 있습니다. 파일 크기도 매우 작습니다.

-
CTRL+C를 입력하여 응용 프로그램을 종료합니다.
GraalVM Native Image는 응용 프로그램 클래스, 종속 라이브러리 클래스, 종속 JDK 클래스 및 빌드 시 초기화된 클래스로 응용 프로그램 힙 스냅샷을 사용하여 고유 실행 파일을 생성합니다. Java 애플리케이션을 기본 실행 파일로 실행하면 즉각적인 시작, 낮은 CPU 및 메모리 소비가 제공되므로 GraalVM Enterprise 런타임 환경이 클라우드 구축에 적합한 후보자로 제공됩니다.
이미 시작 시간에 차이가 있으며 이미 이 연습을 종료할 수 있습니다. 그러나 브라우저에서 실행 중인 이 서버측 응용 프로그램을 테스트하여 호스트 방화벽을 구성하여 VM 인스턴스에 대한 트래픽을 허용할 수 있습니다. 작업 4로 이동합니다.
작업 4: 호스트 방화벽을 구성하여 VM 인스턴스에 대한 트래픽 허용(선택사항)
브라우저에서 위의 서버측 응용 프로그램을 테스트하려면 호스트 방화벽이 가상 시스템에 대한 트래픽을 허용하는지 확인해야 합니다.
-
OCI 콘솔에 로그인합니다. Luna Lab 페이지를 열고 OCI Console 빠른 링크를 누릅니다. 이 실습 임시 계정에 대해 인증서에 제공된 사용자 이름 및 비밀번호를 입력합니다.

-
OCI 콘솔에 로그인한 경우 컴퓨트로 이동하고 인스턴스를 누릅니다.

-
왼쪽의 구획 드롭다운에서 필요한 구획을 선택합니다. 구획 이름을 찾으려면 Luna Lab 페이지로 돌아간 다음 Oracle Cloud를 누르고 Compartment Name 필드를 참조하십시오.

-
기본 뷰에서 VM 인스턴스를 찾아 엽니다.
-
기본 VNIC 섹션에서 인스턴스가 연결된 서브넷을 누릅니다.
-
서브넷 페이지에서 보안 목록(ds-luna-seclist-로 시작하는 이름)을 누릅니다.
-
송신 규칙 추가를 누르고 다음 데이터를 입력합니다.

이 규칙을 사용하면 모든 소스의 트래픽이 포트 8080을 사용할 수 있으므로 어디에서나 응용 프로그램에 연결할 수 있습니다.
-
터미널 창으로 돌아가서 다음 명령을 실행하여 실행 중인 VM 인스턴스에서 방화벽을 다시 시작합니다.

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo systemctl reload firewalld -
애플리케이션을 재시작합니다.
Maven으로 구축:

./target/micronautguideGradle을 사용하여 빌드:

./build/native-image/application -
브라우저에서 응용 프로그램
http://<SERVER_IP>:8080/conferences/random를 엽니다. 여기서<SERVER_IP>은 인스턴스 공용 IP 주소입니다. Micronaut@Controller주석은/conferences경로에 매핑되므로 URL에/conferences/random경로를 추가해야 합니다.http://<SERVER_IP>:8080/conferences/random -
(선택 사항) 새 termianl 창을 열고
curl을 사용하여 GET 요청을 전송합니다.
curl http://<SERVER_IP>:8080/conferences/random
축하합니다! 이 실습을 완료했습니다.
더 알아보기
- 이 실습을 통해 GraalVM Enterprise 및 해당 기능을 Oracle Linux에 직접 설치하는 방법을 알아봅니다.
- GraalVM Native Image를 사용하여 실전 연습을 수행하고 GraalVM Native Image Quick Start 실습을 실행하여 클라우드 전용 Java 애플리케이션의 개발을 시작합니다.
- GraalVM Enterprise 문서를 확인합니다.
- oracle.com에서 제품 페이지 방문
이 세션을 종료하려면 도구 모음에서 [세션 종료] 단추를 누릅니다.
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 찾아보거나 Oracle Learning YouTube channel에서 무료 학습 콘텐츠에 액세스할 수 있습니다. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer로 변경하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Accelerate Applications in OCI with GraalVM Enterprise
F54870-01
March 2022
Copyright © 2022, Oracle and/or its affiliates.