다음을 통해 공유


Java용 Azure Migrate 애플리케이션 및 코드 평가

이 가이드에서는 Java용 Azure Migrate 애플리케이션 및 코드 평가 도구를 사용하여 모든 형식의 Java 애플리케이션을 평가하고 다시 플랫폼화하는 방법을 설명합니다. 이 도구를 사용하면 플랫폼을 변경하고 Azure로 마이그레이션하기 위한 애플리케이션 준비 상태를 평가할 수 있습니다. 이 도구는 CLI(명령줄 인터페이스)로 제공되며 Java 애플리케이션 이진 파일 및 소스 코드를 평가하여 Azure에 대한 재배치 및 마이그레이션 기회를 식별합니다. 일반적인 사용 사례와 코드 패턴을 식별하고 권장 변경 내용을 제안함으로써 대규모 Java 애플리케이션을 현대화하고 플랫폼을 변경하는 데 도움이 됩니다.

이 도구는 정적 코드 분석을 통해 애플리케이션 기술 사용을 발견하고, 활동 예측을 제공하고, 코드 플랫폼 변경을 가속화하여 Java 애플리케이션의 우선 순위를 지정하고 Azure로 이동하는 데 도움을 줍니다. 일련의 엔진과 규칙을 통해 Java 11, Java 17, Jakarta EE, Spring, 최대 절전 모드, JMS(Java Message Service) 등과 같은 다양한 기술을 발견하고 평가할 수 있습니다. 그런 다음 특정 Azure 플랫폼 변경 규칙을 사용하여 Java 애플리케이션을 다른 Azure 대상(Azure App Service, Azure Kubernetes Service, Azure Container Apps 및 Azure Spring Apps)으로 플랫폼을 변경하는 데 도움이 됩니다.

이 도구는 오픈 소스이며 Red Hat에서 만들고 Eclipse Public License에 따라 게시된 프로젝트인 WindUp을 기반으로 합니다.

개요

이 도구는 조직이 비용을 절감하고 더 빠른 혁신을 가능하게 하는 방식으로 Java 애플리케이션을 현대화하는 데 도움을 주기 위해 설계되었습니다. 이 도구는 고급 분석 기술을 사용하여 Java 애플리케이션의 구조와 종속성을 이해하고 애플리케이션을 리팩터링하고 Azure로 마이그레이션하는 방법에 대한 지침을 제공합니다.

이를 통해 다음 작업을 수행할 수 있습니다.

  • 기술 사용 검색: 애플리케이션이 사용하는 기술을 빠르게 확인합니다. 설명서가 많지 않은 레거시 애플리케이션이 있고 해당 애플리케이션이 사용하는 기술을 알고 싶은 경우 검색이 유용합니다.
  • 특정 대상에 대한 코드 평가: 특정 Azure 대상에 대한 애플리케이션을 평가합니다. 애플리케이션을 Azure로 다시 플랫폼화하기 위해 수행해야 하는 활동과 수정 사항을 확인합니다.

지원되는 대상

이 도구에는 다양한 Azure 서비스에 배포하고 사용할 수 있도록 애플리케이션을 다시 플랫폼화하는 데 도움이 되는 규칙이 포함되어 있습니다.

Azure Migrate 애플리케이션 및 코드 평가에 사용되는 규칙은 대상을 기준으로 그룹화됩니다. 대상은 애플리케이션이 실행되는 위치와 방법, 일반적인 요구 사항 및 예상 결과치입니다. 애플리케이션을 평가할 때 여러 대상을 선택할 수 있습니다. 다음 표에는 사용 가능한 대상이 설명되어 있습니다.

