빠른 시작: Azure Spring Apps에 첫 번째 Java 네이티브 이미지 애플리케이션 배포
참고 항목
기본, 표준 및 엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.
표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.
이 문서는 기본/표준 ✅ 엔터프라이즈에 ❎ 적용됩니다.
이 빠른 시작에서는 Spring Boot 애플리케이션을 Azure Spring Apps에 네이티브 이미지로 배포하는 방법을 보여 줍니다.
네이티브 이미지 기능을 사용하면 Java 애플리케이션을 독립 실행형 실행 파일(네이티브 이미지라고도 함)로 컴파일할 수 있습니다. 이러한 실행 파일은 기존 JVM(Java Virtual Machine)에 비해 더 빠른 시작 시간 및 더 낮은 런타임 메모리 오버헤드를 포함하여 상당한 이점을 제공할 수 있습니다.
샘플 프로젝트는 Spring Petclinic 애플리케이션입니다. 다음은 이 애플리케이션을 보여 주는 스크린샷입니다.
1. 사전 요구 사항
- Azure 구독 구독이 없는 경우 시작하기 전에 체험 계정을 만드세요.
- Git
- Java Development Kit (JDK), 버전 17.
- Azure CLI: 버전 2.45.0 이상 다음 명령을 사용하여 Azure Spring Apps 확장을 설치합니다.
az extension add --name spring
- 대상 구독에서 처음으로 Azure Spring Apps 엔터프라이즈 플랜 인스턴스를 배포하는 경우 Azure Marketplace에서 Azure Spring Apps 엔터프라이즈 계층 제품 보기의 요구 사항 섹션을 참조하세요.
2. Spring Petclinic 프로젝트 준비
다음 단계를 따라 앱을 로컬로 복제하고 실행합니다.
다음 명령을 사용하여 GitHub에서 Spring Petclinic 프로젝트를 복제합니다.
git clone https://github.com/Azure-Samples/spring-petclinic.git
다음 명령을 사용하여 Spring Petclinic 프로젝트를 빌드합니다.
cd spring-petclinic ./mvnw clean package -DskipTests -Pnative package
다음 명령을 사용하여 Maven으로 Spring Petclinic 애플리케이션을 실행합니다.
java -jar target/spring-petclinic-3.1.0-SNAPSHOT.jar
사용하는 브라우저에서
http://localhost:8080
으로 이동하여 Spring Petclinic 애플리케이션에 액세스합니다.
3. 클라우드 환경 준비
Spring Petclinic 애플리케이션을 실행하는 데 필요한 주요 리소스는 Azure Spring Apps 인스턴스입니다. 이 섹션에서는 리소스를 만드는 단계를 제공합니다.
3.1. 각 리소스에 대한 이름 제공
다음 명령을 사용하여 리소스 이름을 저장할 변수를 만듭니다. 자리 표시자를 사용자의 값으로 바꿔야 합니다.
export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>
export AZURE_SPRING_APPS_NAME=<Azure-Spring-Apps-service-instance-name>
export NATIVE_BUILDER=native-builder
export JAR_APP_NAME=jar-app
export NATIVE_APP_NAME=native-app
export JAR_PATH=target/spring-petclinic-3.1.0-SNAPSHOT.jar
3.2. 새 리소스 그룹 만들기
다음 단계를 따라 새 리소스 그룹을 만듭니다.
다음 명령을 실행하여 Azure CLI에 로그인합니다.
az login
다음 명령을 실행하여 기본 위치를 설정합니다.
az configure --defaults location=${LOCATION}
다음 명령을 사용하여 사용할 구독 ID를 결정하는 데 사용할 수 있는 모든 구독을 나열합니다.
az account list --output table
다음 명령을 사용하여 기본 구독을 설정합니다.
az account set --subscription <subscription-ID>
다음 명령을 사용하여 리소스 그룹을 만듭니다.
az group create --resource-group ${RESOURCE_GROUP}
다음 명령을 사용하여 새로 만든 리소스 그룹을 기본 리소스 그룹으로 설정합니다.
az configure --defaults group=${RESOURCE_GROUP}
3.3. Azure Spring Apps 인스턴스 만들기
Azure Spring Apps는 Spring Petclinic 앱을 호스트하는 데 사용됩니다. 다음 단계를 사용하여 Azure Spring Apps 인스턴스와 그 안에 2개의 애플리케이션을 만듭니다.
다음 명령을 사용하여 Azure Spring Apps 서비스 인스턴스를 만듭니다. 네이티브 이미지 빌드에는 이미지 빌드 중에 16Gi의 메모리가 필요하므로 빌드 풀 크기를 S7로 구성합니다.
az spring create \ --name ${AZURE_SPRING_APPS_NAME} \ --sku enterprise \ --build-pool-size S7
현재 디렉터리에 builder-native.json 파일을 만들고 다음 콘텐츠를 추가합니다.
{ "stack": { "id": "io.buildpacks.stacks.jammy", "version": "tiny" }, "buildpackGroups": [ { "name": "default", "buildpacks": [ { "id": "tanzu-buildpacks/java-native-image" } ] } ] }
다음 명령을 사용하여 네이티브 이미지 애플리케이션을 빌드하는 사용자 지정 작성기를 만듭니다.
az spring build-service builder create \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_BUILDER} \ --builder-file builder-native.json
다음 명령을 사용하여 Spring Petclinic 애플리케이션을 JAR 파일로 배포할 Azure Spring Apps 인스턴스에서 애플리케이션을 만듭니다. 메모리 한도를 1Gi로 구성합니다.
az spring app create \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${JAR_APP_NAME} \ --cpu 1 \ --memory 1Gi \ --assign-endpoint true
다음 명령을 사용하여 Spring Petclinic 애플리케이션을 네이티브 이미지로 배포할 Azure Spring Apps 인스턴스에서 애플리케이션을 만듭니다.
az spring app create \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_APP_NAME} \ --cpu 1 \ --memory 1Gi \ --assign-endpoint true
4. Azure Spring Apps에 앱 배포
이제 클라우드 환경이 준비되었으므로 애플리케이션을 배포할 준비가 되었습니다.
다음 명령을 사용하여 Spring Petclinic 애플리케이션을 JAR 파일로 배포합니다.
az spring app deploy \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${JAR_APP_NAME} \
--artifact-path ${JAR_PATH} \
--build-env BP_JVM_VERSION=17
다음 명령을 사용하여 Spring Petclinic 애플리케이션을 네이티브 이미지로 배포합니다.
az spring app deploy \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${NATIVE_APP_NAME} \
--builder ${NATIVE_BUILDER} \
--build-cpu 8 \
--build-memory 16Gi \
--artifact-path ${JAR_PATH} \
--build-env BP_JVM_VERSION=17 BP_NATIVE_IMAGE=true
5. 네이티브 이미지 앱 유효성 검사
이제 배포된 네이티브 이미지 앱에 액세스하여 작동하는지 확인할 수 있습니다. 다음 단계를 따라 유효성을 검사합니다.
배포가 완료되면 다음 명령을 실행하여 앱 URL을 가져올 수 있습니다.
az spring app show \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_APP_NAME} \ --output table
출력에
Public Url
로 표시된 URL을 사용하여 앱에 액세스할 수 있습니다. localhost에서 본 대로 페이지가 표시됩니다.다음 명령을 사용하여 앱의 로그를 확인하여 배포 문제를 조사합니다.
az spring app logs \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_APP_NAME}
6. JAR 및 네이티브 이미지의 성능 비교
다음 섹션에서는 JAR 배포와 네이티브 이미지 배포의 성능을 비교하는 방법을 설명합니다.
서버 시작 시간
다음 명령을 통해 앱의 로그(Started PetClinicApplication in XXX seconds
)를 확인하여 JAR 앱의 서버 시작 시간을 가져옵니다.
az spring app logs \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${JAR_APP_NAME}
서버 시작 시간은 JAR 앱의 경우 약 25초입니다.
다음 명령을 통해 앱의 로그를 확인하여 네이티브 이미지 앱의 서버 시작 시간을 가져옵니다.
az spring app logs \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${NATIVE_APP_NAME}
네이티브 이미지 앱의 경우 서버 시작 시간이 0.5초 미만입니다.
메모리 사용량
다음 명령을 사용하여 네이티브 이미지 앱의 메모리 크기를 512Mi로 줄입니다.
az spring app scale \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${NATIVE_APP_NAME} \
--memory 512Mi
명령 출력에 네이티브 이미지 앱이 성공적으로 시작했음이 표시되어야 합니다.
다음 명령을 사용하여 JAR 앱의 메모리 크기를 512Mi로 줄입니다.
az spring app scale \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${JAR_APP_NAME} \
--memory 512Mi
명령 출력에 메모리 부족으로 인해 JAR 앱을 시작하지 못했음이 표시되어야 합니다. 출력 메시지는 Terminating due to java.lang.OutOfMemoryError: Java heap space
와 유사해야 합니다.
다음 그림에서는 Petclinic 애플리케이션에 지속적으로 초당 400개 요청의 워크로드에 대한 네이티브 이미지 배포에 최적화된 메모리 사용량을 보여줍니다. 메모리 사용량은 해당 JAR 배포에서 사용하는 메모리의 약 1/5입니다.
네이티브 이미지는 기존의 JVM(Java Virtual Machine)에 비해 시작 시간이 더 빠르고 런타임 메모리 오버헤드가 적습니다.
7. 리소스 정리
후속 빠른 시작 및 자습서를 계속 사용하려는 경우 이러한 리소스를 그대로 유지할 수 있습니다. 리소스가 더 이상 필요하지 않으면 리소스 그룹을 삭제하여 리소스를 삭제합니다. 다음 명령을 사용하여 리소스 그룹을 삭제합니다.
az group delete --name ${RESOURCE_GROUP}
8. 다음 단계
자세한 내용은 다음 문서를 참조하세요.