WebSphere 애플리케이션을 Azure 앱 Service의 JBoss EAP로 마이그레이션

이 가이드에서는 JBoss EAP를 사용하여 Azure 앱 Service에서 실행되도록 기존 WebSphere 애플리케이션을 마이그레이션할 때 알아야 할 사항에 대해 설명합니다.

사전 마이그레이션

마이그레이션을 성공적으로 수행하려면 시작하기 전에 다음 섹션에서 설명하는 평가 및 인벤토리 단계를 완료합니다.

인벤토리 서버 용량

현재 프로덕션 서버의 하드웨어(메모리, CPU, 디스크) 및 평균 및 최대 요청 수 및 리소스 사용률을 문서화합니다. 선택한 마이그레이션 경로에 관계없이 이 정보가 필요합니다. 예를 들어 App Service 계획의 선택을 안내하는 데 유용합니다.

사용 가능한 App Service 계획 계층 목록에는 메모리, CPU 코어, 스토리지 및 가격 책정 정보가 표시됩니다. App Service의 JBoss EAP는 프리미엄 V3격리된 V2 App Service 계획 계층에서만 사용할 수 있습니다.

모든 비밀 인벤토리

프로덕션 서버 또는 서버의 모든 속성 및 구성 파일에서 비밀 및 암호를 확인합니다. WAR에서 ibm-web-bnd.xml을 검사 합니다. 암호 또는 자격 증명이 포함된 구성 파일도 애플리케이션 내에서 찾을 수 있습니다. 이러한 파일에는 Spring Boot 애플리케이션 의 경우 application.properties 또는 application.yml 파일이 포함될 수 있습니다.

모든 인증서 인벤토리화

공용 SSL 엔드포인트에 사용되는 모든 인증서를 문서화합니다. 다음 명령을 실행하여 프로덕션 서버의 모든 인증서를 볼 수 있습니다.

keytool -list -v -keystore <path to keystore>

지원되는 Java 버전이 올바르게 작동하는지 확인

Azure 앱 Service의 JBoss EAP는 Java 8 및 11을 지원합니다. 따라서 지원되는 버전을 사용하여 애플리케이션을 올바르게 실행할 수 있는지 확인해야 합니다. 현재 서버에서 지원되는 JDK(예: Oracle JDK 또는 IBM OpenJ9)를 사용하는 경우 이 유효성 검사가 특히 중요합니다.

현재 Java 버전을 가져오려면 프로덕션 서버에 로그인하고 다음 명령을 실행합니다.

java -version

JNDI 리소스 인벤토리

모든 JNDI 리소스를 인벤토리화합니다. JMS 메시지 브로커와 같은 일부 리소스에는 마이그레이션 또는 재구성이 필요할 수 있습니다.

애플리케이션 내부

WEB-INF/ibm-web-bnd.xml 파일 및/또는 WEB-INF/web.xml 파일을 검사합니다.

데이터베이스 사용 여부 확인

애플리케이션에서 데이터베이스를 사용하는 경우 다음 정보를 캡처해야 합니다.

  • 데이터 원본 이름입니다.
  • 연결 풀 구성입니다.
  • JDBC 드라이버 JAR 파일의 위치입니다.

파일 시스템의 사용 여부 및 방법 확인

애플리케이션 서버에서 파일 시스템을 사용하려면 재구성하거나 드물게 아키텍처 변경이 필요합니다. 파일 시스템은 WebSphere 공유 모듈 또는 애플리케이션 코드에서 사용할 수 있습니다. 다음 시나리오의 일부 또는 전부를 식별할 수 있습니다.

읽기 전용 정적 콘텐츠

애플리케이션이 현재 정적 콘텐츠를 제공하는 경우 대체 위치가 필요합니다. 정적 콘텐츠를 Azure Blob Storage로 이동하고 전역적으로 빠른 다운로드를 위해 Azure CDN을 추가하는 것이 좋습니다. 자세한 내용은 Azure Storage빠른 시작에서 정적 웹 사이트 호스팅: Azure CDN과 Azure Storage 계정 통합을 참조하세요. Azure Spring Apps Enterprise 계획의 앱에 정적 콘텐츠를 직접 배포할 수도 있습니다. 자세한 내용은 웹 정적 파일 배포를 참조 하세요.

