본문 바로가기

카테고리 없음

부하 테스트란, 부하 테스트의 종류 Load Test By k6

1. Load Testing

Performance testing != Load testing

Performance testing는 확장성, 탄력성, 가용성, 안정성, 복원력, 지연 시간 등 시스템이 전반적으로 얼마나 잘 작동하는지를 검증합니다. 부하 테스트는 성능 테스트의 한 유형일 뿐이며 애플리케이션 성능의 여러 측면을 테스트하는 데 사용할 수 있는 접근방식 중 하나입니다. 모든 성능 테스트에 부하 테스트가 포함되는 것은 아닙니다.

 

부하 테스트는 특히 처리해야할 작업의 볼륨이 많은 어플리케이션에 대한 성능을 확인하고 검증하는데 중점을 둡니다. 수동으로 수행할 수도 있지만 대부분의 팀은 자동화된 부하 테스트 스크립트를 작성하여 애플리케이션에 액세스하는 실제 사용자를 프로그래밍 방식으로 시뮬레이션 합니다.


2. Test Parameter

부하 테스트 스크립트를 작성할 때는 생성할 부하 양 외에도 여러가지 요소를 고려해야 합니다. 이런 요소는 파라미터를 통해 부하의 분포, 모양 및 패턴을 결정합니다.

 

다음은 일반적으로 많이 사용 파라미터입니다.(더 많은 파라미터가 존재합니다.) 

  • VU(Virtual users): VU는 다른 VU 스레드들과 동시에 실행되는 독립적인 스레드입니다. 보통 스크립트를 작성할 때 VU 1명은 1명의 유저의 활동을 나타내는 방식으로 설계합니다.
  • Iterations: VU에 의해 실행되는 스크립트의 전체 반복 횟수를 의미합니다.
  • Throughput: 테스트가 시간 경과에 따라 얼마나 많은 부하를 생성하는지에 대한 측정값으로, 일반적으로 초당 VU, 초당 요청 또는 초당 반복으로 정의됩니다.
  • User flows: 스크립트가 수행하는 작업과 스크립트가 실행되는 순서입니다. 보통 애플리케이션을 통한 실제 사용자의 경로를 나타냅니다.
  • Load profile: 시간 경과에 따라 테스트에서 생성된 트래픽의 형태입니다. 지연 횟수, 시간에 따라 테스트가 점차적으로 VU의 양을 늘리거나 줄이는 램프업, 램프타운 시간, 테스트의 stage를 포함합니다.
  • Duration 전체 테스트와 각각의 stage가 실행되는 시간입니다.

3. Load test scenarios

부하 테스트 시나리오는 테스트 파라미터의 특정 값들을 결합해서 만들어 집니다. 각 시나리오는 애플리케이션이 노출될 특정 상황 또는 조건들을 재현해 구현합니다.

 

Shakeout test

smoke test라고도 불리는 shakeout test는 더많은 시간과 자원을 쓰기전에 주요한 문제를 확인하는 소규모 테스트입니다. shakeout test는 일반적으로 짧은 시간동안 실행되는 하나 또는 몇개의 VU를 사용하여 다음과 같은 주요 문제를 확인합니다.

  • 테스트 결과의 정확성에 큰 영향을 미칠 수 있는 스크립트 관련 문제
  • 예기치 않은 환경 configuration
  • 낮은 부하에서도 발생하는 심각한 애플리케이션 성능 병목 현상

만약 shakeout test 가 실패하면, 테스트의 throughput을 증가시키 전에 모든 문제를 먼저 해결해야 합니다. shakeout test는 또한 여러 시나리오로 구성될 수 있습니다.

 

Average Load Test

이 시나리오는 프로덕션에서 보통의 평균적인 사용자의 워크로드를 시뮬레이션합니다. 시나리오는 시간 내에 빈도높게 실행된 요청이나 기능을 포함합니다.

 

이 테스트 시나리오는 일반적으로 사용자가 점진적으로 로그인하고 시스템과 상호 작용하는 것을 시뮬레이션하기 위한 램프업 및 ramp-up과 ramp-down 기간을 포함합니다. 때문에, 프로덕션의 평균 부하 동작을 모방하기 위해 원하는 부하에 도달할 때까지 VU 수를 점차적으로 늘려나갑니다.

 

ramp-up 과 ramp-down 사이에는 VU의 수가 변하지 않는 평탄한 상태의 구간이 있다. Average load test는 이 상태의 부하 시뮬레이션을 1시간 정도 지속합니다. (VU의 수뿐만 아니라, 테스트가 생성하는 초당 반복 횟수 또는 요청 수로도 테스트를 수행할 수 있습니다. 자세한 내용은 Setting load profiles with executors를 참조하세요.)

 

Stress test