대상 설명 ID
Azure App Service Azure App Service에 앱을 배포하기 위한 모범 사례입니다. azure-appservice
Azure Spring Apps Azure Spring Apps에 앱을 배포하기 위한 모범 사례입니다. azure-spring-apps
Azure Kubernetes Service Azure Kubernetes Service에 앱을 배포하기 위한 모범 사례입니다. azure-aks
Azure Container Apps Azure Container Apps에 앱을 배포하기 위한 모범 사례입니다. azure-container-apps
클라우드 준비 상태. 애플리케이션 클라우드(Azure)를 준비하기 위한 일반적인 모범 사례입니다. cloud-readiness
발견(Discovery) 라이브러리 및 프레임워크와 같은 기술 사용을 식별합니다. discovery
Linux 애플리케이션 Linux를 준비하기 위한 일반적인 모범 사례입니다. linux
OpenJDK 11 Java 11로 Java 8 애플리케이션을 실행하기 위한 일반적인 모범 사례입니다. openjdk11
OpenJDK 17 Java 17을 사용하여 Java 11 애플리케이션을 실행하기 위한 일반적인 모범 사례입니다. openjdk17
OpenJDK 21 Java 21로 Java 17 애플리케이션을 실행하기 위한 일반적인 모범 사례입니다. openjdk21

도구가 클라우드 준비성 및 관련 Azure 서비스를 평가할 때 다양한 Azure 서비스의 잠재적 사용량에 대한 유용한 정보도 보고할 수 있습니다. 다음 목록에는 적용되는 몇 가지 서비스가 나열되어 있습니다.

  • Azure 데이터베이스
  • Azure Service Bus
  • Azure Storage
  • Azure Content Delivery Network
  • Azure Event Hubs
  • Azure Key Vault
  • Azure Front Door

다운로드

appcat CLI를 사용하려면 다음 섹션에 설명된 ZIP 파일을 다운로드해야 하며 컴퓨터에 호환 가능한 JDK 11 또는 JDK 17이 설치되어 있어야 합니다. appcat CLI는 Windows, Linux 또는 Mac과 같은 Intel, Arm 및 Apple Silicon 하드웨어용 Java 호환 환경에서 실행됩니다. OpenJDK의 Microsoft 빌드를 사용하는 것이 좋습니다.

Java 6.3.0.9에 대한 Azure Migrate 애플리케이션 및 코드 평가를 다운로드합니다. 2024-08-06에 업데이트되었습니다.

자세한 내용은 릴리스 정보 섹션을 참조하세요.

알려진 문제

특정 Lambda 식을 구문 분석할 때 특정 규칙이 트리거되지 않을 수도 있습니다. 자세한 내용은 GitHub 문제를 참조하세요.

복합 더블바이트 문자가 있는 유니코드가 아닌 환경에서 appcat을 실행하면 손상이 발생합니다. 해결 방법은 GitHub 문제를 참조하세요.

이전 릴리스

다음 이전 릴리스도 다운로드할 수 있습니다.

  • Java 6.3.0.8에 대한 Azure Migrate 애플리케이션 및 코드 평가. 2024년 3월에 릴리스되었습니다.
  • Java 6.3.0.7에 대한 Azure Migrate 애플리케이션 및 코드 평가. 2023년 11월에 릴리스되었습니다.

시작하기

실행 appcat하려면 지원되는 JDK가 설치되어 있는지 확인합니다. 이 도구는 다음 JDK를 지원합니다.

  • OpenJDK 11의 Microsoft 빌드
  • OpenJDK 17의 Microsoft 빌드
  • Eclipse Temurin™ JDK 11
  • Eclipse Temurin™ JDK 17

유효한 JDK를 설치한 후에는 해당 설치 디렉터리가 환경 변수에서 JAVA_HOME 제대로 구성되었는지 확인합니다.

계속하려면 선택한 폴더에서 패키지를 다운로드하고 압축을 풉니다. 그러면 다음과 같은 디렉터리 구조가 표시됩니다.

