이 자습서에서는 Azure Load Testing을 사용하여 웹 애플리케이션에서 성능 병목 상태를 식별하는 방법을 알아봅니다. 샘플 Node.js 웹 애플리케이션에 대한 부하를 시뮬레이션한 다음 부하 테스트 대시보드를 사용하여 클라이언트 쪽 및 서버 쪽 메트릭을 분석합니다.
샘플 애플리케이션은 NoSQL 데이터베이스와 상호 작용하는 Node.js Web API로 구성됩니다. Azure App Service 웹앱에 웹 API를 배포하고 Azure Cosmos DB를 데이터베이스로 사용합니다.
이 튜토리얼에서는 다음을 배우게 됩니다:
- 샘플 앱을 배포합니다.
- 부하 테스트를 만들고 실행합니다.
- 부하 테스트에 Azure 앱 구성 요소를 추가합니다.
- 부하 테스트 대시보드를 사용하여 성능 병목 상태를 식별합니다.
필수 조건
- 활성 구독이 있는 Azure 계정. Azure 구독이 없는 경우, 시작하기 전에 무료 계정을 만드십시오.
- 로컬 컴퓨터에 설치된 Azure CLI
- Azure CLI 버전 2.2.0 이상. 실행
az --version
하여 컴퓨터에 설치된 버전을 찾습니다. Azure CLI를 설치하거나 업그레이드해야 하는 경우 Azure CLI 설치 방법을 참조하세요. - Visual Studio Code 아직 없으면 다운로드하여 설치합니다.
- Git. 아직 없으면 다운로드하여 설치합니다.
필수 구성 요소 확인
시작하기 전에 현재 환경의 유효성을 검사합니다.
Azure Portal에 로그인하고 구독이 활성 상태인지 확인합니다.
터미널 또는 명령 창에서
az --version
을 실행하여 Azure CLI 버전을 확인합니다. 최신 버전은 최신 릴리스 정보를 참조하세요.최신 버전이 없는 경우 사용 중인 운영 체제 또는 플랫폼의 설치 가이드에 따라 설치를 업데이트합니다.
샘플 애플리케이션 배포
이 자습서에서는 Azure App Service에 배포하는 샘플 웹 애플리케이션에 대한 부하를 생성합니다. Azure CLI 명령, Git 명령 및 PowerShell 명령을 사용하여 Azure 구독에 샘플 애플리케이션을 배포합니다.
Windows PowerShell을 열고, Azure에 로그인하고, 구독을 설정합니다.
az login az account set --subscription <your-Azure-Subscription-ID>
샘플 애플리케이션의 원본 리포지토리를 복제합니다.
git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git
샘플 애플리케이션은 Azure App Service 웹 구성 요소 및 Azure Cosmos DB 데이터베이스로 구성된 Node.js 앱입니다. 리포지토리에는 샘플 앱을 Azure 구독에 배포하는 PowerShell 스크립트가 포함되어 있습니다. 이후 단계에서 사용할 Apache JMeter 스크립트도 있습니다.
Node.js 앱의 디렉터리로 이동하여 이 PowerShell 스크립트를 사용하여 샘플 앱을 배포합니다.
cd nodejs-appsvc-cosmosdb-bottleneck .\deploymentscript.ps1
프롬프트에서 다음을 입력합니다.
- Azure 구독 ID.
- 웹앱의 고유한 이름입니다.
- 위치 기본적으로 위치는 입니다
eastus
. Get-AzLocation 명령을 실행하여 지역 코드를 가져올 수 있습니다.
중요합니다
웹앱 이름에 소문자와 숫자만 사용합니다. 공백이나 특수 문자를 사용하지 마세요.
배포가 완료되면 브라우저 창에서 열어
https://<yourappname>.azurewebsites.net
실행 중인 샘플 애플리케이션으로 이동합니다.
이제 샘플 애플리케이션을 배포하고 실행했으므로 Azure 부하 테스트 리소스 및 부하 테스트를 만들 수 있습니다.
부하 테스트 만들기
이 자습서에서는 JMeter 테스트 스크립트(jmx
파일)를 업로드하여 Azure CLI를 사용하여 부하 테스트를 만듭니다. 샘플 애플리케이션 리포지토리에는 부하 테스트 구성 파일 및 JMeter 테스트 스크립트가 이미 포함되어 있습니다.
Azure Portal을 사용하여 부하 테스트를 만들려면 빠른 시작의 단계에 따라 JMeter 스크립트를 사용하여 부하 테스트를 만듭니다.
다음 단계에 따라 Azure CLI를 사용하여 Azure 부하 테스트 리소스 및 부하 테스트를 만듭니다.
터미널 창을 열고 다음 명령을 입력하여 Azure 구독에 로그인합니다.
az login
샘플 애플리케이션 디렉터리로 이동합니다.
cd nodejs-appsvc-cosmosdb-bottleneck
Azure 부하 테스트 리소스에 대한 리소스 그룹을 만듭니다.
필요에 따라 이전에 배포한 샘플 애플리케이션의 리소스 그룹을 다시 사용할 수도 있습니다.
<load-testing-resource-group-name>
텍스트 자리 표시자를 리소스 그룹의 이름으로 바꿉니다.resourceGroup="<load-testing-resource-group-name>" ___location="East US" az group create --name $resourceGroup --___location $___location
명령을 사용하여 Azure 부하 테스트 리소스를 만듭니다
az load create
.<load-testing-resource-name>
텍스트 자리 표시자를 부하 테스트 리소스의 이름으로 바꿉 있습니다.# This script requires the following Azure CLI extensions: # - load loadTestResource="<load-testing-resource-name>" az load create --name $loadTestResource --resource-group $resourceGroup --___location $___location
명령을 사용하여 샘플 애플리케이션에 대한 부하를 시뮬레이션하기 위한 부하 테스트를 만듭니다
az load test create
.<web-app-hostname>
텍스트 자리 표시자를 샘플 애플리케이션의 App Service 호스트 이름으로 바꿉 있습니다. 이 값은 형식myapp.azurewebsites.net
입니다. URL의 일부를 포함하지https://
마세요.testId="sample-app-test" webappHostname="<web-app-hostname>" az load test create --test-id $testId --load-test-resource $loadTestResource --resource-group $resourceGroup --load-test-config-file SampleApp.yaml --env webapp=$webappHostname
이 명령은 JMeter 테스트 스크립트를
SampleApp.jmx
참조하는 부하 테스트 구성 파일을 사용합니다Sampleapp.yaml
. 명령줄 매개 변수를 사용하여 샘플 애플리케이션 호스트 이름을 부하 테스트에 전달합니다.
이제 Azure 구독의 샘플 웹 애플리케이션에 대한 부하를 생성하는 Azure 부하 테스트 리소스와 부하 테스트가 있습니다.
애플리케이션을 모니터링하는 Azure 앱 구성 요소 추가
Azure Load Testing을 사용하면 애플리케이션의 Azure 구성 요소에 대한 리소스 메트릭을 모니터링할 수 있습니다. 이러한 서버 쪽 메트릭을 분석하여 Azure Load Testing 대시보드에서 직접 애플리케이션의 성능 및 안정성 문제를 식별할 수 있습니다.
이 자습서에서는 앱 서비스, Cosmos DB 계정 등 Azure에 배포한 샘플 애플리케이션에 대한 Azure 구성 요소를 추가합니다.
샘플 애플리케이션에 대한 Azure 앱 구성 요소를 부하 테스트에 추가하려면 다음을 수행합니다.
Azure Portal에서 Azure Load Testing 리소스로 이동합니다.
왼쪽 창에서 테스트를 선택하여 부하 테스트 목록을 봅니다.
부하 테스트 옆에 있는 확인란을 선택한 다음 편집을 선택합니다.
모니터링 탭으로 이동한 다음 추가/수정을 선택합니다.
이전에 배포한 샘플 애플리케이션에 대한 확인란 을 선택한 다음 적용을 선택합니다.
팁 (조언)
리소스 그룹 필터를 사용하여 샘플 애플리케이션 리소스 그룹의 Azure 리소스만 볼 수 있습니다.
적용을 선택하여 부하 테스트 구성에 대한 변경 내용을 저장합니다.
부하 테스트가 실행되는 동안 모니터링 서버 쪽 메트릭을 사용하도록 설정하기 위해 샘플 애플리케이션에 대한 Azure 앱 구성 요소를 부하 테스트에 성공적으로 추가했습니다.
부하 테스트 실행
이제 부하 테스트를 실행하여 Azure 구독에 배포한 샘플 애플리케이션에 대한 부하를 시뮬레이션할 수 있습니다. 이 자습서에서는 Azure Portal 내에서 부하 테스트를 실행합니다. 또는 부하 테스트를 실행하도록 CI/CD 워크플로를 구성할 수 있습니다.
Azure Portal에서 부하 테스트를 실행하려면 다음을 수행합니다.
Azure Portal에서 Azure Load Testing 리소스로 이동합니다.
왼쪽 창에서 테스트를 선택하여 부하 테스트 목록을 봅니다.
목록에서 부하 테스트를 선택하여 테스트 세부 정보 및 테스트 실행 목록을 봅니다.
실행을 선택한 다음 다시 실행하여 부하 테스트를 시작합니다.
필요에 따라 테스트 실행 설명을 입력할 수 있습니다.
부하 테스트를 실행하면 Azure Load Testing은 JMeter 테스트 스크립트 및 추가 파일을 테스트 엔진 인스턴스에 배포한 다음 부하 테스트를 시작합니다.
부하 테스트가 시작되면 부하 테스트 대시보드가 표시됩니다.
대시보드가 표시되지 않으면 새로 고침 을 선택한 다음 목록에서 테스트 실행을 선택할 수 있습니다.
부하 테스트 대시보드는 클라이언트 쪽 메트릭 및 서버 쪽 애플리케이션 메트릭과 같은 테스트 실행 세부 정보를 제공합니다. 대시보드의 그래프가 자동으로 새로 고쳐집니다.
여러 필터를 적용하거나 결과를 다른 백분위수에 집계하여 차트를 사용자 지정할 수 있습니다.
팁 (조언)
중지를 선택하여 Azure Portal에서 언제든지 부하 테스트를 중지할 수 있습니다.
부하 테스트가 완전히 완료될 때까지 기다렸다가 다음 섹션으로 진행합니다.
서버 쪽 메트릭을 사용하여 성능 병목 상태 식별
이 섹션에서는 부하 테스트의 결과를 분석하여 애플리케이션의 성능 병목 상태를 식별합니다. 클라이언트 쪽 및 서버 쪽 메트릭을 모두 검사하여 문제의 근본 원인을 확인합니다.
먼저 클라이언트 쪽 메트릭을 살펴봅니다. 및
get
API 요청에 대한 응답 시간 메트릭add
의 90번째 백분위수는 API보다lasttimestamp
높습니다.API에 다른 API보다 적은 오류가 있는
lasttimestamp
오류에 대해 비슷한 패턴을 볼 수 있습니다.API와
get
API의add
결과는 비슷하지만 API는lasttimestamp
다르게 동작합니다. 원인은 데이터베이스와 API 모두add
데이터베이스 액세스를 포함하기 때문에 데이터베이스와get
관련이 있을 수 있습니다.이 병목 상태를 자세히 조사하려면 서버 쪽 메트릭 대시보드 섹션까지 아래로 스크롤합니다.
서버 쪽 메트릭은 Azure App Service 계획, Azure App Service 웹앱 및 Azure Cosmos DB와 같은 Azure 애플리케이션 구성 요소에 대한 자세한 정보를 표시합니다.
Azure App Service 계획의 메트릭에서 CPU 백분율 및 메모리 비율 메트릭이 허용 가능한 범위 내에 있음을 확인할 수 있습니다.
이제 Azure Cosmos DB 서버 쪽 메트릭을 살펴봅니다.
정규화된 RU 소비 메트릭은 데이터베이스가 리소스 사용률% 100에서 빠르게 실행되고 있음을 보여줍니다. 리소스 사용량이 많으면 데이터베이스 제한 오류가 발생할 수 있습니다. 또한 웹 API 및
get
웹 API에add
대한 응답 시간이 증가할 수 있습니다.Azure Cosmos DB 인스턴스에 대한 프로비전된 처리량 메트릭의 최대 처리량은 400RU임을 확인할 수 있습니다. 데이터베이스의 프로비전된 처리량을 늘리면 성능 문제가 해결될 수 있습니다.
데이터베이스 처리량 늘리기
이 섹션에서는 성능 병목 상태를 해결하기 위해 데이터베이스에 더 많은 리소스를 할당합니다.
Azure Cosmos DB의 경우 데이터베이스 RU 크기 조정 설정을 늘입니다.
샘플 애플리케이션 배포의 일부로 프로비전한 Azure Cosmos DB 리소스로 이동합니다.
데이터 탐색기 탭을 선택합니다.
크기 조정 및 설정을 선택하고 처리량 값을 1200으로 업데이트합니다.
저장을 선택하여 변경 내용을 확인합니다.
성능 향상 유효성 검사
이제 데이터베이스 처리량을 늘렸으므로 부하 테스트를 다시 실행하고 성능 결과가 향상되었는지 확인합니다.
테스트 실행 대시보드에서 다시 실행을 선택한 다음, 다시 실행 테스트 창에서 다시 실행을 선택합니다.
프로비전, 실행 및 완료 상태를 순환하는 상태 열이 있는 새 테스트 실행 항목을 볼 수 있습니다. 언제든지 테스트 실행을 선택하여 부하 테스트가 진행되는 방식을 모니터링합니다.
부하 테스트가 완료되면 응답 시간 결과와 클라이언트 쪽 메트릭의 오류 결과를 확인합니다.
Azure Cosmos DB에 대한 서버 쪽 메트릭을 확인하고 성능이 향상되었는지 확인합니다.
Azure Cosmos DB 정규화된 RU 소비 값은 이제 100개%훨씬 낮습니다.
이제 데이터베이스의 크기 조정 설정을 업데이트했으므로 다음을 확인할 수 있습니다.
- API 및
get
API에add
대한 응답 시간이 향상되었습니다. - 정규화된 RU 사용량은 제한에 미치지 않습니다.
결과적으로 애플리케이션의 전반적인 성능이 향상되었습니다.
자원을 정리하세요
중요합니다
만든 Azure Load Testing 리소스를 다른 Azure Load Testing 자습서 및 방법 문서를 위해 다시 사용할 수 있습니다.
만든 리소스를 사용할 계획이 없다면 추가 요금이 발생하지 않도록 삭제합니다. 다른 리소스 그룹에 샘플 애플리케이션을 배포한 경우 다음 단계를 반복할 수 있습니다.
Azure Portal을 사용하여 리소스를 삭제하려면 다음을 수행합니다.
왼쪽 상단 모서리에 있는 메뉴 단추를 선택한 다음, 리소스 그룹을 선택합니다.
목록에서 만든 리소스 그룹을 선택합니다.
리소스 그룹 삭제를 선택합니다.
리소스 그룹 이름을 입력합니다. 그런 다음 삭제를 선택합니다.
Azure CLI를 사용하여 리소스를 삭제하려면 다음 명령을 입력합니다.
az group delete --name <yourresourcegroup>
리소스 그룹을 삭제하면 리소스 그룹 내의 모든 리소스가 삭제됩니다.
관련 콘텐츠
- 실패한 테스트를 진단하는 방법에 대한 자세한 정보 가져오기
- 서버 쪽 메트릭을 모니터링 하여 애플리케이션에서 성능 병목 현상 식별
- 부하 테스트 실패 조건을 정의 하여 서비스 요구 사항에 대해 테스트 결과의 유효성을 검사합니다.
- Azure Load Testing의 주요 개념에 대해 자세히 알아봅니다.