참고:

TASK 5: Micronaut 애플리케이션의 네이티브 이미지 구축 및 Oracle Cloud에 배포

이 실습에서는 Java 애플리케이션을 GraalVM Native Image를 사용하여 고유 Linux 실행 파일로 전환하는 방법을 배웁니다. 그 후에 Oracle Cloud의 가상 머신에 배포합니다.

예상 시간: 20분

태스크 콘텐츠

이 작업에서 다음을 수행합니다.

1단계: Oracle Cloud의 JVM에서 Micronaut 애플리케이션 실행

이 단계에서는 기존에 Oracle Cloud의 JVM(JAR 파일에서)에 Micronaut 애플리케이션을 배치합니다. GraalVM Enterprise 22.0.0이 기본 JDK로 설정된 경우 VS 코드를 계속 사용합니다.

  1. Terminal, New Terminal으로 이동하고 이 명령을 실행하여 Java 버전을 확인합니다.

    java -version
    

    java 명령을 호출할 때마다 GraalVM Enterprise에서 기본적으로 사용으로 설정된 최적화된 Graal JIT 컴파일러가 적용됩니다.

  2. Java 프로젝트를 실행 가능한 JAR 파일로 패키지화하고 VS 코드 터미널에서 응용 프로그램을 시작하거나 실행 기본 작업을 호출할 수 있습니다.

    • Terminal, New Terminal으로 이동한 다음 mn:run 목표를 실행합니다.

      ./mvnw mn:run
      

      Gradle을 사용하는 경우 run 작업을 실행합니다.

      ./gradlew run
      
    • 또는 VS 코드에서 Application.java 클래스 파일을 찾아 기본 메소드 위의 Run Main을 누릅니다.

      기본 방법 빠른 작업 실행

      응용 프로그램이 포트 8080에서 시작됩니다. 실행하는 데 걸린 시간을 확인하십시오. 6500ms부터 시작해야 합니다.

  3. 응용 프로그램을 종료합니다.

    CTLR +C
    

2단계: Micronaut 응용 프로그램의 고유 Linux 실행 파일 빌드

모든 Java 애플리케이션을 GraalVM Native Image를 사용하여 고유 실행 파일로 변환할 수 있습니다. Java 바이트 코드를 JDK가 실행되지 않고 특정 대상 환경에서 실행되도록 설계된 자체 포함된 원시 바이너리로 변환할 수 있는 사전 컴파일 기술입니다.

앞서 언급한 바와 같이 사용자 편의를 위해 GraalVM Enterprise 22가 가상 머신에 사전 설치되어 있습니다. 모든 종속 라이브러리(예: libstdc++-static, glibc, zlib 등)와 함께 추가되는 고유 이미지입니다. native-image 유틸리티는 GraalVM 설치 디렉토리($JAVA_HOME/bin)에 배치됩니다.

  1. VS 코드 터미널 창에서 고유 이미지 버전을 확인합니다.

    native-image --version
    
  2. 다음 단일 명령을 실행하여 고유 Linux 실행 파일을 작성합니다.

    • Maven을 사용하는 경우 native-image 패키징 형식을 지정합니다.

    ./mvnw clean package -Dpackaging=native-image
    
    • Gradle을 사용하는 경우 nativeImage 작업을 실행합니다.

    ./gradlew nativeCompile
    

    잠시 후 ocidemo이라는 고유 실행 파일이 /target/native-image/ 디렉토리에 작성됩니다. Gradle을 사용하는 경우 ocidemo이라는 실행 파일이 /build/native/nativeCompile/ 폴더에 기록됩니다.

    : 실행 파일 작성 시간은 애플리케이션 크기와 복잡성에 따라 다르며, 전원이 부족한 VM에 시간이 걸릴 수 있습니다. 이 실습에 할당된 VM 인스턴스의 용량을 사용할 경우 예상 시간은 최대 5분입니다.

GraalVM Native Image는 모든 응용 프로그램 클래스, 종속 라이브러리 클래스, 종속 JDK 클래스 및 응용 프로그램 힙 스냅샷을 사용하여 실행 파일을 생성합니다. 네이티브 이미지를 작성하는 동안 시작 시간을 대폭 단축하고 전체 메모리 사용을 줄일 수 있는 이점이 있습니다.

