Spring Cloud 애플리케이션을 Azure Container Apps 마이그레이션

이 가이드에서는 Azure Container Apps에서 실행되도록 기존 Spring Cloud 애플리케이션을 마이그레이션할 때 알아야 할 사항에 대해 설명합니다.

마이그레이션 전

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

이러한 마이그레이션 전 요구 사항 중에서 충족할 수 없는 요구 사항이 있는 경우 다음 마이그레이션 관련 가이드를 참조하세요.

  • 실행 가능한 JAR 애플리케이션을 Azure Kubernetes Service 컨테이너로 마이그레이션(지침 계획)
  • 실행 가능한 JAR 애플리케이션을 Azure Virtual Machines로 마이그레이션(지침 계획)

애플리케이션 구성 요소 검사

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

서비스가 로컬 파일 시스템에서 읽거나 로컬 파일 시스템에 쓰는 인스턴스를 식별합니다. 단기 또는 임시 파일 및 수명이 긴 파일을 기록해 둡니다.

Azure Container Apps 여러 유형의 스토리지를 제공합니다. 임시 스토리지를 사용하면 실행 중인 컨테이너 또는 복제본 내에서 임시 데이터를 읽고 쓸 수 있습니다. Azure Files를 사용하면 여러 컨테이너가 공유할 수 있는 영구 스토리지를 제공할 수 있습니다. 자세한 내용은 Azure Container Apps 참조하세요.

애플리케이션이 읽기 전용 정적 콘텐츠를 제공하는 경우 Azure Blob Storage로 이동하고 전역 배포를 위해 Azure CDN을 추가하는 것이 좋습니다. 자세한 내용은 Azure Storage의 정적 웹 사이트 호스팅빠른 시작: Azure 저장소 계정을 Azure CDN과 통합을 참조하세요.

애플리케이션이 동적으로 게시된 정적 콘텐츠 (만든 후 변경되지 않는 업로드 또는 생성된 콘텐츠)를 처리하는 경우 Azure Blob Storage와 Azure CDN을 통합할 수 있습니다. Azure Function을 사용하여 업로드를 관리하고 CDN 새로 고침을 트리거할 수도 있습니다. 샘플 구현은 Azure Functions를 사용하여 정적 콘텐츠 업로드 및 CDN 미리 로드를 참조하세요.

서비스에 OS 관련 코드가 포함되어 있는지 확인

애플리케이션에 호스트 OS에 대한 종속성이 있는 코드가 포함된 경우 리팩터링하여 해당 종속성을 제거합니다. 예를 들어, 파일 시스템 경로에서 /\의 사용을 File.Separator 또는 Paths.get로 바꿉니다.

지원되는 플랫폼으로 전환

Dockerfile을 수동으로 만들고 컨테이너화된 애플리케이션을 Azure Container Apps에 배포하는 경우 JRE/JDK 버전을 포함하여 배포를 완전히 제어할 수 있습니다.

아티팩트에서 배포하기 위해 Azure Container Apps는 특정 버전의 Java(8, 11, 17 및 21)와 특정 버전의 Spring Boot 및 Spring Cloud 구성 요소를 제공합니다. 호환성을 보장하려면 먼저 애플리케이션을 현재 환경에서 지원되는 Java 버전으로 마이그레이션한 다음 나머지 마이그레이션 단계를 진행합니다. Linux 배포판의 안정적인 최신 릴리스를 사용하여 결과 구성을 완전히 테스트합니다.

메모

이 유효성 검사는 현재 서버가 Oracle JDK 또는 IBM OpenJ9와 같이 지원되지 않는 JDK에서 실행되는 경우에 특히 중요합니다.

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

java -version

지원되는 버전의 Java, Spring Boot 및 Spring Cloud는 Azure Container Apps의 Java 개요를 참조하세요.

Spring Boot 버전 식별

마이그레이션하는 각 애플리케이션의 종속성을 검사하여 Spring Boot 버전을 확인합니다.

Maven 프로젝트에서 POM 파일의 요소에서 <parent> Spring Boot 버전을 찾습니다.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.3.3</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

