View a markdown version of this page

테스트 시나리오 생성 - AWS의 분산 로드 테스트

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

테스트 시나리오 생성

테스트 시나리오 생성에는 일반 설정 구성, 시나리오 정의, 트래픽 패턴 구성, 구성 검토의 네 가지 주요 단계가 포함됩니다.

1단계: 일반 설정

테스트 이름, 설명 및 일반 구성 옵션을 포함하여 로드 테스트의 기본 파라미터를 구성합니다.

테스트 식별

  • 테스트 이름(필수) - 테스트 시나리오를 설명하는 이름입니다.

  • 테스트 설명(필수) - 테스트 목적 및 구성에 대한 추가 세부 정보

  • 태그(선택 사항) - 최대 5개의 태그를 추가하여 테스트 시나리오를 분류하고 구성합니다.

예약 옵션

테스트를 실행해야 하는 시기를 구성합니다.

  • 지금 실행 - 생성 직후 테스트를 실행합니다.

  • 한 번 실행 - 특정 날짜 및 시간에 실행되도록 테스트를 예약합니다.

  • 일정에 따라 실행 - cron 기반 예약을 사용하여 정기적으로 테스트를 자동으로 실행합니다. 일반적인 패턴(매시간, 매일, 매주) 중에서 선택하거나 사용자 지정 cron 표현식을 정의할 수 있습니다. 허용되는 cron 형식, 지원되는 패턴 및 제약 조건에 대한 자세한 내용은 개발자 안내서의 Cron 표현식 참조를 참조하세요.

워크플로 예약

테스트를 예약하면 다음 워크플로가 발생합니다.

  • 일정 파라미터는 Amazon API Gateway로 전송됩니다.

  • API는 지정된 날짜에 실행되도록 구성된 Amazon EventBridge 스케줄러 일정을 생성하는 Lambda 함수에 파라미터를 전달합니다.

  • 일회성 테스트(한 번 실행)의 경우 EventBridge 스케줄러 일정은 지정된 날짜 및 시간에 api-services Lambda 함수를 호출하여 테스트를 실행합니다.

  • 반복 테스트(일정에 따라 실행)의 경우 EventBridge 스케줄러 일정은 만료 날짜까지 cron 또는 rate 표현식으로 정의된 주기에 따라 api-services Lambda 함수를 즉시 호출합니다.

라이브 데이터

테스트가 실행되는 동안 실시간 지표를 보려면 라이브 데이터 포함 확인란을 선택합니다. 활성화되면 다음을 모니터링할 수 있습니다.

  • 평균 응답 시간입니다.

  • 가상 사용자 수입니다.

  • 성공적인 요청 수입니다.

  • 실패한 요청 수입니다.

라이브 데이터 기능은 1초 간격으로 집계된 데이터를 사용하여 실시간 차트를 제공합니다. 자세한 내용은 라이브 데이터로 모니터링을 참조하세요.

2단계: 시나리오 구성

특정 테스트 시나리오를 정의하고 원하는 테스트 프레임워크를 선택합니다.

테스트 유형 선택

수행할 로드 테스트 유형을 선택합니다.

  • 단순 HTTP 엔드포인트 - 간단한 구성으로 단일 API 엔드포인트 또는 웹 페이지를 테스트합니다.

  • JMeter - JMeter 테스트 스크립트(.jmx 파일 또는 .zip 아카이브)를 업로드합니다.

  • k6 - k6 테스트 스크립트(.js 파일 또는 .zip 아카이브)를 업로드합니다.

  • Locust - Locust 테스트 스크립트(.py 파일 또는 .zip 아카이브)를 업로드합니다.

참고

네 가지 테스트 유형 모두 타사 구성 요소에 의존합니다. 이 솔루션은 테스트 유형에 따라 JMeter, k6 또는 Locust를 실행하는 Taurus 테스트 자동화 프레임워크를 통해 테스트를 실행합니다. 간단한 HTTP 엔드포인트 테스트는 JMeter 테스트 계획으로 변환되고 번들 Apache JMeter에서 실행됩니다. 테스트를 생성하기 전에 타사 테스트 프레임워크에서 보안 고려 사항, 라이선스 정보 및 패치 옵션을 검토하세요.

트래픽 셰이프 모드