동적으로 게시된 정적 콘텐츠

애플리케이션이 애플리케이션에서 업로드/생성되었지만 생성 후 변경할 수 없는 정적 콘텐츠를 허용하는 경우, 위에서 설명한 대로 Azure Blob Storage 및 Azure CDN과 Azure Function을 사용하여 업로드 및 CDN 새로 고침을 처리할 수 있습니다. Azure Functions를 사용하여 정적 콘텐츠를 업로드 및 CDN 미리 로드할 때 사용할 샘플 구현을 제공했습니다. Azure Spring Apps Enterprise 계획의 앱에 정적 콘텐츠를 직접 배포할 수도 있습니다. 자세한 내용은 웹 정적 파일 배포를 참조 하세요.

동적 또는 내부 콘텐츠

애플리케이션에서 자주 쓰고 읽는 파일(예: 임시 데이터 파일) 또는 애플리케이션에만 표시되는 정적 파일의 경우 Azure Storage를 App Service 파일 시스템에 탑재할 수 있습니다. 자세한 내용은 Linux의 App Service에서 Azure Storage의 콘텐츠 제공을 참조하세요.

애플리케이션이 예약된 작업에 의존하는지 확인

Quartz Scheduler 작업 또는 Unix cron 작업과 같은 예약된 작업은 Azure 앱 Service에서 사용하면 안 됩니다. Azure 앱 서비스에서는 예약된 작업이 포함된 애플리케이션을 내부적으로 배포할 수 없습니다. 그러나 애플리케이션이 확장되는 경우 동일한 예약된 작업이 예약된 기간마다 두 번 이상 실행될 수 있습니다. 이 상황은 의도하지 않은 결과를 초래할 수 있습니다.

Azure에서 예약된 작업을 실행하려면 타이머 트리거와 함께 Azure Functions를 사용하는 것이 좋습니다. 자세한 내용은 Azure Functions릐 타이머 트리거를 참조하세요. 작업 코드 자체를 함수로 마이그레이션할 필요가 없습니다. 함수는 애플리케이션에서 URL을 호출하여 작업을 트리거할 수 있습니다.

참고 항목

악의적인 사용을 방지하려면 작업 호출 엔드포인트에 자격 증명이 필요한지 확인해야 할 수 있습니다. 이 경우 트리거 함수는 자격 증명을 제공해야 합니다.

온-프레미스에 대한 연결이 필요한지 확인

애플리케이션이 온-프레미스 서비스에 액세스해야 하는 경우 Azure의 연결 서비스 중 하나를 프로비전해야 합니다. 자세한 내용은 온-프레미스 네트워크를 Azure에 연결하기 위한 솔루션 선택을 참조하세요. 또는 온-프레미스 리소스가 노출하는 공개적으로 사용 가능한 API를 사용하도록 애플리케이션을 리팩터링해야 합니다.

JMS(Java Message Service) 큐 또는 토픽을 사용하는지 확인

애플리케이션에서 JMS 큐 또는 토픽을 사용하는 경우 외부에서 호스팅되는 JMS 서버로 마이그레이션해야 합니다. Azure Service Bus 및 AMQP(고급 메시지 큐 프로토콜)는 JMS를 사용하는 사람들에게 훌륭한 마이그레이션 전략이 될 수 있습니다. 자세한 내용은 Azure Service Bus 및 AMQP 1.0에서 JMS 사용을 참조 하세요.

JMS 영구 저장소가 구성된 경우 해당 구성을 캡처하고 마이그레이션 후에 적용해야 합니다.

애플리케이션에서 WebSphere 관련 API를 사용하는지 확인

애플리케이션에서 WebSphere 관련 API를 사용하는 경우 애플리케이션을 사용하지 않도록 리팩터링해야 합니다. 앱용 Red Hat 마이그레이션 도구 키트는 이러한 종속성을 제거하고 리팩터링하는 데 도움이 될 수 있습니다.