Gradle 프로젝트의 섹션에서 Spring Boot 버전을 찾습니다plugins.

plugins {
  id 'org.springframework.boot' version '3.3.3'
  id 'io.spring.dependency-management' version '1.1.6'
  id 'java'
}

3.x 이전의 Spring Boot 버전을 사용하는 애플리케이션의 경우 Spring Boot 3.0 마이그레이션 가이드 에 따라 지원되는 버전으로 업데이트합니다. 지원되는 버전은 Spring Boot 및 Spring Cloud 버전을 참조하세요.

Spring Cloud 버전 식별

마이그레이션하는 각 애플리케이션의 종속성을 검사하여 사용하는 Spring Cloud 구성 요소의 버전을 확인합니다.

메이븐

Maven 프로젝트에서 속성에서 Spring Cloud 버전을 spring-cloud.version 설정합니다.

  <properties>
    <spring-cloud.version>2023.0.2</spring-cloud.version>
  </properties>
Gradle

Gradle 프로젝트에서 "추가 속성" 블록에서 Spring Cloud 버전을 설정합니다.

ext {
  set('springCloudVersion', "2023.0.2")
}

지원되는 버전의 Spring Cloud를 사용하도록 모든 애플리케이션을 업데이트해야 합니다. 지원되는 버전은 Spring Cloud 설명서를 참조하세요.

로그 집계 솔루션 식별

마이그레이션하는 애플리케이션에서 사용하는 로그 집계 솔루션을 식별합니다. 기록된 이벤트를 사용할 수 있도록 마이그레이션에서 진단 설정을 구성해야 합니다. 자세한 내용은 콘솔 로깅 보장 및 진단 설정 구성 섹션을 참조하세요.

APM(애플리케이션 성능 관리) 에이전트 식별

애플리케이션에서 사용하는 애플리케이션 성능 관리 에이전트를 식별합니다. Azure Container Apps는 APM 통합에 대한 기본 제공 지원을 제공하지 않습니다. 컨테이너 이미지를 준비하거나 APM 도구를 코드에 직접 통합해야 합니다. 애플리케이션의 성능을 측정하지만 아직 APM을 통합하지 않은 경우 Azure 애플리케이션 Insights를 사용하는 것이 좋습니다. 자세한 내용은 마이그레이션 섹션을 참조하세요.

인벤토리 외부 리소스

데이터 원본, JMS 메시지 브로커 및 다른 서비스의 URL과 같은 외부 리소스를 식별합니다. Spring Cloud 애플리케이션에서는 일반적으로 다음 위치 중 하나에서 이러한 리소스에 대한 구성을 찾습니다.

  • src/main/resources 폴더에 있는 파일 중 보통 application.properties 또는 application.yml로 불리는 파일에서.
  • 이전 단계에서 식별한 Spring Cloud Config Server 리포지토리에서

데이터베이스

Spring Boot 애플리케이션의 경우 연결 문자열 일반적으로 외부 데이터베이스에 종속된 경우 구성 파일에 표시됩니다. application.properties 파일의 예제는 다음과 같습니다.

spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

application.yaml 파일의 예제는 다음과 같습니다.

spring:
  data:
    mongodb:
      uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017

가능한 구성 시나리오는 다음 Spring Data 설명서를 참조하세요.

JMS 메시지 브로커

관련 종속성에 대한 빌드 매니페스트(일반적으로 pom.xml 또는 build.gradle 파일)를 확인하여 사용 중인 브로커를 식별합니다.

예를 들어 ActiveMQ를 사용하는 Spring Boot 애플리케이션은 일반적으로 pom.xml 파일에 이 종속성을 포함합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

상업용 브로커를 사용하는 Spring Boot 애플리케이션은 일반적으로 broker의 JMS 드라이버 라이브러리에 직접 종속성을 포함합니다. build.gradle 파일의 예제는 다음과 같습니다.

    dependencies {
      ...
      compile("com.ibm.mq:com.ibm.mq.allclient:9.4.0.5")
      ...
    }

