MySQL을 사용하여 App Service에 Spring 앱 배포
참고 항목
Spring 애플리케이션의 경우 Azure Spring Apps를 사용하는 것이 좋습니다. 그러나 Azure App Service를 대상으로 계속 사용할 수 있습니다. 자세한 내용은 Java 애플리케이션에 적합한 Azure 서비스 선택을 참조 하세요.
이 자습서에서는 App Service Linux에서 Java 웹앱을 빌드, 구성, 배포, 문제 해결 및 확장하는 프로세스를 단계별로 안내합니다.
이 자습서는 인기 있는 Spring PetClinic 샘플 앱을 기반으로 합니다. 이 항목에서는 로컬에서 HSQLDB 버전의 앱을 테스트한 다음 Azure 앱 서비스에 배포합니다. 그런 다음 Azure Database for MySQL을 사용하는 버전을 구성하고 배포합니다. 마지막으로 앱 로그에 액세스하고 앱을 실행하는 작업자 수를 늘려 규모를 확장하는 방법을 알아봅니다.
필수 조건
샘플 가져오기
샘플 앱을 시작하려면 다음 명령을 사용하여 원본 리포지토리를 복제하고 준비합니다.
git clone https://github.com/spring-petclinic/spring-framework-petclinic.git
cd spring-framework-petclinic
로컬에서 HSQLDB 샘플 빌드 및 실행
먼저 HSQLDB를 데이터베이스로 사용하여 샘플을 로컬로 테스트합니다.
샘플 앱의 HSQLDB 버전을 빌드합니다.
mvn package
다음으로 TOMCAT_HOME 환경 변수를 Tomcat 설치 위치로 설정합니다.
export TOMCAT_HOME=<Tomcat install directory>
그런 다음 WAR 파일을 배포하기 위해 pom.xml 파일을 업데이트합니다. 다음 XML을 기존 요소의 자식으로 추가합니다 <plugins>
. 필요한 경우 현재 버전의 Cargo Maven 3 플러그 인으로 변경 1.9.11
합니다.
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven3-plugin</artifactId>
<version>1.9.11</version>
<configuration>
<container>
<containerId>tomcat9x</containerId>
<type>installed</type>
<home>${TOMCAT_HOME}</home>
</container>
<configuration>
<type>existing</type>
<home>${TOMCAT_HOME}</home>
</configuration>
<deployables>
<deployable>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<type>war</type>
<properties>
<context>/</context>
</properties>
</deployable>
</deployables>
</configuration>
</plugin>
이 구성을 사용하면 Tomcat에 로컬로 앱을 배포할 수 있습니다.
mvn cargo:deploy
그런 다음, Tomcat을 시작합니다.
${TOMCAT_HOME}/bin/catalina.sh run
이제 브라우저를 탐색하여 http://localhost:8080
실행 중인 앱을 보고 작동 방식에 대한 느낌을 얻을 수 있습니다. 완료되면 Bash 프롬프트에서 Ctrl+C를 선택하여 Tomcat을 중지합니다.
Azure App Service에 배포
로컬에서 실행되는 모습을 살펴보았으므로 이제 앱을 Azure에 배포합니다.
먼저 다음 환경 변수를 설정합니다. 여기에서 찾을 수 있는 , 사용 West US 2
또는 기타 지역의 경우 REGION
export RESOURCEGROUP_NAME=<resource group>
export WEBAPP_NAME=<web app>
export WEBAPP_PLAN_NAME=${WEBAPP_NAME}-appservice-plan
export REGION=<region>
Maven은 이러한 값을 사용하여 사용자가 제공하는 이름으로 Azure 리소스를 만듭니다. 환경 변수를 사용하여 계정 비밀을 프로젝트 파일에서 유지할 수 있습니다.
다음으로, pom.xml 파일을 업데이트하여 Azure 배포에 Maven을 구성합니다. 이전에 추가한 <plugin>
요소 뒤에 다음 XML을 추가합니다. 필요한 경우 2.5.0
을 Azure App Service용 Maven 플러그 인의 최신 버전으로 변경합니다.
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
<resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
<appName>${WEBAPP_NAME}</appName>
<region>${REGION}</region>
<pricingTier>P1v2</pricingTier>
<runtime>
<os>Linux</os>
<javaVersion>Java 8</javaVersion>
<webContainer>TOMCAT 9.0</webContainer>
</runtime>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.war</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
그런 다음, Azure에 로그인합니다.
az login
그런 다음 App Service Linux에 앱을 배포합니다.
mvn azure-webapp:deploy
이제 https://<app-name>.azurewebsites.net
으로 이동하여 실행 중인 앱을 확인합니다. 여기서 <app-name>
은 적절한 이름으로 바꿉니다.
Azure Database for MySQL 설정
다음으로 HSQLDB 대신 MySQL 사용으로 전환합니다. Azure에서 MySQL 서버 인스턴스를 만들고 데이터베이스를 추가한 다음, 새 데이터베이스 연결 정보를 사용하여 앱 구성을 업데이트합니다.
먼저 이후 단계에서 사용할 다음 환경 변수를 설정합니다.
export MYSQL_SERVER_NAME=<server>
export MYSQL_SERVER_FULL_NAME=${MYSQL_SERVER_NAME}.mysql.database.azure.com
export MYSQL_SERVER_ADMIN_LOGIN_NAME=<admin>
export MYSQL_SERVER_ADMIN_PASSWORD=<password>
export MYSQL_DATABASE_NAME=<database>
export DOLLAR=\$
다음으로 데이터베이스 서버를 만들고 초기화합니다. 초기 구성에 az mysql up을 사용합니다. 그런 다음 az mysql 서버 구성 집합을 사용하여 연결 시간 제한을 늘리고 서버 표준 시간대를 설정합니다.
az extension add --name db-up
az mysql up \
--resource-group ${RESOURCEGROUP_NAME} \
--server-name ${MYSQL_SERVER_NAME} \
--database-name ${MYSQL_DATABASE_NAME} \
--admin-user ${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
--admin-password ${MYSQL_SERVER_ADMIN_PASSWORD}
az mysql server configuration set --name wait_timeout \
--resource-group ${RESOURCEGROUP_NAME} \
--server ${MYSQL_SERVER_NAME} --value 2147483
az mysql server configuration set --name time_zone \
--resource-group ${RESOURCEGROUP_NAME} \
--server ${MYSQL_SERVER_NAME} --value=-8:00
그런 다음 MySQL CLI를 사용하여 Azure의 데이터베이스에 연결합니다.
mysql -u ${MYSQL_SERVER_ADMIN_LOGIN_NAME}@${MYSQL_SERVER_NAME} \
-h ${MYSQL_SERVER_FULL_NAME} -P 3306 -p
MySQL CLI 프롬프트에서 다음 명령을 실행하여 환경 변수에 대해 이전에 지정한 것과 동일한 값으로 명명된 데이터베이스를 MYSQL_DATABASE_NAME
확인합니다.
show databases;
이제 MySQL을 사용할 준비가 되었습니다.
MySQL용 앱 구성
다음으로, 앱의 MySQL 버전에 연결 정보를 추가한 다음 App Service에 배포합니다.
pom.xml 파일을 업데이트하여 MySQL을 활성 구성으로 만듭니다. <activation>
여기에 표시된 것처럼 H2 프로필에서 요소를 제거하고 대신 MySQL 프로필에 넣습니다. 나머지 코드 조각은 기존 구성을 보여 줍니다. 이전에 설정한 환경 변수가 Maven에서 MySQL 액세스를 구성하는 데 어떻게 사용되는지 확인합니다.
<profile>
<id>MySQL</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<db.script>mysql</db.script>
<jpa.database>MYSQL</jpa.database>
<jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
<jdbc.url>jdbc:mysql://${DOLLAR}{MYSQL_SERVER_FULL_NAME}:3306/${DOLLAR}{MYSQL_DATABASE_NAME}?useUnicode=true</jdbc.url>
<jdbc.username>${DOLLAR}{MYSQL_SERVER_ADMIN_LOGIN_NAME}@${DOLLAR}{MYSQL_SERVER_FULL_NAME}</jdbc.username>
<jdbc.password>${DOLLAR}{MYSQL_SERVER_ADMIN_PASSWORD}</jdbc.password>
</properties>
...
</profile>
다음으로, pom.xml 파일을 업데이트하여 Azure 배포 및 MySQL 사용을 위해 Maven을 구성합니다. 이전에 추가한 <plugin>
요소 뒤에 다음 XML을 추가합니다. 필요한 경우 2.5.0
을 Azure App Service용 Maven 플러그 인의 최신 버전으로 변경합니다.
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
<resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
<appName>${WEBAPP_NAME}</appName>
<region>${REGION}</region>
<pricingTier>P1v2</pricingTier>
<runtime>
<os>Linux</os>
<javaVersion>Java 8</javaVersion>
<webContainer>TOMCAT 9.0</webContainer>
</runtime>
<appSettings>
<property>
<name>MYSQL_SERVER_FULL_NAME</name>
<value>${MYSQL_SERVER_FULL_NAME}</value>
</property>
<property>
<name>MYSQL_SERVER_ADMIN_LOGIN_NAME</name>
<value>${MYSQL_SERVER_ADMIN_LOGIN_NAME}</value>
</property>
<property>
<name>MYSQL_SERVER_ADMIN_PASSWORD</name>
<value>${MYSQL_SERVER_ADMIN_PASSWORD}</value>
</property>
<property>
<name>MYSQL_DATABASE_NAME</name>
<value>${MYSQL_DATABASE_NAME}</value>
</property>
</appSettings>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.war</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
다음으로, 앱을 빌드한 다음 Tomcat을 사용하여 배포하고 실행하여 로컬로 테스트합니다.
mvn package
mvn cargo:deploy
${TOMCAT_HOME}/bin/catalina.sh run
이제 http://localhost:8080
에서 로컬로 앱을 볼 수 있습니다. 앱은 이전과 동일하게 보이고 동작하지만 HSQLDB 대신 Azure Database for MySQL을 사용합니다. 완료되면 Bash 프롬프트에서 Ctrl+C를 선택하여 Tomcat을 중지합니다.
마지막으로 App Service에 앱을 배포합니다.
mvn azure-webapp:deploy
이제 https://<app-name>.azurewebsites.net
으로 이동하여 App Service 및 Azure Database for MySQL을 사용하여 실행 중인 앱을 확인할 수 있습니다.
앱 로그 액세스
문제를 해결해야 하는 경우 앱 로그를 확인할 수 있습니다. 로컬 머신에서 원격 로그 스트림을 열려면 다음 명령을 사용합니다.
az webapp log tail --name ${WEBAPP_NAME} \
--resource-group ${RESOURCEGROUP_NAME}
로그 보기를 마쳤으면 Ctrl+C를 선택하여 스트림을 중지합니다.
로그 스트림은 .에서 https://<app-name>.scm.azurewebsites.net/api/logstream
도 사용할 수 있습니다.
확장
앱에 대한 트래픽 증가를 지원하기 위해 다음 명령을 사용하여 여러 인스턴스로 확장할 수 있습니다.
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group ${RESOURCEGROUP_NAME}
축하합니다! Spring Framework, JSP, Spring Data, Hibernate, JDBC, App Service Linux 및 Azure Database for MySQL을 사용하여 Java 웹앱을 빌드하고 확장했습니다.
리소스 정리
이전 섹션에서는 리소스 그룹에서 Azure 리소스를 만들었습니다. 나중에 이러한 리소스를 사용하지 않을 것으로 예상되는 경우 다음 명령을 실행하여 리소스 그룹을 삭제합니다.
az group delete --name ${RESOURCEGROUP_NAME}
다음 단계
다음으로, App Service를 사용하여 Java에 사용할 수 있는 다른 구성 및 CI/CD 옵션을 검사.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기