애플리케이션에서 Entity Beans 또는 EJB 2.x 스타일 CMP Beans를 사용하는지 확인

애플리케이션에서 Entity Beans 또는 EJB 2.x 스타일 CMP Beans를 사용하는 경우 애플리케이션을 리팩터링하여 이러한 종속성을 제거해야 합니다.

JavaEE 애플리케이션 클라이언트 기능이 사용되는지 확인

JavaEE 애플리케이션 클라이언트 기능을 사용하여 (서버) 애플리케이션에 연결하는 클라이언트 애플리케이션이 있는 경우 HTTP API를 사용하려면 클라이언트 애플리케이션과 (서버) 애플리케이션을 모두 리팩터링해야 합니다.

애플리케이션에 OS 관련 코드가 포함되어 있는지 확인

호스트 OS에 대한 종속성이 있는 코드가 애플리케이션에 포함되어 있는 경우 해당 종속성을 제거하려면 이 코드를 리팩터링해야 합니다. 예를 들어 파일 시스템 경로에서 사용하고 있는 / 또는 \File.Separator 또는 Paths.get으로 바꿔야 할 수 있습니다.

EJB 타이머가 사용 중인지 확인

애플리케이션에서 EJB 타이머를 사용하는 경우 각 JBoss EAP 인스턴스에서 EJB 타이머 코드를 독립적으로 트리거할 수 있는지 확인해야 합니다. App Service가 수평으로 확장되면 각 EJB 타이머가 자체 JBoss EAP 인스턴스에서 트리거되기 때문에 이 유효성 검사가 필요합니다.

JCA 커넥터가 사용되는지 확인

애플리케이션에서 JCA 커넥터를 사용하는 경우 JCA 커넥터를 JBoss EAP에서 사용할 수 있는지 확인해야 합니다. JCA 구현이 WebSphere에 연결된 경우 애플리케이션을 리팩터링하여 JCA 커넥터에 대한 종속성을 제거해야 합니다. JCA 커넥터를 사용할 수 있는 경우 서버 클래스 경로에 JAR을 추가해야 합니다. 또한 JBoss EAP 서버 디렉터리의 올바른 위치에 필요한 구성 파일을 배치해야 사용할 수 있습니다.

JAAS가 사용 중인지 확인

애플리케이션에서 JAAS를 사용하는 경우 JAAS가 구성된 방법을 캡처해야 합니다. 데이터베이스를 사용하는 경우 JBoss EAP에서 JAAS do기본로 변환할 수 있습니다. 사용자 지정 구현인 경우 JBoss EAP에서 사용할 수 있는지 확인해야 합니다.

애플리케이션에서 리소스 어댑터를 사용하는지 확인

애플리케이션에 RA(리소스 어댑터)가 필요한 경우 JBoss EAP와 호환되어야 합니다. RA가 서버에 배포하고 올바르게 구성하여 JBoss EAP의 독립 실행형 인스턴스에서 제대로 작동하는지 확인합니다. RA가 제대로 작동하는 경우 APP Service 인스턴스의 서버 클래스 경로에 JAR을 추가하고 필요한 구성 파일을 JBoss EAP 서버 디렉터리의 올바른 위치에 배치해야 사용할 수 있습니다.

애플리케이션이 여러 WAR로 구성되었는지 확인

애플리케이션이 여러 WAR로 구성된 경우 각 WAR을 별도의 애플리케이션으로 처리하고 각 WAR에 대해 이 가이드를 진행해야 합니다.

애플리케이션이 EAR로 패키지되었는지 확인

애플리케이션이 EAR 파일로 패키지된 경우 application.xmlibm-application-bnd.xml 파일을 검사하고 해당 구성을 캡처해야 합니다.

프로덕션 서버에서 실행되는 모든 외부 프로세스 및 디먼 식별

애플리케이션 서버 외부에서 실행 중인 프로세스(예: 디먼 모니터링)가 있는 경우 해당 프로세스를 제거하거나 다른 곳으로 마이그레이션해야 합니다.

마이그레이션

앱용 Red Hat 마이그레이션 도구 키트