사용 중인 broker를 식별한 후 해당 설정을 찾습니다. 일반적으로 애플리케이션 디렉터리의 application.propertiesapplication.yml 파일에서 찾을 수 있습니다.

메모

사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 데이터베이스, 캐시, 메시징 또는 AI 서비스와 같이 이 절차에서 설명하는 인증 흐름은 애플리케이션에 대한 높은 수준의 신뢰가 필요하며 다른 흐름에 존재하지 않는 위험을 수반합니다. 암호 없는 연결 또는 키 없는 연결에 대한 관리 ID와 같은 보다 안전한 옵션이 실행 가능하지 않은 경우에만 이 흐름을 사용합니다. 로컬 컴퓨터 작업의 경우 암호 없는 연결이나 키 없는 연결에 사용자 ID를 사용하는 것이 좋습니다.

application.properties 파일의 ActiveMQ 예제는 다음과 같습니다.

spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=<password>

ActiveMQ 구성에 대한 자세한 내용은 Spring Boot 메시징 설명서를 참조하세요.

application.yaml 파일의 IBM MQ 예제는 다음과 같습니다.

ibm:
  mq:
    queueManager: qm1
    channel: dev.ORDERS
    connName: localhost(14)
    user: admin
    password: <password>

IBM MQ 구성에 대한 자세한 내용은 IBM MQ Spring 구성 요소 설명서를 참조하세요.

외부 캐시 확인

사용 중인 외부 캐시를 확인합니다. Spring Data Redis를 통해 Redis를 사용하는 경우가 많습니다. 구성 정보는 Spring Data Redis 설명서를 참조하세요.

각 구성(Java 또는 XML)을 검색하여 Spring Session을 통해 세션 데이터를 캐시할지 여부를 결정합니다.

ID 공급자

인증 및 권한 부여가 필요한 모든 ID 공급자 및 모든 Spring Cloud 애플리케이션을 식별합니다. ID 공급자를 구성하는 방법에 대한 자세한 내용은 다음 리소스를 참조하세요.

VMware TAS(Tanzu Application Service) (이전의 Pivotal Cloud Foundry)를 통해 구성된 리소스입니다.

TAS로 관리되는 애플리케이션의 경우 TAS 서비스 바인딩을 통해 앞에서 설명한 리소스를 포함하여 외부 리소스를 구성하는 경우가 많습니다. 이러한 리소스에 대한 구성을 검사하려면 TAS(Cloud Foundry) CLI 를 사용하여 애플리케이션에 대한 변수를 VCAP_SERVICES 확인합니다.

# Log into TAS, if needed (enter credentials when prompted)
cf login -a <API endpoint>

# Set the organization and space containing the application, if not already selected during login.
cf target org <organization name>
cf target space <space name>

# Display variables for the application
cf env <Application Name>

애플리케이션에 VCAP_SERVICES 바인딩된 외부 서비스의 구성 설정에 대한 변수를 검사합니다. 자세한 내용은 TAS(Cloud Foundry) 설명서를 참조하세요.

기타 모든 외부 리소스

이 가이드에서 가능한 모든 외부 종속성을 문서화하는 것은 불가능합니다. 마이그레이션 후에는 애플리케이션의 모든 외부 종속성을 충족할 수 있는지 확인해야 합니다.

인벤토리 구성 원본 및 비밀

인벤토리 암호 및 보안 문자열

프로덕션 배포의 모든 속성, 구성 파일 및 환경 변수에서 비밀 문자열 및 암호를 확인합니다. Spring Cloud 애플리케이션에서는 일반적으로 개별 서비스 또는 Spring Cloud Config Server 리포지토리의 application.properties 또는 application.yml 파일에서 이러한 문자열을 찾습니다.

인벤토리 인증서

공용 SSL 엔드포인트 또는 백 엔드 데이터베이스 및 기타 시스템과의 통신에 사용되는 모든 인증서를 문서화합니다. 다음 명령을 실행하여 프로덕션 서버의 모든 인증서를 볼 수 있습니다.

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