테스트가 생성하는 로드를 제어하는 측면을 선택합니다. 선택한 모드는 콘솔이 3단계: 트래픽 셰이프에 표시하는 필드를 변경합니다.

  • 표준 - 솔루션이 로드를 제어합니다. 가상 사용자, 램프 업 기간 및 대기 기간을 설정합니다. 표준은 기본값이며 단순 HTTP 엔드포인트 테스트를 지원하는 유일한 모드입니다.

  • 네이티브 - 스크립트가 로드를 제어합니다. 이 솔루션은 테스트 프레임워크의 자체 명령줄에서 스크립트를 실행하고 리전당 작업 수와 안전 기간만 설정합니다.

네이티브에는 업로드된 스크립트가 필요하므로 단순 HTTP 엔드포인트 테스트 유형을 선택할 때는 선택할 수 없습니다. 선택할 모드에 대한 전체 정의 및 지침은 트래픽 셰이프 모드를 참조하세요.

HTTP 엔드포인트 구성

“단순 HTTP 엔드포인트”를 선택하면 솔루션은 구성에서 JMeter 테스트 계획을 생성하고 번들 Apache JMeter 바이너리를 사용하여 실행합니다. 다음 설정을 구성합니다.

HTTP 엔드포인트(필수)

테스트하려는 엔드포인트의 전체 URL을 입력합니다. 예: https://api.example.com/users AWS 인프라에서 엔드포인트에 액세스할 수 있는지 확인합니다.

HTTP 메서드(필수)

요청에 대한 HTTP 메서드를 선택합니다. 기본값은 GET입니다. 다른 옵션으로는 POST, PUT, DELETE, PATCH, 및 HEAD가 있습니다OPTIONS.

요청 헤더(선택 사항)

요청에 사용자 지정 HTTP 헤더를 추가합니다. 일반적인 예는 다음과 같습니다.

  • Content-Type: application/json

  • Authorization: Bearer <token>

  • User-Agent: LoadTest/1.0

    헤더 추가를 선택하여 여러 헤더를 포함합니다.

본문 페이로드(선택 사항)

POST 또는 PUT 요청에 대한 요청 본문 콘텐츠를 추가합니다. JSON, XML 또는 일반 텍스트 형식을 지원합니다. 예: {"userId": 123, "action": "test"}

프레임워크 스크립트 테스트

JMeter, k6 또는 Locust를 사용하는 경우 테스트 스크립트 파일 또는 테스트 스크립트와 지원 파일이 포함된.zip 아카이브를 업로드합니다.

JMeter의 경우 .zip 아카이브 내의 /plugins 폴더에 사용자 지정 플러그인을 포함할 수 있습니다.

Locust의 경우 .zip 아카이브 내의 테스트 스크립트의 이름은 여야 합니다locustfile.py. 실행 시간에 타사 Python 패키지를 컨테이너에 설치하려면 아카이브에 requirements.txt 파일을 포함하고 선택적으로 인터넷 액세스 없이 설치할 휠 파일의 packages 하위 디렉터리를 포함합니다. 자세한 내용은 Locust 테스트를 참조하세요.

중요

표준 모드에서 솔루션은 로드를 제어하고 스크립트가 선언한 내용을 재정의합니다. 테스트 스크립트(JMeter, k6 또는 Locust)는 동시성(가상 사용자), 트랜잭션 속도(TPS), 증가 시간 및 기타 로드 파라미터를 정의할 수 있습니다. 이 솔루션은 트래픽 셰이프 화면에서 지정한 값을 대신 적용합니다. 이 구성은 테스트 실행의 작업 수, 동시성(작업당 가상 사용자 수), 증가 기간 및 대기 기간을 제어합니다.

네이티브 모드에서 스크립트는 로드를 제어하고 솔루션은 프레임워크에 로드 파라미터를 전달하지 않습니다. 두 모드 간의 차이점은 트래픽 셰이프 모드를 참조하세요.

안전 기간(네이티브 모드)

네이티브 모드를 선택하면 콘솔에 스크립트 업로드와 함께 안전 기간 필드가 표시됩니다. 기본값은 4시간이고 최대값은 24시간입니다.

네이티브 모드에서는 스크립트에 따라 실행이 완료되는 시간이 결정되므로 안전 기간이 의도한 것보다 오래 실행되는 테스트를 종료합니다. 일정이 아닌 가드입니다. 기간이 경과할 때 테스트가 계속 실행 중인 경우 솔루션은 테스트 프레임워크를 중지합니다. 실행된 부분에 대한 결과를 유지하고 실행이 실패하지 않고 완료된 것으로 기록합니다. 스크립트에 필요한 가장 긴 실행 이상으로 설정합니다.

