연습 - Azure App Service에 Java 웹앱 배포

완료됨

이 단원에서는 Azure App Service에 애플리케이션을 배포합니다.

Azure App Service란?

Azure는 Tomcat을 실행하기 위한 PaaS(Platform as a Service)로 Azure App Service를 제공합니다. 여기에는 Windows 및 Linux 환경, 보안, 부하 분산, 자동 스케일링 및 DevOps 통합 기능이 있습니다. OS 및 Tomcat 관리를 Azure에 맡기고 애플리케이션 빌드에 집중할 수 있습니다.

Screenshot that shows the Azure portal screen.

샘플 JSF 애플리케이션 가져오기

Java 웹 애플리케이션을 배포하려면 다음과 같이 GitHub에서 PrimeFaces JSF(JavaServer Faces) 웹 애플리케이션을 가져올 수 있습니다.

git clone https://github.com/yoshioterada/Deploy-PrimeFaces-JSF-Web-App-on-Tomcat-9.0

복제를 마치면 디렉토리에 다음과 같은 파일이 표시됩니다.

Deploy-PrimeFaces-JSF-Web-App-on-Tomcat-9.0
├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── microsoft
        │           └── azure
        │               └── samples
        │                   ├── controller
        │                   │   └── TodoListController.java
        │                   ├── dao
        │                   │   ├── ItemManagement.java
        │                   │   └── TodoItemManagementInMemory.java
        │                   └── model
        │                       └── TodoItem.java
        └── webapp
            ├── META-INF
            │   └── context.xml
            ├── WEB-INF
            │   ├── beans.xml
            │   ├── classes
            │   │   └── logging.properties
            │   ├── faces-config.xml
            │   └── web.xml
            └── index.xhtml

Azure App Service용 Maven 플러그인

Microsoft에서 제공한 Maven Plugin으로 Java 개발자는 Azure에 애플리케이션을 보다 쉽게 배포할 수 있습니다. 이 플러그 인을 사용하여 애플리케이션을 쉽게 구성하고 Azure에 배포할 수 있습니다. 다음 명령을 실행하여 Azure App Service용 Maven Plugin을 사용합니다.

Azure App Service용 Maven 플러그인 구성

다음 명령을 실행하여 Azure App Service용 Maven Plugin을 구성합니다.

mvn com.microsoft.azure:azure-webapp-maven-plugin:1.12.0:config

명령 후에는 프롬프트에 몇 가지 질문이 표시되므로, 적절한 항목을 입력하고 선택하여 설정합니다. 다음 옵션을 입력합니다.

항목 입력 값
Subscription Azure 구독 선택
Define value for OS(OS 값 정의) 1: Linux
Define value for pricing tier(가격 책정 계층 값 정의) P1v2
Define value for Java version(Java 버전 값 정의) 1: Java 8 또는 2: Java 11
Define value for runtime stack(런타임 스택 값 정의) 3: TOMCAT 9.0
확인(Y/N) Y

명령을 실행하면 다음과 같은 결과가 표시됩니다.

mvn com.microsoft.azure:azure-webapp-maven-plugin:1.12.0:config
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
[INFO] Scanning for projects...
[INFO]
[INFO] -----------< com.microsoft.azure.samples:azure-javaweb-app >------------
[INFO] Building azure-javaweb-app Maven Webapp 1.0-SNAPSHOT
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] --- azure-webapp-maven-plugin:1.12.0:config (default-cli) @ azure-javaweb-app ---

Available subscriptions:
* 1: My Subscription (********-****-****-****-************)
Please choose a subscription [My Subscription]: [Enter]
[INFO] It may take a few minutes to load all Java Web Apps, please be patient.
[WARNING] There are no Java Web Apps in current subscription, please follow the following steps to create a new one.
Define value for OS [Linux]:
* 1: Linux
  2: Docker
  3: Windows
Enter your choice:
Define value for pricingTier [P1v2]:
   1: B1
   2: B2
   3: B3
   4: D1
   5: F1
*  6: P1v2
   7: P2v2
   8: P3v2
   9: S1
  10: S2
  11: S3
Define value for javaVersion [Java 8]:
* 1: Java 8
  2: Java 11
Enter your choice: 1
Define value for runtimeStack:
  1: Jbosseap 7.2
* 2: Tomcat 8.5
  3: Tomcat 9.0
Enter your choice: 3
Please confirm webapp properties
Subscription Id : aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
AppName : azure-javaweb-app-1604982052600
ResourceGroup : azure-javaweb-app-1604982052600-rg
Region : westeurope
PricingTier : PremiumV2_P1v2
OS : Linux
Java : Java 8
Web server stack: Tomcat 9.0
Deploy to slot : false
Confirm (Y/N) [Y]: y
[INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  37.656 s
[INFO] Finished at: 2020-10-01T17:24:02+09:00
[INFO] ------------------------------------------------------------------------

pom.xml 파일의 <plugins> 섹션에 새 섹션이 표시됩니다.

리소스 그룹 이름, 인스턴스 이름, 배포 위치를 변경하려면 <resourceGroup>, <appName><region>을 변경합니다.

    <plugins>
      <plugin>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-webapp-maven-plugin</artifactId>
        <version>1.12.0</version>
        <configuration>
          <schemaVersion>V2</schemaVersion>
          <subscriptionId>********-****-****-****-************</subscriptionId>
          <resourceGroup>azure-javaweb-app</resourceGroup>
          <appName>azure-javaweb-app-1601463451101</appName>
          <pricingTier>P1v2</pricingTier>
          <region>japaneast</region>
          <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>
    </plugins>

컴파일 및 Azure App Service에 배포

이제 Azure App Service에 배포하기 위한 설정이 완료되었으므로 소스 코드를 다시 컴파일합니다.

mvn clean package

컴파일 완료 후 Azure Web Apps용 Maven Plugin 명령을 사용하여 애플리케이션을 배포합니다. 다음 명령을 실행합니다.

mvn azure-webapp:deploy

배포가 완료되면 다음 메시지가 출력됩니다.

[INFO] Successfully deployed the artifact to https://azure-javaweb-app-1601463451101.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:15 min
[INFO] Finished at: 2020-11-19T15:55:55+09:00
[INFO] ------------------------------------------------------------------------

배포된 애플리케이션의 공용 URL이 Successfully deployed the artifact to에 표시됩니다. 다음 예를 따라 브라우저에서 URL에 액세스합니다.

https://azure-javaweb-app-1601463451101.azurewebsites.net

Screenshot that shows the deployed web app on Azure App Service.

명령줄에서 로그 스트림 확인

로그 스트림에 액세스하려면 다음 CLI 명령을 실행합니다.

az webapp log tail -g azure-javaweb-app -n azure-javaweb-app-1601463451101

결과는 다음과 같습니다.

Screenshot that shows the execution of the log stream.

연습 요약

이 단원에서 Java 웹 애플리케이션을 만들고 패키지하는 방법, Azure 웹 애플리케이션용 Maven Plugin을 사용하는 방법, Azure App Service에 애플리케이션을 배포하는 방법을 알아봤습니다. 이러한 단계는 JSF 애플리케이션뿐만 아니라 대부분의 Java 웹 애플리케이션에도 적용됩니다.