부하 테스트와 스트레스 테스트의 차이점이 헷갈려서 정리하는 글이다.
어플리케이션 실행 시 필요로 하는 리소스의 허용하는 한도를 넘어서서 비정상적인 높은 부하를 발생시켜보는 테스트를 말한다.
일정 한도를 넘어서는 부하 상항이 되면 시스템의 비정상적인 작동이 유발될수도 있는데 이와 같은 결점(Bug)이나 결함(Failure)을 찾기 위해 스트레스를 가해보는 것이다.
스트레스 테스트 시의 부하는 시스템의 한계점을 시험하려는 의도이기 때문에 의도적으로 왜곡되는 경향이 있으며 실제 접속자에 의해 발생하는 부하량 패턴과는 거리가 멀 가능성이 높다.
시스템에서 구성 요소를 제거하는 작업도 스트레스 테스트의 일부로 수행(네거티브 테스트).대역폭 용량을 넘을 정도로 테스트하여 애플리케이션의 안정성을 포착해야 함(피로 테스트).
스파이크 테스트: 사용자 수가 갑자기 증가하는 상황에서 시스템이 어떻게 작동하는지 확인.
흡수 테스트 : 사용자 수의 느린 증가를 통해 일정 기간 동안 시스템의 지속 가능성을 확인.
부하 테스트는 적절한 부하를 발생시켜서 통계적으로 의미있는 수치를 측정하는 테스트를 말한다.
부하 테스트는 시스템이 다양한 부하 테스트 시나리오에서 페이지에 대해 수신된 응답 시간을 테스트하여 성능 병목 현상을 해결하는데 도움이 될 수 있으며, 사용 중인 인프라가 예상 부하를 견딜 수 있는지 판단하는데 도움이 될 수 있다.
부하 테스트 환경 구축
부하 테스트 시나리오 정의
예시) 동시에 웹 페이지를 보는 40명의 사용자의 로드 시간이5초를 초과하지 않는지?
정의된 테스트 시나리오에 따른 부하 테스트 수행
테스트 완료 후, 부하 테스트 결과를 통해 시스템 성능 분석 및 테스트 성공/실패 판정
결과가 테스트의 성공/실패 여부를 판단하기 어려울 경우, 부하 테스트 재실행
이때, 응답 시간, 통과 또는 실패한 트랜잭션 수, 통과 또는 실패한 트랜잭션 수, 메모리 사용률, 평균 대기 시간 및 CPU 사용률은 시스템에 대한 부하 테스트 수행의 결과로써 우선적으로 최적화해야 하는 주요 지표로 사용된다.
부하 테스트는 시스템의 성능을 개선하기 위한 목적으로 사용되며, 이를 위해 부하는 애플리케이션의 성능이 악화되기 시작하는 임계치를 정확히 찾아내기 위해 전략적으로 조작된다.
그러나, 스트레스 테스트는 시스템이 극한의 조건에서 한계점에 도달했을 때, 애플리케이션의 동작을 확인하기 위한 테스트로써, 임계치 이상의 부하가 발생했을 때, 시스템의 복구 절차 또는 보안 허점을 감지하기 위해 주로 사용된다.
또한, 부하 테스트는 응답 시간을 측정하면서 전체 환경과 데이터베이스까지 성능을 측정하는 반면, 스트레스 테스트는 식별된 트랜잭션에 대해서만 기능이 동작하지 않을 때까지 부하를 발생시켜 시스템 동작의 안정성을 확인한다.
구분 | 부하 테스트 | 스트레스 테스트 |
---|---|---|
테스트 목적 | 전체 시스템의 성능 확인 | 중단점에서의 동작, 복구 가능성 |
주요 성능지표 | 동시 사용자 수, 초당 트랜잭션 | 동시 사용자 수, 메모리, CPU, 네크워크 등 |
테스트 대상 | 전체 시스템 | 식별된 트랜잭션에만 집중 |
테스트 완료 시기 | 예상 부하가 모두 적용되었을 경우 | 시스템 동작이 중단되었을 경우 |
보안성 확인 | 불가능 | 가능 |
성능을 측정한다는 것은 점진적인 부하량 증가 과정에서 더 이상 단위시간당 최대 처리량(TPS)이 증가하지 않을 때, 그 때의 수치를 측정하고 그 수치를 해석하는 과정을 의미한다.
성능 테스트 과정에서 중요한 부분은 목표 성능을 설정하고 그러한 목표 성능을 확인/측정하기 위해 향후 시스템 운영 중에 실제로 발생할 사용자의 호출 패턴이 어떨지를 분석/추정하는 과정이 필요하다는 것이다.
이를 바탕으로 점진적인 부하를 발생시켜야 의미있는 성능 테스트 결과를 도출할 수 있다.
그렇지 않으면 성능 테스트가 아닌 스트레스 테스트로 끝나버리고 만다.
성능을 평가하기 위한 상위 지표에는 페이지 응답시간, 네트워크 응답성, 서버 요청 처리속도 및 메모리 소비 패턴이 포함된다.
이러한 종류의 테스트는 사용량이 갑자기 급증하는 동적 시스템을 개발하기 위한 매우 중요한 요소이다.
포괄적인 성능 테스트로 감지할 수 있는 일반적인 문제에는 긴 시스템 로드 시간, 느린 응답 시간, 동시 사용자 수를 감당하기에 어려운 환경 등이 있다. 또한 성능 테스트는 하드웨어 문제 및 코딩 문제와 같은 병목 현상을 제거하는 데 도움이 된다.