Red Hat Migration Toolkit for Applications는 Visual Studio Code용 무료 확장입니다. 이 확장은 애플리케이션 코드 및 구성을 분석하여 전용 API에 대한 종속성 제거와 같은 다른 앱 서버에서 JBoss EAP로 Jakarta EE 애플리케이션을 마이그레이션하기 위한 권장 사항을 제공합니다. 또한 확장은 온-프레미스에서 클라우드로 마이그레이션하는 경우 권장 사항을 제공합니다. 자세한 내용은 애플리케이션용 마이그레이션 도구 키트 개요를 참조하세요.

이 가이드의 내용은 올바른 App Service 계획 유형 선택, 세션 상태 외부화 및 Azure를 사용하여 JBoss 관리 인터페이스 대신 EAP 인스턴스를 관리하는 등 마이그레이션 과정의 다른 구성 요소를 해결하는 데 도움이 됩니다.

App Service 계획 프로비저닝

사용 가능한 서비스 계획 목록에서 사양이 현재 프로덕션 하드웨어의 사양을 충족하거나 초과하는 계획을 선택합니다.

참고 항목

스테이징/카나리아 배포를 실행하거나 배포 슬롯을 사용하려는 경우 App Service 계획에 추가 용량이 포함되어야 합니다. Java 애플리케이션에 프리미엄 이상 플랜을 사용하는 것이 좋습니다.

해당 App Service 계획을 만듭니다.

웹앱 만들기 및 배포

JBoss EAP 서버에 배포된 모든 WAR 파일에 대해 App Service 계획에 웹앱을 만들어야 합니다.

참고 항목

여러 WAR 파일을 단일 웹앱에 배포할 수 있지만 매우 바람직하지 않습니다. 여러 WAR 파일을 단일 웹앱에 배포하면 각 애플리케이션의 사용량 요구에 따라 크기가 조정되지 않습니다. 또한 복잡성을 후속 배포 파이프라인에 추가합니다. 단일 URL에서 여러 애플리케이션을 사용할 수 있어야 하는 경우 Azure 애플리케이션 Gateway와 같은 라우팅 솔루션을 사용하는 것이 좋습니다.

Maven 애플리케이션

애플리케이션이 Maven POM 파일에서 빌드된 경우 Maven용 Webapp 플러그 인을 사용하여 웹앱을 만들고 애플리케이션을 배포합니다. 자세한 내용은 빠른 시작의 Maven 플러그 인 구성 섹션을 참조하세요. Azure 앱 Service에서 Java 앱 만들기

Maven이 아닌 애플리케이션

Maven 플러그 인을 사용할 수 없는 경우 다음과 같은 다른 메커니즘을 통해 웹앱을 프로비전해야 합니다.

웹앱을 만든 후 사용 가능한 배포 메커니즘 중 하나를 사용하여 애플리케이션을 배포합니다. 자세한 내용은 App Service에 파일 배포를 참조하세요.

JVM 런타임 옵션 마이그레이션

애플리케이션에 특정 런타임 옵션이 필요한 경우 가장 적절한 메커니즘을 사용하여 지정합니다. 자세한 내용은 Azure 앱 Service용 Java 앱 구성의 Java 런타임 옵션 설정 섹션을 참조하세요.

비밀 채우기

[애플리케이션 설정]을 사용하여 애플리케이션과 관련된 모든 비밀을 저장합니다. 여러 애플리케이션에서 동일한 비밀 또는 비밀을 사용하거나 세분화된 액세스 정책 및 감사 기능이 필요한 경우 Azure Key Vault 참조를 대신 사용합니다. 자세한 내용은 Azure 앱 Service용 Java 앱 구성의 KeyVault 참조 사용 섹션을 참조하세요.

사용자 지정 do기본 및 SSL 구성

애플리케이션이 사용자 지정 도메인에 표시되면 웹 애플리케이션을 이 도메인에 매핑해야 합니다. 자세한 내용은 자습서: 기존 사용자 지정 DNS 이름을 Azure 앱 Service에 매핑을 참조하세요.

