Java 마이그레이션 분석

마지막으로 설명할 기능은 Java 마이그레이션 분석입니다. 이를 통해 애플리케이션 준비 상태에 대한 보고서를 생성하여 최신 버전의 JDK로 마이그레이션할 수 있습니다. 모든 Oracle LTS Java 릴리스는 마지막 릴리스된 Oracle JDK와 함께 지원됩니다. 분석 보고서는 원하는 JDK 주 버전으로 전환하는 것과 관련된 노력과 위험을 제공합니다.

주:

애플리케이션 분석은 관리 인스턴스에서 수행되며 분석 중 추가 리소스가 소비됩니다.

OCI 클라우드 콘솔

  1. OCI 콘솔에 관리자로 사인인합니다.
  2. 탐색 메뉴를 열고 관찰 가능성 및 관리를 누른 다음 Java 관리에서 플리트를 누릅니다.
  3. 플리트를 선택합니다.
  4. 관리 인스턴스를 누른 다음 애플리케이션이 실행 중인 관리 인스턴스를 누릅니다.
  5. 애플리케이션을 누르고 Java 이전 분석을 시작할 애플리케이션을 선택합니다.
  6. 작업을 누르고 Java 이전 분석 시작을 선택합니다.
  7. 시작을 누릅니다.
  8. 작업 요청이 완료되면 작업 요청을 누르고 세부정보에서 플리트의 버킷에 있는 Java 이전 분석 파일로 이동합니다.

OCI CLI

  1. 다음 명령을 사용하여 대상 페이로드 템플리트를 생성합니다.
    ci jms fleet request-java-migration-analyses --generate-param-json-input
        targets
  2. 응용 프로그램에 대한 세부 정보를 찾습니다. 예를 들면 다음과 같습니다.
    oci jms application-installation-usage-summary summarize-application-installation-usage
          --display-name-contains $APP_NAME --fleet-id $FLEET_OCID
  3. 다음과 같이 페이로드 JSON 파일을 편집합니다.
    [
      {
        "applicationInstallationKey": "$APP_INSTALL_KEY",
        "managedInstanceId": "$MANAGED_INSTANCE_OCID",
        "sourceJdkVersion": "$CURRENT_MAJOR_JAVA_RUNTIME_VERSION_USED_BY_APP",
        "targetJdkVersion": "$NEXT_JAVA_VERSION"
      }
    ]
  4. 다음 명령을 실행합니다.
    oci jms fleet request-java-migration-analyses --fleet-id $FLEET_OCID --targets
          file://target.json

JMS 이전 분석의 목적은 간단합니다. 즉, 애플리케이션을 최신 Java 버전으로 이전하는 데 도움이 됩니다. 이 예제에서는 간단한 Java 8 응용 프로그램을 사용하며, 응용 프로그램을 Java 21에서 실행하기 위해 어떤 영역에 투자해야 하는지 알고 싶습니다.
#!/usr/bin/env bash
 
# configuration variables
APP_NAME=JMigrateExampleApp
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
CURRENT_MAJOR_JAVA_RUNTIME_VERSION_USED_BY_APP=1.8
NEXT_JAVA_VERSION=21
 
# get application installation key
APP_INSTALL_KEY=$(oci jms application-installation-usage-summary summarize-application-installation-usage --display-name-contains $APP_NAME --fleet-id $FLEET_OCID | jq -r '.data.items[]."application-installation-key"')
 
# JMigrate payload
cat > jmigrate-payload.json << EOF
[
  {
    "applicationInstallationKey": "$APP_INSTALL_KEY",
    "managedInstanceId": "$MANAGED_INSTANCE_OCID",
    "sourceJdkVersion": "$CURRENT_MAJOR_JAVA_RUNTIME_VERSION_USED_BY_APP",
    "targetJdkVersion": "$NEXT_JAVA_VERSION"
  }
]
EOF
 