3단계: 트래픽 셰이프

다중 리전 지원을 포함하여 테스트 중에 트래픽이 분산되는 방식을 구성합니다.

트래픽 셰이프 모드

이 솔루션은 표준과 기본이라는 두 가지 트래픽 셰이프 모드를 제공합니다. 로드, 즉 솔루션 또는 업로드하는 스크립트를 제어하는 측면이 다릅니다. 2단계: 시나리오 구성에서 모드를 선택하면 아래 필드 중 어떤 필드가 적용되는지 결정됩니다.

참고

네이티브 모드는 버전 4.3.0의 미리 보기 기능입니다. 표준 모드는 기본값이며 솔루션이 항상 사용한 동작입니다.

표준

표준 모드는 솔루션을 로드를 제어합니다. 리전당 Fargate 작업 수, 작업당 동시 가상 사용자 수, 증가 기간 및 대기 기간을 설정합니다. 솔루션은 이러한 값을 기본 프레임워크의 자체 로드 제어로 변환하는 Taurus 자동화 프레임워크를 통해 테스트를 실행합니다. Taurus는 스크립트가 선언한 모든 로드보다 우선하므로 k6 옵션 블록LoadTestShape, Locust 또는 JMeter 스레드 그룹이 다시 작성되거나 무시됩니다. 리전의 가상 사용자는 작업 수에 각 작업의 동시성을 곱한 값이며, 셰이프는 선택한 프레임워크와 동일합니다. 이는 버전 4.3.0 이전에 모든 테스트가 실행된 방식이므로 이전에 생성된 시나리오는 그대로 작동하므로 변경할 필요가 없습니다.

로드 셰이프가 스크립트 외부에 속하고 콘솔, CLI 또는 에이전트에서 설정된 경우 표준을 선택합니다. 표준은 스크립트를 건드리지 않고 정확한 가상 사용자 수를 설정하고 램프 업 및 홀드 셰이프를 변경할 수 있는 유일한 모드입니다. Standard만 솔루션이 테스트 계획을 생성하는 Simple HTTP 엔드포인트 유형을 지원합니다. 일반적으로 500~5,000명의 가상 사용자를 단계별로 검사하는 용량 확인, 10분 동안 1,000명의 사용자를 보유하는 야간 회귀 또는 동일한 램프가 필요한 비교를 사용합니다. 제한은 표현식입니다. 여러 가중치 시나리오, 단계별 임계값, 도착률 실행기를 포함하여 Taurus가 나타낼 수 없는 것은 여기에서 사용할 수 없습니다.

네이티브

네이티브 모드에서는 스크립트가 로드를 제어합니다. 솔루션은 프레임워크의 자체 명령줄인 jmeter -n -t, k6 run또는에서 업로드한 파일을 실행합니다locust --headless. 로드 플래그를 전달하지 않으므로 스크립트는 생성되는 트래픽에 대한 유일한 권한이며 솔루션은 이를 다시 쓰지 않습니다. 리전당 시작할 Fargate 작업 수와 최대 24시간의 필수 안전 기간이라는 두 가지 제어가 남아 있습니다. 안전 기간은 일정이 아니라 종료되지 않는 스크립트에 대한 가드입니다. 기간이 경과할 때 테스트가 계속 실행 중인 경우 솔루션은 프레임워크를 중지하고 실행된 부분에 대한 결과를 수집하며 실행이 실패하지 않고 완료된 것으로 기록합니다. 각 작업은 작업 간 조정 없이 독립 프레임워크 프로세스로 실행되므로 리전은 각 작업에 대해 스크립트의 선언된 로드의 전체 사본을 생성합니다. 예를 들어, 5개의 태스크에서 실행되는 200명의 가상 사용자를 포함하는 k6 스크립트는 1,000명의 가상 사용자를 대상에 배치합니다. 따라서 작업 수는 네이티브가 제공하는 유일한 로드 제어이며 스크립트가 선언하는 모든 항목의 전체 배수로 이동합니다. 램프, 대기 시간 또는 가상 사용자 수 자체를 변경하는 것은 스크립트를 편집하는 것을 의미합니다.

