devFancy BE Developer

성능 테스트, 부하 테스트, 스트레스 테스트란

2024-01-21
devFancy

성능 테스트

성능 테스트는 특정 상황에서 시스템의 구성 요소가 어떻게 수행되는지 확인하기 위해 수행되는 테스트이다. 또한 이 테스트를 통해 제품의 리소스 사용량, 확장성 및 신뢰성을 확인할 수 있다. 이 테스트는 소프트웨어 제품의 설계 및 아키텍처에서 성능 문제를 해결하는 데 중점을 둔 성능 엔지니어링의 하위 집합이다.

위의 이미지는 성능 테스트가 부하 및 스트레스 테스트 모두에 대한 상위 집합이라는 것을 명확하게 설명한다. 성능 테스트에 포함된 다른 유형의 테스트는 스파이크 테스트, 볼륨 테스트, 내구성 테스트 및 확장성 테스트가 있다. 따라서 성능 테스트는 기본적으로 광범위한 용어이다.

성능 테스트의 주요 목표에는 시스템의 벤치마크 동작을 설정하는 것이 포함된다. 성능 테스트는 애플리케이션의 결함을 찾는 것을 목표로 하지 않고, 애플리케이션의 벤치마크 및 표준을 설정하는 중요한 작업을 처리한다. 그래서 실제 트래픽 상황에서 정상적으로 동작되는지, 애플리케이션/시스템 성능에 대한 모니터링이 성능 테스트의 주요 특성을 의미한다.

성능 테스트는 속도(speed), 응답 시간(response time), 처리량(throughput), 자원 사용량(resource usage), 안정성(stability) 등의 속성을 기준으로 애플리케이션의 벤치마크와 표준을 설정해야 하고, 이 모든 속성을 테스트한다.

성능 테스트는 다음과 같은 상황에서 주로 사용된다.

  • 실제 트래픽 상황에서의 정상 동작

  • 기존 시스템 대비 BenchMarking

성능 테스트 지표

성능 테스트는 가용성과 서비스에서 설정한 목표치를 달성하기 위해서이다.

가용성이란 시스템이 서비스를 정상적으로 제공할 수 있는 상태를 말한다.

  • 예를 들어, 초당 1000건의 요청 처리로 모든 조회 요청을 1초 이내로 응답하는지 -> 배포 전 성능 테스트를 통해 목표치를 만족하는지 확인한다.

성능 테스트를 확인하기 위해 대표적으로 확인해야할 지표는 처리량(throughput), 응답 시간(response time)이다.

  • 초당 1000건의 요청 처리 - 처리량(throughput)

  • 모든 조회 요청을 1초 이내로 응답 - 응답 시간(response time)

처리량

처리량초당 처리하는 작업의 수를 의미한다. 일반적으로 RPS(Request Per Second)라고 많이 부르는데, 이는 1초에 처리하는 HTTP 요청의 수를 의미한다.

  • 처리량은 서브 시스템중 가장 처리량이 낮은 부분으로 계산한다.

  • 예를 들어, 클라이언트 <-> Nginx 가 500rps, Nginx <-> Tomcat 이 200 rps, Tomcat <-> MySQL 이 100 rps가 있다고 가정했을 때

  • Tomcat <-> MySQL 이 해당한다고 보면 된다. 이는 병목 구간으로 말한다. (병목 구간은 하위 시스템 중 가장 낮은 처리량을 가지는 부분이다)

응답 시간

응답 시간시스템이 요청을 받고 응답할 때까지의 시간을 의미한다. 시스템이 요청을 처리할 때 까지 대기하는 시간도 응답 시간에 포함된다.

  • 응답 시간은 각 서브 시스템 응답 시간의 총합으로 계산한다.

  • 예를 들어, 클라이언트 <-> Nginx 가 500rps, Nginx <-> Tomcat 이 200 rps, Tomcat <-> MySQL 이 100 rps가 있다고 가정했을 때

  • 응답 시간은 750ms (150ms + 500ms + 100ms)으로 어떤 부분을 개선하더라도 총 시스템 응답 시간에 영향을 주게 된다.

성능 테스트 지표의 상관관계

처리량과 응답 시간을 정리하면 다음과 같다.

  • 처리량: 초당 처리하는 작업의 수

  • 응답 시간: 시스템의 요청 처리 시간

둘 지표간에는 상관관계를 가지고 있다.

  • 처리량을 개선한다면 짧은 대기 시간으로 응답 시간을 개선하게 되고, 응답시간을 개선한다면 요청을 빠르게 처리하여 처리량을 개선하게 된다.

성능 테스트에는 다양한 테스트가 있는데, 그 중에서 부하 테스트와 스트레스 테스트를 알아보고자 한다.

부하 테스트

부하 테스트는 성능 테스트의 하위 집합으로, 임계값에 도달할 때까지 시스템의 부하를 지속적으로 꾸준히 증가시켜 시스템을 테스트하는 것을 의미한다.

부하 테스트의 유일한 목적은 시스템이 감당할 수 있는 가장 큰 작업을 할당하여 시스템의 내구성을 시험하고 결과를 모니터링하는 것이다. 부하 테스트에서 모니터링되는 속성에는 최대 성능, 서버 처리량, 다양한 부하 레벨에서 응답 시간, H/W 환경의 적정성, 성능에 영향을 주지 않고 처리할 수 있는 사용자 애플리케이션 수 등이 포함된다.

부하 테스트의 목표는 애플리케이션과 데이터베이스 등의 최대 성능을 파악하는 것이다.

부하 테스트는 다음과 상황에서 사용된다.

  • 리소스 병목 탐색, 애플리케이션

  • 이벤트 상황과 같은 순간 트래픽 최대치, 한계치를 탐색

  • 신규 스펙 장비에서 MYSQL 설정 최적화 탐색

스트레스 테스트

스트레스 테스트에서는 기존 자원에 초과 작업으로 과부하를 주는 다양한 활동을 수행하며 시스템을 무너졌을 때 어떤 동작을 보이는지 확인하는 테스트이다.

스트레스 테스트의 목적은 시스템의 고장을 확인하고 시스템이 어떻게 정상적으로 복구되는지를 모니터링 하는 것이다. 따라서 스트레스 테스트는 최대 부하 및 정상 조건을 넘어서는 애플리케이션의 동작을 평가한다. 이러한 스트레스 테스트는 피로 테스트라고도 불린다.

스트레스 테스트의 목표는 시스템이 망가진 후에 애플리케이션이 어떻게 동작을 정의하는 것이다. 가장 중요한 점은 시스템이 장애 발생 후 중요한 데이터를 손상시키지 않도록 하는 것이다. 스트레스 테스트를 통해 가장 이상적인 시스템은 극도의 부하가 발생한 이후에도 모든 구성 요소와 함께 정상 상태로 복귀하는 것이다.

스트레스 테스트는 다음과 같은 상황에서 사용된다

  • 장기간 부하 발생에 대한 한계치를 탐색, 예외 동작 상황 확인

  • 데이터베이스 failover 상황, 자동 복구, 예외 동작 상황 확인

  • 외부 요인(PG사)의 예외 상황 동작 확인

Reference


Comments

Index