appcat-cli-<version>    # APPCAT_HOME
  ├── README.md
  ├── bin
  │   ├── appcat
  │   └── appcat.bat
  ├── docs
  │   └── appcat-guide.html
  └── samples
      ├── airsonic.war
      ├── run-assessment
      ├── run-assessment-custom-rules
      ├── run-assessment-exclude-packages
      ├── run-assessment-no-code-report
      ├── run-assessment-openjdk21
      ├── run-assessment-zip-report
      └── run-discovery
  • docs: 이 디렉터리에는 appcat의 설명서가 포함되어 있습니다.
  • bin: 이 디렉터리에는 appcat CLI 실행 파일(Windows/Linux/Mac용)이 포함되어 있습니다.
  • samples: 이 디렉터리에는 샘플 애플리케이션과 샘플 애플리케이션에 대해 appcat를 실행하기 위한 여러 스크립트가 포함되어 있습니다.

도구를 실행하려면 터미널 세션을 열고 $APPCAT_HOME/bin 디렉터리에서 다음 명령을 입력합니다.

./appcat --help

컴퓨터 어디에서나 도구를 실행하려면 $APPCAT_HOME/bin 디렉터리를 PATH 환경 변수로 구성한 다음 터미널 세션을 다시 시작합니다.

설명서

다음 가이드는 Java용 appcat에 대한 기본 설명서를 제공합니다.

Azure 서비스를 염두에 두지 않고 기술 사용 및 클라우드 준비 상태 알아보기

기술 및 클라우드 준비 대상에 대한 검색은 애플리케이션 재플랫폼 및 클라우드 현대화에 대한 뛰어난 인사이트를 제공합니다. 이 도구를 사용하여 애플리케이션과 해당 구성 요소를 검사함으로써 해당 구조, 아키텍처 및 종속성에 대한 포괄적인 이해를 얻습니다. 또한 클라우드 환경에서 어려울 수 있는 잠재적인 문제도 찾아냅니다. 특히 discovery 대상은 애플리케이션과 해당 구성 요소의 상세 인벤토리를 만드는 데 사용됩니다. 이 목록은 추가 분석 및 계획을 위한 기초 역할을 합니다. 자세한 내용은 검색 보고서 섹션을 참조하세요.

검색 및 클라우드 준비를 시작하려면 다음 명령을 사용합니다.

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target discovery cloud-readiness

이 형식의 보고서는 애플리케이션을 배포할 특정 Azure 서비스를 염두에 두지 않은 경우에 유용합니다.

이 도구는 --target 매개 변수에 해당 값을 포함하는지 여부에 관계없이 항상 discovery를 수행합니다.

Java 애플리케이션 평가

평가 단계에서는 appcat CLI가 애플리케이션과 해당 구성 요소를 분석하여 재개발 적합성을 결정하고 잠재적인 문제나 제한 사항을 식별합니다. 이 단계에는 애플리케이션 코드를 분석하고 선택한 대상과의 호환성을 확인하는 작업이 포함됩니다.

--target 인수와 함께 공백으로 구분된 값 목록을 사용하여 여러 대상을 선택할 수 있습니다.

사용 가능한 대상을 확인하려면 다음 명령을 실행합니다.

./appcat --listTargetTechnologies

이 명령은 다음 예제와 유사한 출력을 생성합니다.

Available target technologies:
    azure-aks
    azure-appservice
    azure-container-apps
    azure-spring-apps
    cloud-readiness
    discovery
    linux
    openjdk11
    openjdk17
    openjdk21

그런 후 다음 예에 표시된 것처럼 사용 가능한 대상 중 하나 또는 조합을 사용하여 appcat를 실행할 수 있습니다.

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target cloud-readiness linux azure-appservice

다음 예와 같이 사용 가능한 OpenJDK 대상 중 하나를 사용하여 appcat를 실행할 수도 있습니다.

./appcat \
    --input ./<my-application-source-path or my-application-jar-war-ear-file> \
    --target openjdk11

OpenJDK(Java) 대상의 경우 한 번에 하나만 선택하는 것이 좋습니다.

Azure 평가 대상 권장 사항

Azure 배포용 애플리케이션을 평가할 때마다 다음 대상부터 시작하는 것이 좋습니다.

  • discovery
  • cloud-readiness