스크립트를 작성된 그대로 실행하려면 네이티브를 선택합니다. 이미 로컬에서 실행되거나 CI에서 실행되는 스크립트는 솔루션에서 변경되지 않고 실행되며, 이것이 네이티브에 도달해야 하는 주요 이유입니다. 네이티브는 프레임워크가 표현할 수 있는 모든 것, 즉 k6 시나리오, 단계 및 임계값, Locust LoadTestShape 클래스 및 가중치 태스크 세트, JMeter 타이머 및 스레드 그룹을 보존합니다. 로드 셰이프가 테스트 의미의 일부인 경우 이를 선택하고, 이를 재현하는 것은 외부에서 조향하는 것보다 더 중요합니다. 일반적인 용도: 파이프라인을 다시 작성하지 않고 파이프라인에서 k6 스크립트 재사용, spike-then-recover 프로파일 또는 단일 동시성 번호가 표현할 수 없는 가중치 기반 시나리오. 프레임워크를 작성된 대로 실행하면 두 가지 제약 조건이 따릅니다. 네이티브에는 업로드된 스크립트가 필요하므로 Simple HTTP 엔드포인트를 사용할 수 없습니다. 솔루션은 Locust가 단일 프로세스로 실행되는 경우에만 요청을 계산processes하므로 Locust 스크립트는를 설정해서는 안 됩니다.

모드 선택

필요한 경우 선택

스크립트 외부에서 설정된 정확한 가상 사용자 수

표준

스크립트를 편집하지 않고 램프 업 또는 대기 시간을 변경하려면

표준

스크립트가 전혀 없는 단일 URL

표준

프레임워크에 관계없이 동일한 로드 셰이프

표준

변경되지 않은 CI 또는 로컬 스크립트를 재사용하려면

기본

스크립트의 자체 스테이지, 임계값 또는 셰이프가 준수됨

기본

k6 시나리오, 임계값 또는 도착률 실행기

기본

Locust LoadTestShape 또는 가중 작업 세트

기본

JMeter 타이머 및 스레드 그룹은 작성된 대로 정확하게 실행됩니다.

기본

스크립트 자체 로드의 전체 배수로만 로드를 조정하려면

기본

다중 리전 트래픽 구성

로드 테스트를 지리적으로 배포할 AWS 리전을 하나 이상 선택합니다. 선택한 각 리전에 대해 다음을 구성합니다.

작업 수

테스트 시나리오를 위해 Fargate 클러스터에서 시작될 컨테이너(작업) 수입니다. 계정이 "Fargate 리소스에 도달" 한도에 도달한 후에는 추가 작업이 생성되지 않습니다. Task Count는 두 트래픽 셰이프 모드 모두에 적용됩니다. 네이티브 모드에서는 각 태스크가 스크립트의 전체 사본을 실행하기 때문에 콘솔이 제공하는 유일한 로드 제어입니다.

동시성

작업당 생성된 동시 가상 사용자 수입니다. 권장 제한은 작업당 vCPUs 2개의 기본 설정을 기반으로 합니다. 동시성은 CPU 및 메모리 리소스에 의해 제한됩니다. 이 필드는 표준 모드에만 적용됩니다. 네이티브 모드에서는 스크립트가 자체 가상 사용자 수를 설정하기 때문에 콘솔에 각 리전에 대해 "스크립트에서 정의"라는 읽기 전용 값이 표시됩니다.

사용자 수 결정

컨테이너가 테스트에 지원할 수 있는 사용자 수는 Amazon CloudWatch에서 사용자 수를 점진적으로 늘리고 성능을 모니터링하여 확인할 수 있습니다. CPU 및 메모리 성능이 제한에 도달하는 것을 관찰하면 컨테이너가 기본 구성(vCPU 2개 및 메모리 4GB)에서 해당 테스트를 지원할 수 있는 최대 사용자 수에 도달한 것입니다.

이 보정은 동시성 값을 설정하므로 표준 모드에 적용됩니다. 설정한 컨테이너 제한은 네이티브 모드에도 적용됩니다. 여기서 동시성 필드를 설정하는 대신 스크립트 선언 로드를 높이거나 낮춥니다.

보정 프로세스