Spring Cloud Vault 사용 여부 확인

Spring Cloud Vault를 사용하여 비밀을 저장하고 액세스하는 경우 백업 비밀 저장소(예: HashiCorp Vault 또는 CredHub)를 식별합니다. 그런 다음 애플리케이션 코드에서 사용하는 모든 비밀을 식별합니다.

구성 서버 원본 찾기

애플리케이션에서 Spring Cloud Config Server를 사용하는 경우 구성이 저장되는 위치를 식별합니다. 일반적으로 이 설정은 bootstrap.yml 또는 bootstrap.properties 파일 또는 application.yml 또는 application.properties 파일에서 찾을 수 있습니다. 이 설정은 다음 예제와 같습니다.

spring.cloud.config.server.git.uri: file://${user.home}/spring-cloud-config-repo

git은 가장 일반적으로 Spring Cloud Config Server의 지원 데이터 저장소로 사용되지만, 앞에서 설명한 것처럼 애플리케이션은 다른 가능한 백 엔드 중 하나를 사용할 수 있습니다. JDBC(관계형 데이터베이스), SVN로컬 파일 시스템과 같은 다른 백 엔드에 대한 정보는 Spring Cloud Config Server 설명서를 참조하세요.

배포 아키텍처 검사

각 서비스에 대한 하드웨어 요구 사항 문서화

각 Spring Cloud 서비스(구성 서버, 레지스트리 또는 게이트웨이 제외)에 대해 다음 정보를 문서화합니다.

  • 실행되는 인스턴스 수
  • 각 인스턴스에 할당되는 CPU 수
  • 각 인스턴스에 할당되는 RAM 양

문서 지역 복제 및 배포

Spring Cloud 애플리케이션이 현재 여러 지역 또는 데이터 센터에 분산되어 있는지 확인합니다. 마이그레이션하는 애플리케이션의 작동 시간 요구 사항 및 SLA를 문서화합니다.

서비스 레지스트리를 우회하는 클라이언트 식별

Spring Cloud Service Registry를 사용하지 않고 마이그레이션할 서비스를 호출하는 클라이언트 애플리케이션을 확인합니다. 마이그레이션 후에는 이러한 호출이 더 이상 불가능합니다. 마이그레이션 전에 Spring Cloud OpenFeign 을 사용하도록 이러한 클라이언트를 업데이트합니다.

Migration

제한된 구성 제거

Azure Container Apps 환경은 관리되는 Eureka Server, Spring Cloud Config Server 및 Admin을 제공합니다. Java 구성 요소에 애플리케이션을 바인딩하는 경우 Azure Container Apps는 관련 속성을 시스템 환경 변수로 삽입합니다. Spring Boot 외부화된 구성 디자인에 따라 시스템 환경 변수는 코드에 정의되거나 아티팩트로 패키지된 애플리케이션 속성을 덮어씁니다.

명령줄 인수, Java 시스템 속성 또는 컨테이너의 환경 변수를 통해 다음 속성 중 하나를 설정하는 경우 충돌 및 예기치 않은 동작을 방지하기 위해 제거합니다.

  • SPRING_CLOUD_CONFIG_COMPONENT_URI
  • SPRING_CLOUD_CONFIG_URI
  • SPRING_CONFIG_IMPORT
  • eureka.client.fetch-registry
  • eureka.client.service-url.defaultZone
  • eureka.instance.prefer-ip-address
  • eureka.client.register-with-eureka
  • SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP
  • SPRING_BOOT_ADMIN_CLIENT_URL

Azure Container Apps 관리되는 환경 및 앱 만들기

기존 관리되는 환경에서 Azure 구독에 Azure Container Apps 앱을 프로비전하거나 마이그레이션하는 모든 서비스에 대해 새 앱을 만듭니다. Spring Cloud 레지스트리 및 구성 서버로 실행되는 앱을 만들 필요가 없습니다. 자세한 내용은 Quickstart: Azure Portal 사용하여 첫 번째 컨테이너 앱 배포를 참조하세요.