또한 azure-appservice 또는 azure-container-apps와 같은 배포용 Azure 서비스를 지정합니다.

애플리케이션을 Windows 환경에서 Linux VM 또는 컨테이너로 이동하려는 경우 linux 대상도 추가하는 것이 좋습니다.

이전 버전의 JDK에서 최신 버전으로 애플리케이션을 이동하려는 경우 애플리케이션에서 사용 중인 이전 버전과 비교하여 다음 주 버전을 선택하는 것이 좋습니다. 예를 들어, 애플리케이션이 현재 Java 8로 배포된 경우 openjdk11을 사용합니다.

appcat에서 결과 가져오기

검색 및 평가 단계의 결과는 Azure 서비스 및 플랫폼 변경 방식에 대한 권장 사항을 포함하여 Java 애플리케이션의 플랫폼 변경 및 현대화를 위한 로드맵을 제공하는 자세한 보고서입니다. 이 보고서는 플랫폼 변경 프로세스의 다음 단계를 위한 기초 역할을 합니다. 이는 조직이 이러한 변환에 필요한 활동에 대해 배우고 최대 이점을 위해 애플리케이션을 현대화하는 방법에 대한 결정을 내리는 데 도움이 됩니다.

appcat에서 생성된 보고서는 애플리케이션과 해당 구성 요소에 대한 포괄적인 개요를 제공합니다. 이 보고서를 사용하여 애플리케이션의 구조와 종속성에 대한 인사이트를 얻고 플랫폼 변경 및 현대화에 대한 적합성을 결정할 수 있습니다.

다음 섹션에서는 보고서에 대한 추가 정보를 제공합니다.

분석 요약

보고서의 방문 페이지에는 애플리케이션에 사용되는 모든 기술이 나열되어 있습니다. 대시보드는 변환 인시던트 수, 인시던트 범주 또는 스토리 포인트를 포함한 분석 요약을 제공합니다.

appcat 요약 보고서의 스크린샷.

범주별 인시던트 원형 차트를 확대하면 필수, 선택, 잠재적, 정보 범주별로 인시던트 수를 확인할 수 있습니다.

대시보드에는 스토리 포인트도 표시됩니다. 스토리 포인트는 기능이나 변경을 구현하는 데 필요한 활동 수준을 예상하기 위해Agile Software Development에서 일반적으로 사용되는 추상적 측정 기준입니다. appcat는 스토리 포인트를 사용하여 특정 애플리케이션을 마이그레이션하는 데 필요한 활동의 수준을 표현합니다. 스토리 포인트가 반드시 근무 시간으로 변환되는 것은 아니지만 그 값은 작업 전체에서 일관되어야 합니다.

AppCAT 요약 인시던트 보고서의 스크린샷.

검색 보고서

검색 보고서는 검색 단계 중에 생성된 보고서입니다. 정보 범주에는 애플리케이션에서 사용하는 기술 목록이 표시됩니다. 이 보고서는 appcat가 발견한 기술 사용에 대해 알려드리기 위한 것입니다.

appcat 검색 보고서의 스크린샷.

평가 도구

평가 보고서는 애플리케이션을 Azure로 마이그레이션하기 위해 해결해야 하는 변환 문제를 간략하게 설명합니다.

인시던트라고도 하는 이러한 문제에는 심각도(필수, 선택, 잠재적 또는 정보), 노력 수준 및 스토리 포인트를 나타내는 숫자가 있습니다. 스토리 포인트는 인시던트 수와 인시던트를 해결하는 데 필요한 활동을 곱하여 계산하여 결정됩니다.

AppCAT 평가 보고서의 스크린샷.

특정 문제에 대한 자세한 정보

각 인시던트에 대해 선택만 하면 자세한 정보(인시던트 세부 정보, 규칙 콘텐츠 등)를 확인할 수 있습니다. 또한 이 인시던트의 영향을 가져오는 모든 파일의 목록도 가져올 수 있습니다.