다음 예제를 사용하여 테스트에 대한 동시 사용자 제한을 확인할 수 있습니다.

  1. 사용자가 200명 이하인 테스트를 생성합니다.

  2. 테스트가 실행되는 동안 CloudWatch 콘솔을 사용하여 CPU 및 메모리를 모니터링합니다.

    1. 탐색 창의 Container Insights에서 성능 모니터링을 선택합니다.

    2. 성능 모니터링 페이지의 왼쪽 드롭다운 메뉴에서 ECS 클러스터를 선택합니다.

    3. 오른쪽 드롭다운 메뉴에서 Amazon Elastic Container Service(Amazon ECS) 클러스터를 선택합니다.

  3. 모니터링하는 동안 CPU와 메모리를 관찰합니다. CPU가 75%를 초과하지 않거나 메모리가 85%를 초과하지 않는 경우(일회성 피크 무시) 사용자 수가 많은 다른 테스트를 실행할 수 있습니다.

테스트가 리소스 제한을 초과하지 않은 경우 1~3단계를 반복합니다. 선택적으로 컨테이너 리소스를 늘려 동시 사용자 수를 늘릴 수 있습니다. 그러나 이로 인해 비용이 더 많이 듭니다. 자세한 내용은 개발자 안내서를 참조하세요.

참고

정확한 결과를 얻으려면 동시 사용자 제한을 결정할 때 한 번에 하나의 테스트만 실행합니다. 모든 테스트는 동일한 클러스터를 사용하며 CloudWatch 컨테이너 인사이트는 클러스터를 기반으로 성능 데이터를 집계합니다. 이로 인해 두 테스트가 CloudWatch Container Insights에 동시에 보고되어 단일 테스트에 대한 리소스 사용률 지표가 부정확해집니다.

엔진당 사용자 보정에 대한 자세한 내용은 BlazeMeter 설명서의 타우루스 테스트 보정을 참조하세요.

참고

솔루션은 각 리전에 사용 가능한 용량 정보를 표시하므로 사용 가능한 한도 내에서 테스트 구성을 계획하는 데 도움이 됩니다.

사용 가능한 작업 테이블

사용 가능한 작업 테이블에는 선택한 각 리전의 리소스 가용성이 표시됩니다.

  • 리전 - AWS 리전 이름입니다.

  • 작업당 vCPUs - 각 작업에 할당된 가상 CPUs 수(기본값: 2).

  • DLT 작업 제한 - 계정의 Fargate 온디맨드 vCPU 할당량을 기반으로 생성할 수 있는 최대 작업 수입니다. 새 계정의 할당량은 일반적으로 더 낮습니다. Service Quotas 콘솔에서 현재 한도를 확인하고 필요한 경우 증가를 요청합니다.

  • 사용 가능한 DLT 작업 - 리전에서 사용 가능한 현재 작업 수로, DLT 작업 한도에서 Fargate 작업을 실행하여 이미 사용 중인 vCPUs를 뺀 값으로 계산됩니다.

작업당 사용 가능한 작업 또는 vCPUs 수를 늘리려면 개발자 안내서를 참조하세요.

테스트 기간

로드 테스트가 실행되는 기간을 정의합니다. 콘솔에는이 섹션이 표준 모드로만 표시됩니다. 네이티브 모드에서 스크립트는 2단계: 시나리오 구성에서 설정한 안전 기간에 따라 테스트 실행 기간을 결정합니다.

램프 업

대상 동시성에 도달하는 시간입니다. 이 기간 동안 로드가 0에서 구성된 동시성 수준으로 점진적으로 증가합니다.

에 대해 보류

대상 로드를 유지하는 기간입니다. 테스트는이 기간 동안 완전한 동시성으로 계속됩니다.

4단계: 검토 및 생성

테스트 시나리오를 생성하기 전에 모든 구성을 검토합니다. 다음을 확인합니다.

  • 일반 설정(이름, 설명, 일정).

  • 시나리오 구성(테스트 유형, 엔드포인트 또는 스크립트).

  • 트래픽 셰이프(모드, 작업, 사용자, 기간, 리전).

검토 후 생성을 선택하여 테스트 시나리오를 저장합니다.

테스트 시나리오 관리

테스트 시나리오를 생성한 후 다음을 수행할 수 있습니다.

  • 편집 - 테스트 구성을 수정합니다. 일반적인 사용 사례는 다음과 같습니다.

    • 원하는 트랜잭션 속도를 달성하기 위해 트래픽 셰이프를 구체화합니다.

  • 복사 - 기존 테스트 시나리오를 복제하여 변형을 생성합니다. 일반적인 사용 사례는 다음과 같습니다.

    • 엔드포인트 업데이트 또는 헤더/본문 파라미터 추가.

    • 테스트 스크립트 추가 또는 수정.

  • 삭제 - 더 이상 필요하지 않은 테스트 시나리오를 제거합니다.