용어정리
- 성능 테스트(Performance Test)
시스템이 특정 상황에서 어느 정도 수준의 성능을 보이는지 확인하는 테스트입니다.
성능 테스트는 시스템의 결함을 찾는 것이 아니기 때문에
성공과 실패의 개념으로 결과를 분석하지 않습니다.
현재 시스템의 정확하고 면밀한 객관적인 데이터를 확보해서
성능에 대한 현재 상황을 이해하는 것이 중요합니다.
예를 들면, 특정 시나리오 상황에서의 API의 평균 처리 속도를 파악하는
테스트를 성능 테스트로 볼 수 있습니다. - 부하 테스트(Load Test)
임계 값 한계에 도달하는 순간까지 시스템의 부하를
지속적으로 증가하면서 진행하는 테스트입니다.
보통 LoadRunner 등의 테스트 도구를 활용해서
다양한 부하 시나리오를 설정하고,
강도를 지속적으로 증가하면서 결과를 확인합니다.
이 테스트의 목적은 부하를 증가시키면서 생기는
다양한 시스템의 한계를 찾아내는 것이 목표입니다.
버퍼 오버플로우, 메모리 누수, JVM의 Garbase Collection 동작 확인,
DB 병목점 확인 등을 생각하면 됩니다.
각 상황에서의 최대 상한 값을 확인해서
각각의 시나리오에 대한 계획을 세우는 것이 최종 목표입니다.
예를 들면, 서비스 오픈 이벤트를 대비한 최대 부하 확인,
무료 경품 이벤트로 인한 시스템 부하 대비 등을 위해 진행하는 테스트로 적절합니다. - 스트레스 테스트(Stress Test)
시스템이 과부하 상태에서 어떤 동작을 보이는지 확인하는 테스트입니다.
과부하 상태에서 모니터링 도구는 정상적으로 동작하는지,
시스템의 Failover는 적용되는지, SPoF 혹은
보안 상의 문제가 존재하는지 등을 확인한다.
예를 들면, 시스템 과부하 상태에서 모니터링의 알림이 잘 오거나
시스템의 Auto Scaling 계획이 잘 동작하는지 등을 확인하는 테스트로 적절하다.
부하 테스트(Load Test)
부하 테스트는 성능 테스트와 성능 튜닝이 어느 정도 완성되면
해당 소프트웨어 혹은 서비스를 대표할 수 있는 기능을 선정하여
설정된 하드웨어 및 네트워크 환경에서얼마나 많은 사용자가
동시에 사용할 수 있는지 테스트하는 것을 말합니다.
서비스가 실행 및 테스트가 성공적으로 진행되어도
많은 사람이 여러 요청을 하는 경우 부하의 한계를 파악하기가 힘듭니다.
실제로 그러한 장애 상황이 오는 것을 대비하기 위해서라도
서비스의 부하테스트를 해보는 작업이 필요합니다.
1. 실제 내가 만든 API의 기능이 최대 몇명의 인원까지 버틸 수 있는가?
2. 현재 DB가 버틸 수 있는 트랜잭션의 양이 어느정도인가?
3. 현재 프레임워크에서 처리속도를 유지 할 수 있는 요청양은 어디까지인가?
이러한 부분에 대한 수치화를 통해서 확인을 통해서
서비스에 대해 장애상황을 시뮬레이션 하는것이 가능해집니다.
스트레스 테스트와 부하 테스트
성능테스트와 부하테스트의 의미를 명확하게 파악하면,
그에 맞는 성능테스트 방식을 적절하게 선택할 수 있습니다.
스트레스 테스트
CPU, RAM, DISK의 환경이 갖추어지지 않은 어플리케이션에
비정상적으로 높은 부하를 발생시켜 한계점을 테스트해보는 것을 말합니다.
실제로 이러한 부하가 발생시키면 VM서비스의 다운,
데이터의 소실 등의 시스템레벨의 오작동을 유발 시키는 것이 가능합니다.
이러한 결점을 찾는 것을 목표로 스트레스 테스트가 진행됩니다.
시스템레벨에서의 결함을 예상하는 수준으로 결과물을 파악하는 것이 중요하며,
실접속자가 발생시키는 부하량과는 매우 다른 케이스를 가질 수도 있다는 점을 유의해야 합니다.
부하 테스트
적절한 부하를 발생시켜서 통계적으로써 의미있는 수치를 측정합니다.
1. 장시간의 서비스 진행여부를 확인하는 신뢰성 테스트
2. 실체 처리능력을 가늠하는 성능테스트
부하라는 것은 매우 포괄적이므로,
부하테스트에 사용되어지는 부하의 모든 의미를 내포하는 것으로 이해하면 됩니다.
부하테스트를 위해 만들어진 도구
JMeter
Apache에서 제공하는 어플리케이션으로, java로 이루어진
오픈소스의 성능테스트 도구입니다.
테스트케이스를 스크립트화하는 기능이 따로 있진 않지만,
레코딩 기능을 지원해주고, UI를 통해 다양한 부하테스트를 시도하는 것이 가능합니다.
JMeter 장점
- 복잡하고 디테일한 부하테스트가 가능하고, 다양한 프로토콜을 혼용하여 사용 가능합니다.
- 기능적으로 스크립트 레코딩(script recording)이 가능합니다.
- 램프업 패턴에 대한 시뮬레이션이 가능합니다
- UI를 통한 테스트 프로그램의 작성이 가능하기 때문에,
locust보다 언어적인 요구사항이 낮습니다
하지만 사용성은 다양한 기능을 제공해 주는 만큼 더 어렵습니다
램프업 패턴
초기 서비스의 사용율이 비주기적으로 등락하는 현상
locust
해당 어플리케이션은 python스크립트 코드로 테스트를 할 수 있습니다.
python pip 패키지 관리자를 통해 정말 간단하게 설치가 가능하며,
"부하 테스트를 스크립트화"가 가능한 것이 가장 큰 메리트입니다.
locust의 장점
- 부하테스트용 수행 스크립트를 빠르게 작성해서 테스트가 가능합니다.
- 버전관리에 해당 스크립트를 함께 관리하면서
다른 환경에서의 부하테스트도 편하게 할 수 있습니다. - GUI환경이 없어도 되기 때문에 테스트 시 최소한의 리소스가 소요됩니다.
- 로컬환경에서 외적인 자원 필요없이
많은 유저가 서비스를 사용하는 상황을 가정한 테스트가 가능합니다.
JMeter와 Locust 차이점
도구 | JMeter | Locust |
테스트 작성 속도 | 느리다 | 빠르다 |
지원 프로토콜 | HTTP, IMAP, FTP등 서비스에 필요한 다양한 프로토콜로 테스트가 가능합니다. |
HTTP를 기본적으로 지원하지만 외부 플러그인을 통해 다른 프로토콜 테스트도 충분히 가능합니다. |
코드를 통한 테스트 작성 |
작성이 가능하지만, 매우 복잡하고 참고 문서가 없습니다. |
파이썬기반으로 스크립트 작성이 용이하고, 형상관리가 편리합니다. |
부하테스트 모니터링 |
모니터링 지원 | 모니터링 지원 |
최대 쓰레드 수 | 수천개 (리소스 제약이 매우 심합니다.) | 수천개 (코드레벨에서 쓰레드를 생성합니다.) |
참고자료
용어정리
https://azevedorafaela.com/2020/05/23/load-tests-locust-vs-jmeter/
jmeter vs locust
https://azevedorafaela.com/2020/05/23/load-tests-locust-vs-jmeter/
부하테스트
'프로젝트 > 프로젝트 관련' 카테고리의 다른 글
Spring Security 구현방식 (0) | 2022.01.24 |
---|---|
Docker Compose (0) | 2022.01.09 |
Web Server와 Web Application Server(WAS) (0) | 2022.01.06 |
Forward Proxy, Reverse Proxy, Load Balancer (0) | 2021.12.29 |
JUnit이란? 단위, 통합, 기능 테스트란? (0) | 2021.12.28 |