그런 다음, 이를 위해 TLS/SSL 인증서를 App Service 웹앱에 바인딩해야 합니다기본. 자세한 내용은 Azure App Service에서 TLS/SSL 바인딩으로 사용자 지정 DNS 이름 보호를 참조하세요.

데이터 원본, 라이브러리 및 JNDI 리소스 마이그레이션

데이터 원본을 마이그레이션하려면 Azure 앱 Service용 Java 앱 구성의 데이터 원본 구성 섹션에 있는 단계를 따릅니다.

Azure 앱 Service용 Java 앱 구성의 JBoss EAP 섹션에 있는 지침에 따라 추가 서버 수준 클래스 경로 종속성을 마이그레이션합니다.

추가 공유 서버 수준 JDNI 리소스를 마이그레이션합니다. 자세한 내용은 Azure 앱 Service용 Java 앱 구성의 JBoss EAP 섹션을 참조하세요.

참고 항목

애플리케이션당 하나의 WAR의 권장 아키텍처를 따르는 경우 서버 수준 클래스 경로 라이브러리 및 JNDI 리소스를 애플리케이션으로 마이그레이션하는 것이 좋습니다. 이렇게 하면 구성 요소 거버넌스 및 변경 관리가 크게 간소화됩니다. 애플리케이션당 WAR을 두 개 이상 배포하려면 이 가이드의 시작 부분에 멘션 도우미 가이드 중 하나를 검토해야 합니다.

예약된 작업 마이그레이션

최소한 예약된 작업을 Azure VM으로 이동하여 더 이상 애플리케이션에 속하지 않도록 해야 합니다. 또는 Azure Functions, SQL Database 및 Event Hubs와 같은 Azure 서비스를 사용하여 이벤트 기반 Java로 현대화하도록 선택할 수 있습니다.

다시 시작 및 스모크 테스트

마지막으로 모든 구성 변경 내용을 적용하려면 웹앱을 다시 시작해야 합니다. 다시 시작이 완료되면 애플리케이션이 올바르게 실행되고 있는지 확인합니다.

마이그레이션 후

이제 애플리케이션을 Azure 앱 Service로 마이그레이션했으므로 예상대로 작동하는지 확인해야 합니다. 이렇게 하면 애플리케이션을 클라우드 네이티브로 만들 수 있는 몇 가지 권장 사항이 있습니다.

권장 사항

  • 파일 스토리지에 /home 디렉터리를 사용하도록 선택한 경우 Azure Storage로 바꾸는 것이 좋습니다. 자세한 내용은 App Service의 사용자 지정 컨테이너에서 로컬 공유로 Azure Storage 탑재를 참조 하세요.

  • /home 디렉터리에 연결 문자열, SSL 키 및 기타 비밀 정보를 포함하는 구성이 있는 경우 가능한 경우 애플리케이션 설정과 함께 Azure Key Vault 및 매개 변수 삽입의 조합을 사용하는 것이 좋습니다. 자세한 내용은 App Service 및 Azure Functions 에 대한 Key Vault 참조 사용 및 App Service 앱 구성을 참조하세요.

  • 가동 중지 시간이 없는 안정적인 배포를 위해 배포 슬롯을 사용하는 것이 좋습니다. 자세한 내용은 Azure 앱 Service에서 스테이징 환경 설정을 참조하세요.

  • DevOps 전략을 설계하고 구현합니다. 개발 속도를 높이는 동시에 안정성을 유지하기 위해 Azure Pipelines를 사용하여 배포를 자동화하고 테스트하는 것이 좋습니다. 자세한 내용은 Java 웹앱에 빌드 및 배포를 참조 하세요. 배포 슬롯을 사용하는 경우 슬롯 및 후속 슬롯 교환에 대한 배포를 자동화할 수 있습니다. 자세한 내용은 Azure Web App 배포의 슬롯에 배포 섹션을 참조하세요.

  • 비즈니스 연속성 및 재해 복구 전략을 설계하고 구현합니다. 중요 업무용 애플리케이션의 경우 다중 지역 배포 아키텍처를 고려하세요. 자세한 내용은 고가용성 다중 지역 웹 애플리케이션을 참조 하세요.