# start java migration analysis on specified managed instance
WORK_REQUEST_OCID=$(oci jms fleet request-java-migration-analyses \
    --fleet-id "$FLEET_OCID" \
    --targets file://jmigrate-payload.json | jq -r '."opc-work-request-id"')
 
echo $WORK_REQUEST_OCID
rm jmigrate-payload.json
  
# additionally, you can add your own logic to check if work request is finished
# sleep 600
# oci jms work-request get --work-request-id "$WORK_REQUEST_OCID" | jq .data.status

JMigrate 작업 요청이 성공적으로 완료되면 JMS에서 보고서를 찾고 다음 명령문으로 해당 콘텐츠를 표시할 수 있습니다.

#!/usr/bin/env bash
 
# configuration variables
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
WORK_REQUEST_OCID=ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaapqrtnlvfyltloscefazwuuoyd6pdqpsmaxfnirregqirx3b7jbva
 
# get the analysis id, there can be multiple ids but, in our example, we expect just one
ANALYSIS_OCID=$(oci jms java-migration-analysis-result list --fleet-id $FLEET_OCID --sort-by timeCreated --sort-order DESC | jq -r ".data.items[] | select(.\"work-request-id\"==\"$WORK_REQUEST_OCID\") | .id")
 
# See the result
oci jms java-migration-analysis-result get --fleet-id $FLEET_OCID --java-migration-analysis-result-id $ANALYSIS_OCID
{
  "data": {
    "application-execution-type": "INSTALLED",
    "application-key": "38d3d5b89e9e42da00c5be9bdbee216a0e297c2ea942330e5af4051c4951b50a",
    "application-name": "JmigrateExample.jar",
    "application-path": "/home/opc/JmigrateExample.jar",
    "bucket-name": "jms_ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta",
    "fleet-id": "ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta",
    "host-name": "jms-demo",
    "id": "ocid1.jmsreport.oc1.eu-frankfurt-1.amaaaaaalzyjypyaa4puer7qtjn2s3zih55ir5jzma4lyiulxpy7qn3xtbhq",
    "managed-instance-id": "ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq",
    "metadata": null,
    "namespace": "frmss8xk2qta",
    "object-list": [
      "diagsbyapi-summary-counts.json",
      "diagsbyclass-p3.json",
      "diagsbyapi-p1.json",
      "diagsbyclass-p4.json",
      "JmigrateExample.jar.zip",
      "diagsbyclass-p1.json",
      "diagsbyapi-p4.json",
      "diagsbyapi-p4-summary.json",
      "execsummary.json",
      "diagsbyapi-p3-summary.json",
      "diagsbyapi-p1-summary.json",
      "diagsbyapi-p2-summary.json",
      "diagsbyapi-p2.json",
      "jarsummaries-without-classsummaries.json",
      "diagsbyapi-p3.json",
      "diagsbyclass-summary-counts.json",
      "diagsbyclass-p2.json"
    ],
    "object-storage-upload-dir-path": "JMS/JAVA_MIGRATION/ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta/ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq/2025-07-09T14:33:49.750Z_ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaapqrtnlvfyltloscefazwuuoyd6pdqpsmaxfnirregqirx3b7jbva_JmigrateExample.jar/7adcab9b-1556-443d-9a86-a41f3e5bbb45/",
    "source-jdk-version": "1.8",
    "target-jdk-version": "21",
    "time-created": "2025-07-09T14:41:16.353000+00:00",
    "work-request-id": "ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaapqrtnlvfyltloscefazwuuoyd6pdqpsmaxfnirregqirx3b7jbva"
  }
}

분석 데이터는 오브젝트 스토리지 서비스에 저장되며 분석 결과에서 데이터를 가져와 도달할 수 있습니다(예: 네임스페이스, bucket-name가 제공됨). 그런 다음 object-list 내에 정의된 파일 목록이 있으며 각 파일에 대해 object-storage-upload-dir-pathobject-list의 항목을 연결하여 경로를 가져올 수 있습니다.

oci os object get --bucket-name jms_ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta --name JMS/JAVA_MIGRATION/ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta/ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq/2025-07-09T14:33:49.750Z_ocid1.jmsworkrequest.oc1.eu-frankfurt-1.aaaaaaaapqrtnlvfyltloscefazwuuoyd6pdqpsmaxfnirregqirx3b7jbva_JmigrateExample.jar/7adcab9b-1556-443d-9a86-a41f3e5bbb45/jarsummaries-without-classsummaries.json --file -
 
[ {
  "url" : "jar:file:/home/opc/JmigrateExample.jar",
  "archiveType" : "JAR",
  "classCount" : 3,
  "classesWithDiagnosticsCount" : 3,
  "p1Count" : 31,
  "totalDiagnosticsCount" : 31
} ]%

더 나은 사용자 환경을 위해 OCI JMS 클라우드 콘솔을 사용하는 것이 좋습니다. 이 콘솔에서는 마이그레이션에 필요한 모든 세부정보를 제공하기 위해 보고서가 멋지게 렌더링됩니다.