Spring Cloud 구성 서버 준비

Azure Container Apps에서 Spring 구성 요소에 대한 Config 서버를 구성합니다. 자세한 내용은 Azure Container Apps Spring용 Config Server 구성 요소에 대한 설정 구성을 참조하세요.

메모

현재 Spring Cloud 구성 리포지토리가 로컬 파일 시스템 또는 온-프레미스에 있는 경우 먼저 GitHub, Azure Repos 또는 BitBucket과 같은 클라우드 기반 리포지토리로 구성 파일을 마이그레이션하거나 복제해야 합니다.

콘솔 로깅 확인 및 진단 설정 구성

모든 출력이 파일이 아닌 콘솔로 이동하도록 로깅을 구성합니다.

Azure Container Apps에 애플리케이션을 배포한 후에는 Container Apps 환경 내에서 로깅 옵션을 구성하여 로그에 대한 하나 이상의 대상을 정의할 수 있습니다. 이러한 대상에는 Azure Monitor Log Analytics, Azure Event Hubs 또는 기타 타사 모니터링 솔루션이 포함될 수 있습니다. 로그 데이터를 사용하지 않도록 설정하고 런타임에만 로그를 볼 수도 있습니다. 자세한 구성 지침은 Azure Container Apps의 Log Storage 및 모니터링 옵션을 참조하세요.

영구 스토리지 구성

애플리케이션의 일부가 로컬 파일 시스템에 읽거나 쓰는 경우 로컬 파일 시스템을 대체하도록 영구 스토리지를 구성해야 합니다. 앱 설정을 통해 컨테이너에 탑재할 경로를 지정하고 앱에서 사용 중인 경로에 맞출 수 있습니다. 자세한 내용은 Azure Container Apps 참조하세요.

Spring Cloud Vault 비밀을 Azure Key Vault로 마이그레이션

Azure Key Vault Spring Boot Starter를 사용하여 Spring을 통해 애플리케이션에 직접 비밀을 삽입할 수 있습니다. 자세한 내용은 Azure Key Vault 참조하세요.

메모

마이그레이션을 수행하려면 일부 비밀의 이름을 바꿔야 할 수 있습니다. 이에 따라 애플리케이션 코드를 적절히 업데이트하세요.

모든 인증서를 Key Vault로 마이그레이션

Azure Container Apps는 앱 간의 보안 통신을 지원합니다. 애플리케이션은 보안 통신을 설정하는 프로세스를 관리할 필요가 없습니다. 프라이빗 인증서를 업로드하여 Azure Container Apps 또는 Azure Container Apps 제공하는 무료 관리형 인증서를 사용할 수 있습니다. Azure Key Vault 사용하여 인증서를 관리하는 것이 좋습니다. 자세한 내용은 certificates in Azure Container Apps 참조하세요.

APM(애플리케이션 성능 관리) 통합 구성

컨테이너 내에서 APM 관련 변수를 이미 구성한 경우 대상 APM 플랫폼에 연결할 수 있는지 확인합니다. APM 구성이 컨테이너의 환경 변수를 참조하는 경우 Azure Container Apps에 따라 런타임 환경 변수를 설정합니다. 연결 문자열과 같은 중요한 정보를 안전하게 처리합니다. 비밀로 지정하거나 Azure Key Vault 저장된 비밀을 참조할 수 있습니다.

서비스별 비밀 및 외부화된 설정 구성

환경 변수로 각 컨테이너에 구성 설정을 삽입할 수 있습니다. 변수를 변경하면 기존 앱에 대한 새 수정 버전이 생성됩니다. 비밀은 키-값 쌍이며 모든 수정 버전에서 유효한 상태를 유지합니다.

ID 공급자를 마이그레이션하고 사용 설정하기

