이 문서에서는 GitHub Copilot 앱 현대화를 사용하여 Java 애플리케이션을 평가, 수정, 컨테이너화 및 Azure Container Apps에 배포하는 방법을 알아봅니다. GitHub Copilot 앱 현대화는 복잡한 업그레이드 및 마이그레이션 단계를 자동화하는 것과 같은 OpenRewrite 오픈 소스 도구와 GitHub Copilot를 결합하는 AI 기반 도우미입니다.
이 도구는 Maven 및 Gradle 프로젝트를 모두 지원하고, Java 버전 8, 11, 17 및 21 간의 업그레이드를 대상으로 하며, Spring Boot 애플리케이션 현대화에 중점을 둡니다. 일반적인 마이그레이션 시나리오에 미리 정의된 작업을 제공하고 Azure Container Apps에서 애플리케이션을 실행하기 위한 모범 사례를 통합합니다.
사전 요구 사항
- 활성 구독이 있는 Azure 계정. 체험 계정 만들기
- 모든 플랜에 따라 활성 GitHub Copilot 구독이 있는 GitHub 계정입니다.
- 다음 편집기 중 하나입니다.
-
Visual Studio Code 최신 버전입니다. 버전 1.106 이상이어야 합니다.
- Visual Studio Code에서 GitHub Copilot. 설치 지침은 Visual Studio Code에서 GitHub Copilot 설정을 참조하세요. Visual Studio Code 내에서 GitHub 계정에 로그인해야 합니다.
- GitHub Copilot 앱 현대화. 설치 후 Visual Studio Code를 다시 시작합니다.
-
IntelliJ IDEA의 최신 버전입니다. 버전 2023.3 이상이어야 합니다.
- GitHub 코필로트. 버전 1.5.59 이상이어야 합니다. 자세한 지침은 IntelliJ IDEA에서 GitHub Copilot 설정을 참조하세요. IntelliJ IDEA 내에서 GitHub 계정에 로그인해야 합니다.
- GitHub Copilot 앱 현대화. 설치 후 IntelliJ IDEA를 다시 시작합니다.
-
Visual Studio Code 최신 버전입니다. 버전 1.106 이상이어야 합니다.
- Java 21 이상.
- Java 프로젝트를 빌드하기 위한 Maven 또는 Gradle입니다.
- Docker 설치 및 실행(컨테이너화용)
- Azure CLI 가 설치 및 구성되었습니다.
메모
Gradle을 사용하는 경우 Gradle 래퍼 버전 5 이상만 지원됩니다. Kotlin DSL(도메인별 언어)은 지원되지 않습니다. 이 함수 My Tasks 는 IntelliJ IDEA에 대해 아직 지원되지 않습니다.
JDK 및 프레임워크 버전 업그레이드
Azure Container Apps로 마이그레이션하기 전에, Java 애플리케이션이 지원되는 최신 JDK 버전에서 실행되고 있는지 확인하세요. JDK 및 프레임워크를 업그레이드하면 먼저 후속 마이그레이션 단계가 최신 코드베이스를 대상으로 합니다.
JDK 버전을 업그레이드하는 방법에는 두 가지가 있습니다. 두 가지 방법 모두 Visual Studio Code의 사이드바에서 액세스할 수 있는 GitHub Copilot 앱 현대화 창을 사용합니다.
- 빠른 시작 섹션에서 런타임 및 프레임워크 업그레이드를 선택합니다.
- 또는 TASKS - 업그레이드 작업 섹션에서 업그레이드된 Java 런타임 작업을 실행합니다.
Spring Framework 또는 타사 종속성을 업그레이드하려면 TASKS - Upgrade Tasks 섹션에서 Java Framework 업그레이드 작업을 실행합니다.
Azure Container Apps에 대한 클라우드 준비 상태 평가
평가는 코드베이스에서 클라우드 준비 문제를 식별하고 해당 영향을 평가합니다. Azure Container Apps에 대한 특정 권장 사항을 제공합니다.
평가 구성
평가를 실행하기 전에 GitHub Copilot 앱 현대화 평가 창에서 평가 구성 을 선택하여 구성합니다.
Azure Container Apps의 경우 다음 구성을 사용합니다.
appcat:
- target:
- azure-container-apps
os:
- linux
mode: source-only
평가 실행
다음 단계를 사용하여 평가를 실행합니다.
사이드바에서 GitHub Copilot 앱 현대화 창을 선택한 다음, 평가 섹션에서 Azure로 마이그레이션 또는 평가 실행을 선택합니다.
에이전트 모드가 있는 GitHub Copilot 채팅 창이 열리고 현대화 평가자를 호출합니다. 계속을 선택하여 확인합니다.
현대화 평가자는 먼저 로컬 환경을 확인합니다. AppCAT 및 해당 종속성이 설치되지 않은 경우 에이전트를 통해 설치할 수 있습니다. 설치 후 에이전트는 AppCAT을 호출하여 프로젝트를 평가합니다. 이 단계를 완료하는 데 몇 분 정도 걸릴 수 있습니다.
평가가 완료되면 현대화 평가자는 평가 보고서에서 클라우드 준비 문제에 대한 분류된 보기를 생성합니다.
평가 보고서 해석
평가 보고서는 포괄적인 분석 결과를 제공합니다. 보고서는 다음과 같은 몇 가지 주요 섹션으로 구성됩니다.
- 애플리케이션 정보: Java 버전, 프레임워크, 빌드 도구, 프로젝트 구조 및 대상 Azure 서비스를 비롯한 기본 정보입니다.
- 문제 요약: 중요도 백분율을 사용하여 도메인별로 분류된 마이그레이션 문제에 대한 개요입니다.
- 4개의 탭으로 구성된 자세한 분석:
- 문제: 해결해야 하는 클라우드 준비 상태 및 Java 업그레이드 문제의 분류된 목록입니다.
- 종속성: 애플리케이션 내에서 찾은 모든 Java 패키지 종속성입니다.
- 기술: 분석된 애플리케이션에 있는 함수별로 그룹화된 기술입니다.
- 인사이트: 검색된 기술을 이해하는 데 도움이 되는 파일 세부 정보 및 정보입니다.
이 보고서는 다음과 같은 중요도 수준으로 문제를 분류합니다.
| 중요도 | 설명 |
|---|---|
| 필수 | Azure Container Apps로 마이그레이션하기 위해 해결해야 하는 문제입니다. |
| 잠재적 | 마이그레이션에 영향을 줄 수 있으며 검토가 필요한 문제입니다. |
| 선택 사항 | 영향이 낮은 문제입니다. 수정은 권장되지만 선택 사항입니다. |
보고된 각 문제를 확장하여 영향을 받은 파일 목록과 문제, 알려진 솔루션 및 지원 설명서를 포함한 자세한 설명을 볼 수 있습니다.
평가 보고서 관리
확장은 팀과 결과를 공유하거나 작업 영역을 체계적으로 유지할 수 있도록 평가 보고서 가져오기, 내보내기 및 삭제를 지원합니다.
- 가져오기: 평가 섹션에서 가져오기 를 선택하여 AppCAT CLI 결과, 내보낸 보고서 또는 앱 컨텍스트 파일에서 보고서를 가져옵니다.
- 내보내기: 평가 보고서를 마우스 오른쪽 단추로 클릭하고 내보내 기를 선택하여 다른 사용자와 보고서를 공유합니다.
- 삭제: 평가 보고서를 마우스 오른쪽 단추로 클릭하고 삭제 를 선택하여 보고서를 제거합니다.
마이그레이션 문제 해결
평가를 완료한 후 미리 정의된 작업 또는 사용자 지정 작업을 사용하여 식별된 문제를 수정합니다. GitHub Copilot 앱 현대화는 일반적인 마이그레이션 패턴을 처리하는 미리 정의된 작업과 조직의 특정 요구 사항에 맞게 정의한 사용자 지정 작업의 두 가지 방법을 제공합니다.
AppModernization 에이전트를 선택
AppModernization 에이전트는 Java 애플리케이션 마이그레이션 및 현대화 작업에 가장 적합한 환경을 제공합니다. 선택하려면 다음을 수행합니다.
- 활동 모음에서 채팅 아이콘을 선택하여 코필로트 채팅 창을 엽니다.
- 채팅 창에서 채팅 입력 상자 맨 위에 있는 에이전트 선택기 드롭다운 메뉴를 찾아 목록에서 AppModernization 을 선택합니다.
메모
Visual Studio Code에서 앱 현대화는 최상의 결과를 위해 기본적으로 선택된 권장 모델과 함께 사용자 지정 에이전트를 사용합니다 AppModernization . 에이전트 메뉴에서 사용자 지정 에이전트 구성 을 선택하여 모델을 변경할 수 있습니다.
AppModernization 에이전트를 선택한 상태에서 간단한 자연어 프롬프트를 사용하여 마이그레이션 작업을 수행합니다.
-
데이터베이스 마이그레이션:
migrate to Managed Identity for Azure SQL Database -
스토리지 마이그레이션:
migrate from AWS S3 to Azure Storage Blob -
메시징 마이그레이션:
migrate from RabbitMQ to Azure Service Bus -
비밀 관리:
migrate secrets to Azure Key Vault -
인증 마이그레이션:
migrate to Microsoft Entra ID authentication
미리 정의된 마이그레이션 작업 실행
GitHub Copilot 앱 현대화 기능은 Azure Container Apps 마이그레이션에 대해 다음과 같은 미리 정의된 작업을 지원합니다.
| 과업 | 설명 |
|---|---|
| Spring RabbitMQ에서 Azure Service Bus로 | RabbitMQ를 사용하여 Spring AMQP/JMS를 Azure Service Bus로 변환하여 메시징 패턴을 유지하고 보안 인증을 사용하도록 설정합니다. |
| 데이터베이스 마이그레이션을 위한 관리 ID | Azure SQL Server, Azure Database for MySQL, Azure Database for PostgreSQL, Cassandra API용 Azure Cosmos DB 및 MongoDB용 Azure Cosmos DB에 대한 관리 ID 인증을 위한 코드베이스를 준비합니다. |
| 자격 증명 마이그레이션을 위한 관리 ID | Azure Event Hubs 및 Azure Service Bus와 같은 메시징 서비스에 Azure 관리 ID 인증을 사용하도록 Java 애플리케이션을 변환하여 연결 문자열을 제거합니다. |
| AWS S3에서 Azure Storage Blob으로 | AWS S3와 상호 작용하는 코드를 Azure Storage Blob에서 작동하는 코드로 변환하여 동일한 의미 체계를 유지 관리합니다. |
| 로컬 파일에 로깅 | 파일 기반 로깅을 콘솔 기반 로깅으로 변환하여 Azure Monitor와 통합할 준비를 합니다. |
| Azure Storage 파일 공유 탑재에 대한 로컬 파일 I/O | 로컬 파일 읽기 및 쓰기를 통합 탑재 경로 액세스로 변환하여 Azure Container Apps에서 Azure Storage 파일 공유 탑재를 사용하도록 설정합니다. 자세한 내용은 |
| Azure Communication Service에 Java 메일 | SMTP를 통해 메일을 보내는 애플리케이션을 변환하여 Azure Container Apps 호스팅과 완벽하게 호환되는 Azure Communication Services를 사용합니다. |
| Azure Key Vault에 대한 비밀 및 인증서 관리 | 하드 코딩된 비밀 및 로컬 TLS/mTLS 인증서를 Azure Key Vault로 마이그레이션합니다. 자세한 내용은 Azure Container Apps의 비밀 관리를 참조 하세요. |
| Microsoft Entra ID에 대한 사용자 인증 | 인증을 위해 로컬 사용자 인증 메커니즘(예: LDAP 기반)을 Microsoft Entra ID로 전환합니다. 자세한 내용은 Azure Container Apps에서 인증 및 권한 부여를 참조하세요. |
| SQL 언어: Oracle에서 PostgreSQL로 | Azure Database for PostgreSQL에서 사용하기 위해 Oracle 관련 SQL 쿼리, 데이터 형식 및 독점 함수를 PostgreSQL로 변환합니다. |
| AWS Secret Manager에서 Azure Key Vault로 | 비밀 관리의 모든 측면을 AWS Secret Manager에서 Azure Key Vault로 변환합니다. |
| ActiveMQ에서 Azure Service Bus로 | ActiveMQ 메시지 생성자, 소비자, 연결 팩토리, 큐/토픽 상호작용을 Azure Service Bus 등가물로 변환합니다. |
| AWS SQS에서 Azure Service Bus로 | SQS 관련 코드 구문을 Azure Service Bus 대응으로 변환하여 메시징 의미 체계를 유지합니다. |
평가에서 미리 정의된 작업 적용
- 평가 보고서에서 검색된 문제에서 원하는 솔루션을 선택하고 작업 실행을 선택합니다.
- 에이전트 모드로 코필로트 채팅 창이 열립니다. 에이전트가
plan.md와progress.md를 생성하고, 계속하기 전에 계획을 검토할 수 있습니다. - 수동으로 입력
continue하여 마이그레이션 프로세스를 확인하고 시작합니다. - 코드를 수정하기 전에, 에이전트가 버전 관리 시스템의 상태를 점검한 뒤 새 브랜치를 체크아웃합니다.
- 반복적으로 계속을 선택하거나 입력하여 도구 사용을 확인하고 코드 변경 완료를 기다립니다.
유효성 검사 결과 검토
코드 변경이 완료되면 에이전트는 다음 검사를 포함하는 자동 유효성 검사 루프를 실행합니다.
- Validate-CVE: 현재 종속성에서 일반적인 취약성 및 노출을 검색하고 수정합니다.
- 빌드 프로젝트: 빌드 오류를 해결하려고 시도합니다.
- 일관성 유효성 검사: 기능 일관성에 대한 코드를 분석합니다.
- 실행 테스트: 단위 테스트를 실행하고 오류를 수정하는 계획을 자동으로 생성합니다.
- 완전성 유효성 검사: 초기 코드 마이그레이션에서 누락된 마이그레이션 항목을 Catch하고 수정합니다.
모든 검사가 완료되면 마이그레이션 요약을 생성하기 위해 continue를 입력합니다. 코드 변경 내용을 검토하고 유지를 선택하여 확인합니다.
사용자 지정 작업 만들기
미리 정의된 작업 외에도 조직의 특정 마이그레이션 패턴에 따라 사용자 지정 작업을 만들 수 있습니다. 사용자 지정 작업은 Git 커밋, 외부 링크 또는 텍스트 파일의 참조를 사용하여 마이그레이션 에이전트를 안내합니다.
Git 커밋에서 사용자 지정 작업 만들기
작업 사이드바에서 GitHub Copilot 앱 현대화 확장 창을 열고 작업 섹션을 마우스로 가리킨 다음 사용자 지정 작업 만들기를 선택합니다.
열린
task.md파일에서 작업 이름 및 작업 프롬프트를 입력합니다.참조 추가를 선택한 다음 팝업 대화 상자에서 Git 커밋을 선택합니다.
관련 커밋을 검색하여 선택한 다음 확인을 선택합니다.
저장을 선택합니다. 이제 사용자 지정 작업이 작업 - 내 작업 섹션에 표시됩니다.
외부 링크 및 텍스트 파일에서 사용자 지정 작업 만들기
task.md파일을 열고 작업 이름과 프롬프트를 입력합니다. 다음은 그 예입니다.-
작업 이름:
Expose health endpoint via Spring Boot Actuator -
작업 프롬프트:
You are a Spring Boot developer assistant, follow the Spring Boot Actuator documentation to add basic health endpoints for Azure Container Apps deployment.
-
작업 이름:
참조 추가를 선택하고 외부 링크를 선택한 다음 URL 참조를 붙여넣습니다. 참조 추가를 다시 선택하고 텍스트 파일을 선택한 다음 추가 지침이 포함된 파일을 추가합니다.
저장을 선택하여 작업을 만듭니다.
사용자 지정 작업 공유
작업 폴더를 공유하여 다른 팀 구성원과 사용자 지정 작업을 공유할 수 있습니다.
사용자 지정 작업을 공유하려면 .github/appmod/custom-tasks 아래의 폴더를 복사하여 원하는 받는 사람과 공유하십시오. 받는 사람이 작업 폴더를 디렉터리에 붙여넣 .github/appmod/custom-tasks 고 확장 창에서 작업 새로 고침 을 선택합니다.
사용자 지정 작업 실행
작업 파일의 맨 아래에서 실행을 선택하거나 작업 - 내 작업 섹션에서 작업을 찾은 다음 작업 실행을 선택합니다. Copilot 채팅 창이 에이전트 모드로 열리고 마이그레이션 워크플로가 자동으로 실행됩니다.
애플리케이션에서 Oracle 데이터베이스를 사용하는 경우 다음 섹션으로 계속 진행합니다. 그렇지 않으면 다음으로 애플리케이션 컨테이너화로 건너뛰세요.
Oracle에서 PostgreSQL로 마이그레이션
메모
이 섹션은 애플리케이션에서 Oracle 데이터베이스를 사용하는 경우에만 적용됩니다. 애플리케이션에서 Oracle을 사용하지 않는 경우 애플리케이션 컨테이너화로 건너뜁니다.
GitHub Copilot 앱의 현대화는 Oracle에서 Azure Database for PostgreSQL로의 시나리오에 대한 전용 마이그레이션 작업을 다음과 같이 제공합니다.
- AI 기반 데이터베이스 마이그레이션 도구: 자세한 내용은 Visual Studio Code용 PostgreSQL 확장 미리 보기란?을 참조하세요.
- 앱 코드의 스마트 SQL 변환: GitHub Copilot 앱 현대화의 기본 제공 SQL 변환 기능으로 통합된 작업 워크플로의 일부로 원활하게 통합됩니다.
Oracle에서 PostgreSQL로 마이그레이션 작업 사용
Azure Container Apps에 대한 클라우드 준비 평가에 설명된 대로 애플리케이션 평가를 실행합니다.
평가가 완료되면 보고서를 검토합니다. 애플리케이션에서 Oracle을 사용하는 경우, 보고서는 Database Migration (Oracle)와 관련된 Oracle 문제를 드러내며, 이 기본 솔루션은 Oracle DB를 PostgreSQL로 마이그레이션하는 것입니다.
필요에 따라
coding_notes.md가.github/postgre-migrations/*/results/application_guidance/폴더에 있는지 확인합니다. 있는 경우 앱 현대화는 고품질 SQL 변환을 위해 이러한 메모를 참조합니다. 그렇지 않은 경우 PostgreSQL Visual Studio Code 확장을 사용하여 데이터베이스 팀에 문의하여 생성합니다.실행 태스크를 선택하여 마이그레이션을 실행합니다.
애플리케이션 컨테이너화
코드 마이그레이션을 완료한 후 Java 애플리케이션을 컨테이너화하여 Azure Container Apps에 배포할 준비를 합니다.
Docker가 설치되고 실행 중인지 확인합니다.
Visual Studio Code에서 마이그레이션된 프로젝트를 엽니다.
작업 사이드바에서 GitHub Copilot 앱 현대화 확장 창을 엽니다.
작업 섹션에서 Java를 연 다음, 컨테이너화 태스크를 열고 애플리케이션 컨테이너화를 선택합니다.
메시지가 표시되면 [계속 ]을 선택하여 각 도구 작업을 확인합니다.
부조종사에서는 다음 단계를 수행합니다.
- Docker가 설치되어 실행 중인지 확인합니다.
- 애플리케이션 코드가 컨테이너에서 실행되도록 준비되어 있는지 확인합니다.
- 각 프로젝트에 대한 Dockerfile을 만듭니다.
- 각 프로젝트에 대한 Docker 이미지를 빌드합니다.
- 컨테이너화 결과의 요약을 만듭니다.
메모
최상의 결과를 위해 확장의 에이전트 설정에 표시된 최신 권장 모델을 사용합니다. 컨테이너화 오류를 수정하려면 Copilot가 몇 번의 반복을 수행해야 할 수 있습니다.
컨테이너화 도구에 대한 자세한 내용은 GitHub의 컨테이너화 지원 리포지토리를 참조하세요.
Azure Container Apps에 배포하기
애플리케이션을 컨테이너화한 후 Azure Container Apps에 배포합니다.
Visual Studio Code에서 마이그레이션된 프로젝트를 엽니다.
작업 사이드바에서 GitHub Copilot 앱 현대화 확장 창을 엽니다.
작업 섹션에서 Java를 연 다음, 배포 작업을 열고 다음 배포 옵션 중 하나를 선택합니다.
- 기존 Azure 인프라에 배포: Copilot는 기존 리소스 그룹을 요청하고 해당 리소스에 배포합니다.
- 인프라 프로비전 및 Azure에 배포: Copilot는 새 Azure 리소스를 만들고 프로젝트를 배포합니다.
메시지가 표시되면 계속 을 선택하여 각 도구 작업을 확인하고 구독 및 리소스 그룹과 같은 필수 정보를 제공합니다.
부조종사에서는 다음 단계를 수행합니다.
- 배포 목표, 프로젝트 정보, Azure 리소스 아키텍처, Azure 리소스 및 실행 단계를 사용하여 배포 계획 markdown 파일을 생성합니다.
- 계획의 실행 단계를 따릅니다.
- 배포 오류를 수정합니다.
- 배포 결과를 설명하는 요약 파일을 생성합니다.
메모
최상의 결과를 위해 확장의 에이전트 설정에 표시된 최신 권장 모델을 사용합니다. 배포 오류를 수정하려면 Copilot가 몇 번의 반복을 수행해야 할 수 있습니다.
마이그레이션 후 작업 모범 사례
Java 애플리케이션을 Azure Container Apps로 마이그레이션한 후 다음 모범 사례를 고려합니다.
- 상태 프로브 구성: Azure Container Apps가 애플리케이션의 상태를 모니터링할 수 있도록 상태 프로브 를 설정합니다.
- 로깅 설정: 중앙 집중식 로그 집계 및 분석을 위해 Azure Monitor 와 통합되도록 콘솔 기반 로깅을 구성합니다.
- 크기 조정 규칙 구성: HTTP 트래픽, CPU, 메모리 또는 사용자 지정 메트릭에 따라 크기 조정 규칙을 설정하여 다양한 워크로드를 처리합니다.
- 비밀 관리: Azure Container Apps 비밀 관리 또는 Azure Key Vault를 사용하여 중요한 구성 값을 안전하게 저장하고 액세스합니다.
- CI/CD 파이프라인 설정: 지속적인 통합 및 배달을 위해 GitHub Actions 또는 Azure Pipelines를 사용하여 배포 파이프라인을 자동화합니다.
- 블루-그린 배포 사용: 리비전과 트래픽 분할을 사용하여 무중단 배포를 구현합니다.
- 사용자 지정 도메인 구성: 프로덕션 트래픽 에 대한 사용자 지정 도메인 및 인증서를 설정합니다.
- 메트릭 및 경고로 모니터링: 메트릭 및 경고를 사용하여 애플리케이션 상태 및 성능을 사전에 모니터링 합니다 .
- 영역 중복 사용: 고가용성을 위해 가용성 영역 간에 영역 중복을 구성합니다.