AppCAT 문제 세부 보고서의 스크린샷.

그런 다음 인시던트의 영향을 받은 각 파일 또는 클래스에 대해 소스 코드로 이동하여 인시던트를 만든 코드 줄을 강조 표시할 수 있습니다.

AppCAT 문제 코드 보고서의 스크린샷.

사용자 지정 규칙

appcat를 규칙 엔진으로 생각할 수 있습니다. 규칙을 사용하여 Java 보관에서 파일을 추출하고, Java 클래스를 디컴파일하고, 파일 형식을 검사 및 분류하고, 이러한 파일을 분석하고, 보고서를 빌드합니다. appcat에서 규칙은 규칙 집합 형식으로 정의됩니다. 규칙 집합은 appcat가 분석 중에 검색할 수 있는 특정 문제 또는 패턴을 정의하는 개별 규칙의 컬렉션입니다.

이러한 규칙은 XML로 정의되며 다음 규칙 패턴을 사용합니다.

when (condition)
    perform (action)
    otherwise (action)

appcat는 포괄적인 표준 마이그레이션 규칙 집합을 제공합니다. 애플리케이션에는 사용자 지정 라이브러리 또는 구성 요소가 포함될 수 있으므로 appcat를 사용하면 기존 규칙 집합에서 다룰 수 있는 구성 요소 또는 소프트웨어의 사용을 식별하는 자체 규칙을 작성할 수 있습니다.

사용자 지정 규칙을 작성하려면 XML로 표현된 풍부한 DSL(도메인 특정 언어)를 사용합니다. 예를 들어, Java 애플리케이션에서 PostgreSQL JDBC 드라이버 사용을 식별하고 대신 Azure PostgreSQL 유연한 서버 사용을 제안하는 규칙이 필요하다고 가정해 보겠습니다. Maven pom.xml 파일 또는 Gradle 파일에 정의된 PostgreSQL JDBC 드라이버를 찾으려면 다음 예에 표시된 종속성과 같은 규칙이 필요합니다.

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

이 종속성의 사용을 검색하기 위해 규칙은 다음 XML 태그를 사용합니다.

  • ruleset: 규칙 집합의 고유 식별자입니다. 규칙 집합은 특정 기술과 관련된 규칙 컬렉션입니다.
  • targetTechnology: 규칙이 대상으로 삼는 기술입니다. 이 경우 규칙은 Azure App Services, AKS(Azure Kubernetes Service), Azure Spring 앱 및 Azure Container Apps를 대상으로 합니다.
  • rule: 단일 규칙의 루트 요소입니다.
  • when: 규칙이 트리거되기 위해 충족되어야 하는 조건입니다.
  • perform: 규칙이 트리거될 때 수행될 작업입니다.
  • hint: 보고서에 표시할 메시지, 해당 범주(정보, 선택 사항 또는 필수) 및 문제를 해결하는 데 필요한 활동(1(쉬움)~13(어려움) 범위)입니다.

다음 XML은 사용자 지정 규칙 정의를 보여 줍니다.

<ruleset id="azure-postgre-flexible-server"
         xmlns="http://windup.jboss.org/schema/jboss-ruleset"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://windup.jboss.org/schema/jboss-ruleset http://windup.jboss.org/schema/jboss-ruleset/windup-jboss-ruleset.xsd">
    <metadata>
        <description>Recommend Azure PostgreSQL Flexible Server.</description>
        <dependencies>
            <addon id="org.jboss.windup.rules,windup-rules-xml,3.0.0.Final"/>
        </dependencies>
        <targetTechnology id="azure-appservice"/>
        <targetTechnology id="azure-aks"/>
        <targetTechnology id="azure-container-apps"/>
        <targetTechnology id="azure-spring-apps"/>
    </metadata>
    <rules>
        <rule id="azure-postgre-flexible-server">
            <when>
                <project>
                    <artifact groupId="org.postgresql" artifactId="postgresql"/>
                </project>
            </when>
            <perform>
                <hint title="Azure PostgreSQL Flexible Server" category-id="mandatory" effort="7">
                    <message>The application uses PostgreSQL. It is recommended to use Azure PostgreSQL Flexible Server instead.</message>
                    <link title="Azure PostgreSQL Flexible Server documentation" href="https://learn.microsoft.com/azure/postgresql/flexible-server/overview"/>
                </hint>
            </perform>
        </rule>
    </rules>