Spring Cloud 애플리케이션에 인증 또는 권한 부여가 필요한 경우 다음 지침을 사용하여 ID 공급자에 액세스하도록 구성되었는지 확인합니다.

  • ID 공급자가 Microsoft Entra ID인 경우 변경하지 마세요.
  • ID 공급자가 온-프레미스 Active Directory 포리스트인 경우 Microsoft Entra ID 사용하여 하이브리드 ID 솔루션을 구현하는 것이 좋습니다. 지침은 하이브리드 ID 설명서를 참조하세요.
  • ID 공급자가 PingFederate와 같은 다른 온-프레미스 솔루션인 경우 Microsoft Entra Connect의Custom 설치 항목을 참조하여 Microsoft Entra ID 페더레이션을 구성합니다. 또는 Spring Security를 사용하여 OAuth2/OpenID Connect 또는 SAML을 통해 ID 공급자를 사용하는 것이 좋습니다.

클라이언트 애플리케이션 업데이트

마이그레이션된 애플리케이션에 게시된 Azure Container Apps 엔드포인트를 사용하도록 모든 클라이언트 애플리케이션의 구성을 업데이트합니다.

마이그레이션 후

마이그레이션을 완료한 후 애플리케이션이 예상대로 작동하는지 확인합니다. 다음 섹션에서는 애플리케이션을 보다 클라우드 네이티브로 만들고 운영적으로 견고하게 만들기 위한 권장 사항을 설명합니다.

클라우드 네이티브 패턴 최적화

다음 권장 사항은 애플리케이션을 클라우드 네이티브로 만들기 위해 Spring Cloud 구성 요소 및 Azure Container Apps 관리 Java 구성 요소를 채택하는 데 도움이 됩니다.

서비스 검색 및 부하 분산

배포된 다른 Spring 애플리케이션 및 클라이언트가 동적으로 검색할 수 있도록 애플리케이션이 Spring Cloud Registry 구성 요소와 함께 작동하도록 설정합니다. 자세한 내용은 Azure Container Apps의 Spring 구성 요소를 위한 Eureka Server 설정 구성을 참조하세요.

그런 다음 Spring 클라이언트 Load Balancer 사용하도록 애플리케이션 클라이언트를 수정합니다. Spring Client Load Balancer를 사용하는 경우 클라이언트는 애플리케이션의 실행 중인 모든 인스턴스에 대한 주소를 가져오고 다른 인스턴스가 손상되거나 응답하지 않는 경우 작동하는 주소를 찾습니다. 자세한 내용은 Spring 블로그에서 Spring 팁: Spring Cloud Load Balancer 참조하세요.

API 게이트웨이

Spring Cloud Gateway 인스턴스를 추가하는 것이 좋습니다. Spring Cloud Gateway는 Azure Container Apps 환경에 배포된 모든 애플리케이션에 대해 단일 엔드포인트를 제공합니다. Spring Cloud Gateway를 이미 배포한 경우 트래픽을 새로 배포된 애플리케이션으로 라우팅하도록 라우팅 규칙을 구성했는지 확인합니다.

중앙 집중식 구성

Spring Cloud 구성 서버를 추가하여 모든 Spring Cloud 애플리케이션에 대한 구성을 중앙에서 관리하고 버전 제어하는 것이 좋습니다. 먼저 구성을 보관하고 사용하도록 앱 인스턴스를 구성하는 Git 리포지토리를 만듭니다. 자세한 내용은 Azure Container Apps Spring용 Config Server 구성 요소에 대한 설정 구성을 참조하세요.

다음 단계를 사용하여 구성을 마이그레이션합니다.

  1. 애플리케이션의 src/main/resources 디렉터리 내에서 다음 내용이 포함된 bootstrap.yml 파일을 만듭니다.

    spring:
      application:
        name: <your-application-name>
    
  2. 구성 Git 리포지토리에서 <애플리케이션 이름>.yml 파일을 만드세요. 여기서 your-application-name는 이전 단계와 동일합니다. src/main/resourcesapplication.yml 파일에서 만든 새 파일로 설정을 이동합니다. 설정이 이전에 .properties 파일에 있는 경우 먼저 YAML로 변환합니다. 이 변환을 수행하기 위해 온라인 도구 또는 IntelliJ 플러그 인을 찾을 수 있습니다.

  3. 만든 디렉터리에 application.yml 파일을 만듭니다. 이 파일을 사용하여 데이터 원본, 로깅 설정 및 Spring Boot Actuator 구성과 같은 Azure Container Apps 환경의 모든 애플리케이션 간에 공유되는 설정 및 리소스를 정의합니다.

  4. 변경 내용을 Git 리포지토리에 커밋하고 푸시합니다.

  5. 애플리케이션에서 application.properties 또는 application.yml 파일을 제거합니다.

