Apache Cassandra API용 Azure Cosmos DB에서 Spring Data 사용
이 문서에서는 Linux의 Azure App Service에서 Java 웹앱을 빌드, 구성, 배포, 문제 해결 및 확장하는 프로세스를 안내합니다.
다음 구성 요소의 사용을 보여 줍니다.
- Azure Cosmos DB for NoSQL와 함께하는 Spring Boot Starter
- Azure Cosmos DB
- App Service Linux
필수 구성 요소
이 문서의 단계를 수행하려면 다음 필수 구성 요소가 필요합니다.
- Java 웹앱을 클라우드에 배포하려면 Azure 구독이 필요합니다. Azure 구독이 아직 없는 경우
MSDN 구독자 혜택을 활성화하거나 무료 Azure 계정 등록할 수 있습니다. - Azure CLI 2.0
- Java 8 JDK
- Maven 3
중요하다
이 문서의 단계를 완료하려면 Spring Boot 버전 2.5 이상이 필요합니다.
샘플 Java 웹앱 리포지토리 복제
이 연습에서는 Spring Boot, Azure Cosmos DB를 위한 Spring Data, Azure Cosmos DB를 사용하여 빌드된 Java 애플리케이션인 Spring Todo 앱을 사용할 것입니다.
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
복제된 리포지토리에서 디렉터리를 다음 폴더로 변경합니다.
cd initial\spring-todo-app
Azure CLI에서 Azure Cosmos DB 만들기
다음 절차에서는 CLI를 사용하여 Azure Cosmos DB 데이터베이스를 만듭니다.
Azure CLI에 로그인하고 구독 ID를 설정합니다.
az login
필요한 경우 구독 ID를 설정합니다.
az account set -s <your-subscription-id>
Azure 리소스 그룹을 만들고 나중에 사용할 수 있는 리소스 그룹 이름을 따로 저장합니다.
az group create \ --name <your-azure-group-name> \ --location <your-resource-group-region>
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
Azure Cosmos DB 키를 가져와서 나중에 사용할 수 있도록
primaryMasterKey
값을 기록합니다.az cosmosdb keys list \ --resource-group <your-azure-group-name> \ --name <your-azure-COSMOSDB-name>
로컬로 앱 빌드 및 실행
다음 절차에서는 개발 컴퓨터에서 애플리케이션을 실행합니다.
선택한 콘솔 내에서 이 문서에서 이전에 수집한 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의 경우(명령 프롬프트):
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에 대한 템플릿을 복사하여 시작점으로 사용할 수 있습니다.
다음 명령을 사용하여 디렉터리를 변경합니다.
cd initial/spring-todo-app
다음 명령을 사용하여 Spring Todo 앱을 로컬로 실행합니다.
mvn package spring-boot:run
애플리케이션이 시작되면 spring Todo 앱에 액세스하여 배포의 유효성을 검사할 수 있습니다.
http://localhost:8080/
.로컬에서 실행되는
App Service Linux에 배포
다음 절차에서는 애플리케이션을 Azure의 Linux에 배포합니다.
이전에 복사한 pom.xml 파일을 리포지토리의 initial/spring-todo-app 디렉터리에서 엽니다. 다음
pom.xml 파일에 표시된 것처럼 Azure App ServiceMaven 플러그 인이 포함되어 있는지 확인합니다. 버전이 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>
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] ------------------------------------------------------------------------
App Service Linux의 Java SE에서 실행되는 웹앱으로 이동합니다.
https://<WEBAPP_NAME>.azurewebsites.net
Linux App Service에서 실행되는
로그를 확인하여 Azure에서 Spring Todo 앱 문제 해결
다음 절차에서는 Azure에서 로그 파일을 엽니다.
Linux의 Azure App Service에서 배포된 Java 웹앱에 대한 로그를 구성합니다.
az webapp log config \ --name ${WEBAPP_NAME} \ --resource-group ${RESOURCEGROUP_NAME} \ --web-server-logging filesystem
로컬 컴퓨터에서 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 앱 확장
다음 절차에 따라 애플리케이션의 크기를 조정합니다.
Azure CLI를 사용하여 Java 웹앱을 확장합니다.
az appservice plan update \ --number-of-workers 2 \ --name ${WEBAPP_PLAN_NAME} \ --resource-group ${RESOURCEGROUP_NAME}
다음 단계
- App Service Linux에서 Java 개발 가이드
- Java 개발자용 Azure Spring 및 Azure에 대한 자세한 내용은 Azure의 Spring 설명서 센터를 계속 진행하세요.
참고
Azure에서 Spring Boot 애플리케이션을 사용하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.
Azure App Service Linux에 Spring Boot 애플리케이션 배포
Azure Container Service Kubernetes 클러스터에서 Spring Boot 애플리케이션 실행
Java에서 Azure를 사용하는 방법에 대한 자세한 내용은 Java 개발자용 Azure 및 Azure DevOps와 Java 작업하기를 참조하세요.
Spring Framework Java 개발자가 엔터프라이즈 수준 애플리케이션을 만드는 데 도움이 되는 오픈 소스 솔루션입니다. 해당 플랫폼 위에 빌드되는 인기 있는 프로젝트 중 하나는 독립 실행형 Java 애플리케이션을 만들기 위한 간소화된 접근 방식을 제공하는 Spring Boot. 개발자가 Spring Boot를 시작하는 데 도움을 주기 위해 https://github.com/spring-guides/몇 가지 샘플 Spring Boot 패키지를 사용할 수 있습니다. 기본 Spring Boot 프로젝트 목록에서 선택하는 것 외에도 Spring Initializr 개발자가 사용자 지정 Spring Boot 애플리케이션 만들기를 시작하는 데 도움이 됩니다.