</ruleset>

appcat를 통해 이 규칙을 실행한 후 분석을 다시 실행하여 생성된 보고서를 검토합니다. 다른 인시던트와 마찬가지로 평가 보고서에는 이 규칙과 관련하여 식별된 인시던트와 영향을 받는 파일이 나열됩니다.

규칙이 실행되는 appcat의 스크린샷.

규칙 개발에 대한 전체 가이드는 azure.github.io/appcat-docs/rules-development-guide에서 확인할 수 있습니다.

릴리스 정보

6.3.0.9

이 릴리스에는 다음 수정 사항이 포함되어 있으며 새 규칙 집합이 포함되어 있습니다. 자세한 내용은 아래의 을 참조하십시오.

  • 규칙 문제를 해결했습니다 localhost-java-00001 .
  • AWS S3, AWS SQS, Alibaba 클라우드 OS S, Alibaba Cloud SMS, Alibaba Scheduler X, Alibaba Cloud Seata 및 Alibaba Rocket MQ와 같은 기술을 식별하기 위한 새로운 규칙을 도입했습니다.
  • azure-file-system-02000 이제 xml 파일 확장자를 지원하도록 업데이트되었습니다.
  • 보안 취약성을 해결하기 위해 다양한 라이브러리를 업그레이드했습니다.

6.3.0.8

이전에는 기본적으로 일련의 대상이 사용하도록 설정되어 특정 고객이 덜 중요한 문제와 관련된 인시던트가 너무 많은 대규모 애플리케이션을 평가하기가 어려웠습니다. 보고서의 노이즈를 줄이려면 이제 사용자는 appcat를 실행할 때 매개 변수 --target을 사용하여 여러 대상을 지정해야 하며, 이는 중요한 대상만 선택할 수 있는 옵션을 제공합니다.

6.3.0.7

Azure Migrate 애플리케이션 및 코드 평가의 GA(일반 공급) 릴리스입니다.

라이선스

Java용 Azure Migrate 애플리케이션 및 코드 평가는 무료 오픈 소스 도구이며 업스트림 WindUp 프로젝트와 동일한 라이선스에 따라 라이선스가 부여됩니다.

자주 묻는 질문

Q: Java용 Azure Migrate 애플리케이션 및 코드 평가의 최신 버전은 어디에서 다운로드할 수 있나요?

aka.ms/appcat/azure-appcat-cli-latest.zip에서 appcat를 다운로드할 수 있습니다.

Q: Azure Migrate 애플리케이션 및 Java용 코드 평가에 대한 자세한 내용은 어디에서 찾을 수 있나요?

appcat를 다운로드하면 시작하는 데 필요한 모든 정보가 포함된 docs 디렉터리를 가져오게 됩니다.

Q: 특정 Azure 규칙은 어디에서 찾을 수 있나요?

모든 Azure 규칙은 appcat 규칙 집합 GitHub 리포지토리에서 사용할 수 있습니다.

Q: 사용자 지정 규칙 만들기에 대한 자세한 내용은 어디에서 찾을 수 있나요?

Azure Migrate 애플리케이션 및 Java용 코드 평가에 대한 규칙 개발 가이드를 참조하세요.

Q: 사용자 지정 규칙을 만들 때 어디서 도움을 가져올 수 있나요?

도움을 가져오는 가장 좋은 방법은 appcat-rulesets GitHub 리포지토리에 문제를 만드는 것입니다.