Administration

Spring 관리 구성 요소 관리자를 추가하여 actuator 엔드포인트를 노출하는 Spring Boot 웹 애플리케이션에 대한 관리 인터페이스를 사용하도록 설정하는 것이 좋습니다. 자세한 내용은 Azure Container Apps에서 Spring Boot Admin 구성 요소를 구성을 참조하세요.

운영 준비 개선

다음 권장 사항은 마이그레이션된 애플리케이션에 대한 안정성, 관찰 가능성 및 배포 사례를 강화하는 데 도움이 됩니다.

  • CI/CD 파이프라인: 일관된 자동 배포를 위한 배포 파이프라인을 추가합니다. 지침은 Azure PipelinesGitHub Actions에 사용할 수 있습니다.
  • 청록색 배포: 컨테이너 앱 수정 버전, 수정 레이블 및 수신 트래픽 가중치를 사용하여 최종 사용자가 사용할 수 있도록 하기 전에 프로덕션의 코드 변경 내용을 테스트합니다. 자세한 내용은 Azure Container Apps의 블루-그린 배포를 참조하세요.
  • 서비스 바인딩: 지원되는 Azure 데이터베이스에 애플리케이션을 연결하는 서비스 바인딩을 추가합니다. 서비스 바인딩은 자격 증명을 비롯한 연결 정보를 Spring Boot 애플리케이션에 제공할 필요가 없습니다.
  • JVM 메트릭: Java 개발 스택이 JVM 핵심 메트릭을 수집하도록 설정합니다. 자세한 내용은 Azure Container AppsJava 메트릭을 참조하세요>.
  • 경고: Azure Monitor 경고 규칙 및 작업 그룹을 추가하여 비정상적인 조건을 신속하게 검색하고 해결합니다. 자세한 내용은 Azure Container Apps 참조하세요.
  • 영역 중복성: 영역 중복을 활성화하여 가용 영역 전반에 걸쳐 앱을 복제합니다. 영역 중단이 발생하면 트래픽이 부하 분산되고 복제본으로 자동으로 라우팅됩니다. 자세한 내용은 Azure Container Apps의 안정성을 참조하세요.
  • 웹 애플리케이션 방화벽: Application Gateway에서 웹 애플리케이션 방화벽을 사용하여 일반적인 악용 및 취약성으로부터 컨테이너 앱을 보호합니다. 자세한 내용은 Application Gateway에서 Web Application Firewall 사용하여 Azure Container Apps 보호 참조하세요.

레거시 Spring Cloud Netflix 구성 요소 바꾸기

애플리케이션에서 레거시 Spring Cloud Netflix 구성 요소를 사용하는 경우 다음 표와 같이 현재 대안으로 바꾸는 것이 좋습니다.

레거시 구성 요소 현재 대안
Spring Cloud Eureka Spring Cloud Service Registry
Spring Cloud Netflix Zuul (스프링 클라우드 넷플릭스 주울)은 API 게이트웨이와 라우팅 서버 역할을 하는 오픈 소스 프로젝트입니다. 스프링 클라우드 게이트웨이
Spring Cloud Netflix Archaius Spring Cloud 구성 서버
Spring Cloud Netflix 리본 Spring Cloud Load Balancer(클라이언트 측 로드 밸런서)
Spring Cloud Hystrix (스프링 클라우드 하이스트릭스) Spring Cloud 회로 차단기 + Resilience4J
Spring Cloud Netflix 터빈 Micrometer + Prometheus