3단계: OCI에 Micronaut 애플리케이션 배포

이전 단계에서 Micronaut 응용 프로그램의 고유 Linux 실행 파일을 만들었습니다. 이제 이 고유 실행 파일을 Oracle Cloud에 배치하고 동일한 응용 프로그램을 JAR 파일과 고유 이미지로 실행할 때 시작 시간을 비교합니다.

응용 프로그램을 고유 실행 파일로 배치하려면 이전 단계에서 생성된 이진 파일을 호출합니다.

./target/ocidemo

./build/native/nativeCompile/ocidemo

이 Micronaut 마이크로서비스를 단계 1의 JAR 파일보다 네이티브 이미지로 시작하는 데 얼마나 빨리 걸리는지 확인하십시오(최대 6500밀리초에서 2500까지 줄여야 함). 실행 파일이 자체 포함된 바이너리이며, JDK를 실행할 필요가 없으므로 더 빠르게 시작되어 애플리케이션을 쉽게 배포할 수 있습니다. 파일 크기도 매우 작습니다.

네이티브 실행 파일로 Java 마이크로 서비스를 배포하면 즉각적인 시작, CPU 및 메모리 사용량 감소, GraalVM Enterprise가 클라우드 전용 Java 애플리케이션 및 클라우드 구축에 적합한 후보자로 적합합니다.

이 시점에서 응용 프로그램이 성공적으로 실행 중이지만 이를 액세스하기 위해 브라우저에서 가상 시스템에 들어오는 트래픽을 허용해야 합니다. CTRL+C 응용 프로그램을 종료하고 다음 단계를 진행합니다.

4단계: 클라우드 인스턴스에 대한 트래픽을 허용하도록 방화벽 구성(선택사항)

Oracle Cloud에서 실행 중인 이 서버측 애플리케이션을 확인하고 브라우저에서 열려면 호스트 방화벽이 가상 시스템에 대한 트래픽을 허용하는지 확인해야 합니다.

  1. 클라우드 콘솔로 돌아가서 컴퓨트, 인스턴스로 이동합니다.

  2. OCI 콘솔에 로그인한 경우 컴퓨트로 이동하고 인스턴스를 누릅니다. 필요한 구획에 있는지 확인합니다(작업 1, 단계 3 참조).

    컴퓨트 인스턴스 찾기

  3. 기본 뷰에서 VM 인스턴스(graal-workshop-...로 시작하는 이름)를 찾아 엽니다.

  4. 기본 VNIC 섹션에서 인스턴스가 연결된 서브넷(subnet-01)을 누릅니다.

  5. 서브넷 페이지에서 내부 보안 목록을 누릅니다.

  6. 송신 규칙 추가를 누르고 다음 데이터를 입력합니다.

    수신 트래픽을 포트로 허용하는 수신 규칙 추가

    이 규칙을 사용하면 모든 소스의 트래픽이 포트 8080을 사용할 수 있으므로 어디에서나 응용 프로그램에 연결할 수 있습니다.

  7. 터미널 창으로 돌아가서 다음 명령을 실행하여 실행 중인 VM 인스턴스에서 방화벽을 다시 시작합니다.

    sudo firewall-cmd --permanent --add-port=8080/tcp
    

    sudo systemctl reload firewalld
    
  8. 응용 프로그램을 고유 실행 파일로 재시작합니다.

    Maven으로 구축:

    ./target/ocidemo
    

    Gradle을 사용하여 빌드:

    ./build/native/nativeCompile/ocidemo
    
  9. 브라우저에서 /pet 끝점에 대해 http://<SERVER_IP>:8080/pets, /owners 끝점에 대해 http://<SERVER_IP>:8080/owners를 사용하여 애플리케이션을 엽니다. 또는 VS 코드의 터미널 창을 분할하고 curl로 GET 요청을 보냅니다.

    curl -i http://<SERVER_IP>:8080/pets
    

축하합니다! 이 실습을 완료했습니다.

더 알아보기

이 세션을 종료하려면 도구 모음에서 [세션 종료] 단추를 누릅니다.