Share via


Apache Cassandra API용 Azure Cosmos DB에서 Spring Data 사용

이 문서에서는 Linux의 Azure 앱 Service에서 Java 웹앱을 빌드, 구성, 배포, 문제 해결 및 확장하는 프로세스를 안내합니다.

즉, 다음 구성 요소의 사용법을 보여줍니다.

필수 조건

이 문서의 단계를 수행하려면 다음 필수 구성 요소가 필요합니다.

Important

이 문서의 단계를 완료하려면 Spring Boot 버전 2.5 이상이 필요합니다.

샘플 Java 웹앱 리포지토리 복제

이 연습에서는 Spring Boot, Azure Cosmos DB용 Spring Data 및 Azure Cosmos DB를 사용하여 빌드된 Java 애플리케이션인 Spring Todo 앱을 사용합니다.

  1. Spring Todo 앱을 복제하고 .prep 폴더의 내용을 복사하여 프로젝트를 초기화합니다.

    bash의 경우:

    git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git
    yes | cp -rf .prep/* .
    

    Windows의 경우:

    git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git
    cd e2e-java-experience-in-app-service-linux-part-2
    xcopy .prep /f /s /e /y
    
  2. 복제된 리포지토리에서 디렉터리를 다음 폴더로 변경합니다.

    cd initial\spring-todo-app
    

Azure CLI에서 Azure Cosmos DB 만들기

다음 절차에서는 CLI를 사용하여 Azure Cosmos DB 데이터베이스를 만듭니다.

  1. Azure CLI에 로그인하고 구독 ID를 설정합니다.

    az login
    
  2. 필요한 경우 구독 ID를 설정합니다.

    az account set -s <your-subscription-id>
    
  3. Azure 리소스 그룹을 만들고 나중에 사용할 수 있는 리소스 그룹 이름을 따로 저장합니다.

    az group create \
        --name <your-azure-group-name> \
        --location <your-resource-group-region>
    
  4. Azure Cosmos DB를 만들고 형식을 GlobalDocumentDB로 지정합니다. Azure Cosmos DB의 이름은 소문자만 사용해야 합니다. 응답에서 documentEndpoint 필드에 유의해야 합니다. 이 값은 나중에 필요합니다.

    az cosmosdb create \
        --resource-group <your-resource-group-name> \
        --name <your-azure-COSMOS-DB-name-in-lower-case-letters> \
        --kind GlobalDocumentDB
    
  5. Azure Cosmos DB 키를 가져오고 primaryMasterKey 값을 나중에 사용할 수 있도록 기록합니다.

    az cosmosdb keys list \
        --resource-group <your-azure-group-name> \
        --name <your-azure-COSMOSDB-name>
    

로컬로 앱 빌드 및 실행

다음 절차에서는 개발 컴퓨터에서 애플리케이션을 실행합니다.

  1. 선택한 콘솔 내에서 이 문서에서 이전에 수집한 Azure 및 Azure Cosmos DB 연결 정보를 사용하여 다음 코드 섹션에 표시된 환경 변수를 구성합니다. WEBAPP_NAME 고유한 이름과 REGION 변수의 값을 제공해야 합니다.

    Linux(Bash):

    export COSMOS_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
    export COSMOS_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
    export COSMOS_DATABASE=<put-your-COSMOS-DATABASE-name-here>
    export RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
    export WEBAPP_NAME=<put-your-Webapp-name-here>
    export REGION=<put-your-REGION-here>
    export SUBSCRIPTION_ID=<put-your-SUBSCRIPTION_ID-here>
    

    Windows(Command Prompt)의 경우:

    set COSMOS_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
    set COSMOS_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
    set COSMOS_DATABASE=<put-your-COSMOS-DATABASE-name-here>
    set RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
    set WEBAPP_NAME=<put-your-Webapp-name-here>
    set REGION=<put-your-REGION-here>
    set SUBSCRIPTION_ID=<put-your-SUBSCRIPTION_ID-here>
    

    참고 항목

    스크립트를 사용하여 해당 변수를 프로비저닝하려면 .prep 디렉터리의 Bash용 템플릿을 복사하여 시작점으로 사용할 수 있습니다.

  2. 다음 명령을 사용하여 디렉터리를 변경합니다.

    cd initial/spring-todo-app
    
  3. 다음 명령을 사용하여 Spring Todo 앱을 로컬로 실행합니다.

    mvn package spring-boot:run
    
  4. 애플리케이션이 시작되면 여기서 Spring Todo 앱에 액세스하여 배포의 유효성을 검사할 수 있습니다 http://localhost:8080/.

    로컬로 실행되는 Spring 앱

App Service Linux에 배포

다음 절차에서는 애플리케이션을 Azure의 Linux에 배포합니다.

  1. 이전에 리포지토리의 초기/spring-todo-app 디렉터리에 복사한 pom.xml 파일을 엽니다. 다음 pom.xml 파일에 표시된 것처럼 Azure 앱 Service용 Maven 플러그 인이 포함되어 있는지 확인합니다. 버전이 1.14.0으로 설정되지 않은 경우 값을 업데이트합니다.

    <plugins> 
    
        <!--*************************************************-->
        <!-- Deploy to Java SE in App Service Linux           -->
        <!--*************************************************-->
    
        <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>azure-webapp-maven-plugin</artifactId>
            <version>1.14.0</version>
            <configuration>
                <schemaVersion>v2</schemaVersion>
                <subscriptionId>${SUBSCRIPTION_ID}</subscriptionId>
                <!-- Web App information -->
                <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
                <appName>${WEBAPP_NAME}</appName>
                <region>${REGION}</region>
                <pricingTier>P1v2</pricingTier>
                <!-- Java Runtime Stack for Web App on Linux-->
                <runtime>
                    <os>Linux</os>
                    <javaVersion>Java 8</javaVersion>
                    <webContainer>Java SE</webContainer>
                </runtime>
                <deployment>
                    <resources>
                        <resource>
                            <directory>${project.basedir}/target</directory>
                            <includes>
                                <include>*.jar</include>
                            </includes>
                        </resource>
                    </resources>
                </deployment>
                <appSettings>
                    <property>
                        <name>COSMOS_URI</name>
                        <value>${COSMOS_URI}</value>
                    </property>
                    <property>
                        <name>COSMOS_KEY</name>
                        <value>${COSMOS_KEY}</value>
                    </property>
                    <property>
                        <name>COSMOS_DATABASE</name>
                        <value>${COSMOS_DATABASE}</value>
                    </property>
                    <property>
                        <name>JAVA_OPTS</name>
                        <value>-Dserver.port=80</value>
                    </property>
                </appSettings>
    
            </configuration>
        </plugin>            
        ...
    </plugins>
    
  2. App Service Linux에서 Java SE에 배포

    mvn azure-webapp:deploy
    
    // Deploy
    bash-3.2$ mvn azure-webapp:deploy
    [INFO] Scanning for projects...
    [INFO]
    [INFO] -------< com.azure.spring.samples:spring-todo-app >--------
    [INFO] Building spring-todo-app 2.0-SNAPSHOT
    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO]
    [INFO] --- azure-webapp-maven-plugin:1.14.0:deploy (default-cli) @ spring-todo-app ---
    Auth type: AZURE_CLI
    Default subscription: Consoto Subscription(subscription-id-xxx)
    Username: user@contoso.com
    [INFO] Subscription: Consoto Subscription(subscription-id-xxx)
    [INFO] Creating app service plan...
    [INFO] Successfully created app service plan asp-spring-todo-app.
    [INFO] Creating web app spring-todo-app...
    [INFO] Successfully created Web App spring-todo-app.
    [INFO] Trying to deploy artifact to spring-todo-app...
    [INFO] Successfully deployed the artifact to https://spring-todo-app.azurewebsites.net
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  02:05 min
    [INFO] Finished at: 2021-05-28T09:43:19+08:00
    [INFO] ------------------------------------------------------------------------
    
  3. App Service Linux의 Java SE에서 실행되는 웹앱으로 이동합니다.

    https://<WEBAPP_NAME>.azurewebsites.net
    

Linux의 App Service에서 실행되는 Spring 앱

로그를 확인하여 Azure에서 Spring Todo 앱 문제 해결

다음 절차에서는 Azure에서 로그 파일을 엽니다.

  1. Linux의 Azure 앱 Service에서 배포된 Java 웹앱에 대한 로그를 구성합니다.

    az webapp log config \
        --name ${WEBAPP_NAME} \
        --resource-group ${RESOURCEGROUP_NAME} \
        --web-server-logging filesystem
    
  2. 로컬 컴퓨터에서 Java 웹앱 원격 로그 스트림을 엽니다.

    az webapp log tail \
        --name ${WEBAPP_NAME} \
        --resource-group ${RESOURCEGROUP_NAME}
    
    bash-3.2$ az webapp log tail --name ${WEBAPP_NAME}  --resource-group ${RESOURCEGROUP_NAME}
    2021-05-28T01:46:08.000655632Z   _____                               
    2021-05-28T01:46:08.000701432Z   /  _  \ __________ _________   ____  
    2021-05-28T01:46:08.000708133Z  /  /_\  \___   /  |  \_  __ \_/ __ \ 
    2021-05-28T01:46:08.000711733Z /    |    \/    /|  |  /|  | \/\  ___/ 
    2021-05-28T01:46:08.000714933Z \____|__  /_____ \____/ |__|    \___  >
    2021-05-28T01:46:08.000718233Z         \/      \/                  \/ 
    2021-05-28T01:46:08.000721333Z A P P   S E R V I C E   O N   L I N U X
    2021-05-28T01:46:08.000724233Z Documentation: http://aka.ms/webapp-linux
    ...
    ...
    2021-05-28T01:46:18.925044188Z   .   ____          _            __ _ _
    2021-05-28T01:46:18.925481392Z  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    2021-05-28T01:46:18.926004297Z ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
    2021-05-28T01:46:18.926587603Z  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    2021-05-28T01:46:18.926599403Z   '  |____| .__|_| |_|_| |_\__, | / / / /
    2021-05-28T01:46:18.926841806Z  =========|_|==============|___/=/_/_/_/
    2021-05-28T01:46:18.931157849Z  :: Spring Boot ::                (v2.4.5)
    ...
    ...
    2021-05-28T01:46:29.842553633Z 2021-05-28 01:46:29.842  INFO 124 --- [           main] c.azure.spring.   samples.TodoApplication   : Started TodoApplication in 12.635 seconds (JVM running for 17.664)
    2021-05-28T01:46:30.477951594Z 2021-05-28 01:46:30.477  INFO 124 --- [p-nio-80-exec-1] o.a.c.c.C.   [Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
    2021-05-28T01:46:30.483316162Z 2021-05-28 01:46:30.483  INFO 124 --- [p-nio-80-exec-1] o.s.web.   servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
    2021-05-28T01:46:30.485411088Z 2021-05-28 01:46:30.484  INFO 124 --- [p-nio-80-exec-1] o.s.web.   servlet.DispatcherServlet        : Completed initialization in 0 ms
    2021-05-28T01:47:19.683003828Z 2021-05-28 01:47:19.682  INFO 124 --- [p-nio-80-exec-9] c.a.s.s.   controller.TodoListController    : GET request access '/api/todolist' path.
    2021-05-28T01:47:26.069984388Z 2021-05-28 01:47:26.069  INFO 124 --- [-nio-80-exec-10] c.a.s.s.   controller.TodoListController    : POST request access '/api/todolist' path with item: Milk
    2021-05-28T01:47:26.649080678Z 2021-05-28 01:47:26.648  INFO 124 --- [p-nio-80-exec-1] c.a.s.s.   controller.TodoListController    : GET request access '/api/todolist' path.
    

Spring Todo 앱 확장

다음 절차에 따라 애플리케이션의 크기를 조정합니다.

  1. Azure CLI를 사용하여 Java 웹앱을 확장합니다.

    az appservice plan update \
        --number-of-workers 2 \
        --name ${WEBAPP_PLAN_NAME} \
        --resource-group ${RESOURCEGROUP_NAME}
    

다음 단계

참고 항목

Azure에서 Spring Boot 애플리케이션을 사용하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.

Java와 함께 Azure를 사용하는 방법에 관한 자세한 정보는 Java 개발자를 위한 AzureAzure DevOps 및 Java 사용하기를 참조하세요.

Spring Framework는 Java 개발자가 엔터프라이즈 수준 애플리케이션을 만드는 데 도움이 되는 오픈 소스 솔루션입니다. 해당 플랫폼을 기반으로 빌드되는 인기 있는 프로젝트 중 하나는 독립 실행형 Java 애플리케이션을 만들기 위한 간소화된 접근 방식을 제공하는 Spring Boot입니다. Spring Boot을 시작하는 개발자를 도우려면 https://github.com/spring-guides/에서 몇 가지 샘플 Spring Boot 패키지를 사용할 있습니다. Spring Initializr는 기본 Spring Boot 프로젝트 목록에서 선택하는 것 외에도 개발자가 사용자 지정 Spring Boot 애플리케이션 만들기를 시작하는 데 도움이 됩니다.