peak load test라고도 불리는 Stress test는 어플리케이션이 하루나 계절 중 가장 높은 시점에 발생할 것으로 예상되는 트래픽을 시뮬레이션합니다. average load test가 일주일, 한 달 또는 그 이상에 걸쳐 집계된 일반적인 날의 트래픽 시뮬레이션하는 반면, 스트레스 테스트는 애플리케이션이 경험하는 가장 많은 트래픽에 초점을 맞춥니다.

 

stress test는 average lad test와 형태는 비슷하지만, 보통 훨씬 높은 테스트 throughput을 생성해냅니다. 보통 정상 시간에는 100명의 사용자가 접속하지만, 점심 시간에는 300명의 사용자가 접속하는 애플리케이션을 예로 들어보겠습니다. 이 어플리케이션은 300VU 수준의 스트레스 테스트를 통해 테스트하는 것이 도움될 수 있습니다.

 

때문에 stress test는 애플리케이션에 비정상적으로 만흥ㄴ 부하가 걸리는 출퇴근 시간대나 세일 기간을 테스트할 때 좋은 테스트 시나리오입니다.

 

Soak or Endurance Test

endurance test라고도 불리는 Soak tests는, averge test나 peak test보다 더 긴 기간동안 이뤄지는 테스트입니다. 메모리 관리 결함으로 인한 병목과 같은 몇가지 성능 병목 현상은 오랜 기간동안 운영시에만 나타날 수 있습니다. 때문에 Soak test는 시간이 지남에 따라 성능이 저하되는지 여부를 확인합니다.

 

이 시나리오는 average load test와 비슷한 수준의 처리량을 갖는 경향이 있지만, 애플리케이션에 따라 몇 시간 또는 며칠까지 연장될 수 있습니다.

 

Spike Test

앞에서 설명한 테스트들은 모든 부하가 점진적으로 가해지는 상황이나 소량의 부하가 실행되는 상환만을 재현했습니다. 반면에 Spike테스트는 어플리케이션이 경험하는 갑작스러운 대규모 트래픽 증가 상황을 재현합니다.

 

Spike test들은 짧은 시간에 갑자기 트래픽이 높아지는 구간의 어플리케이션의 퍼포먼스를 확인할 수 있습니다. 때문에 다음과 같은 시간 이벤트를 시뮬레이션하기 좋습니다.

  • 수퍼볼 광고와 같은 눈에 띄는 제품 발표
  • 새 제품 출시 또는 콘서트 티켓 판매
  • 마감일(세금 제출 마감일과 같은)
  • 세일 시즌 오픈날짜(블랙프라이데이 같은)

Spike test는 높은 처리량과 짧은 정상상태(steady-state)를 갖습니다. 일반적으로 ramp up과 ramp down 구간은 무시할 수 있을정도로 짧습니다.

 

다른 시나리오들과의 또다른 차이는 테스트하는 user flows를 선택한다는 점입니다.  다양한 보통의 day to day 프로세스 대신에, spike test는  보통 하나의 사용자 흐름에 우선순위를 둡니다. 예를 들어 티켓세일 이벤트라는 상황을 가정하면, 유저들은 다른 페이지를 탐색하는 대신 티켓 구매에 집중할 것입니다.

 

Breakpoint Test

위의 부하테스트 유형들이 실제적이고 예측가능한 production 부하를 시뮬레이션하는 반면 breakpoint test는 한 단계 더 나아가 시도합니다. 어떤 breakpoint test는 성능 저하가 시작되는 트래픽 수준을 파악하기 위해 애플리케이션을 비연속적으로 증가하는 부하에 노출시킵니다.

 

이를 통해 시스템의 처리 능력에 대한 신뢰를 구축합니다. 테스트의 결과는 시스템의 capacity를 결정하는데에 유용한 결과를 제공합니다. 

 

또한 breakpoint test는 다른 시나리오보다 ramp-up구간을 더욱 중점적으로 테스트합니다. 점진적인 증가로만 구성될 수도 있고, 증가 구간과 정상상태(steady-state)구간으로 나누어 구성될 수 도 있습니다. 이렇게 두가지로 나누어 테스트하면 특정 부하 수준에서 시스템이어떤 패턴에서 성능저하가 일어나는지 상관관계를 파악하는데 도움이 될 수 있습니다.

 

한편 breakpoint test는 본질적으로 탐색적 성격이 강하기 때문에, 테스터는 얼마나 많은 최대 VU가 실행될지 또는 테스트가 얼마나 오래 시속될지 미리 알 수 없습니다. 그래서 테스트할 때 팀은 일반적으로 애플리케이션을 면밀히 모니터링하고 테스트를 수동적으로 중지하거나 특정 임계값을 초과하면 중지하도록 프로그래밍합니다.

 

 


출처:

https://github.com/grafana/k6-learn/blob/main/Modules/I-Performance-testing-principles/03-Load-Testing.md

 

GitHub - grafana/k6-learn

Contribute to grafana/k6-learn development by creating an account on GitHub.

github.com