부하테스트 개념, 툴
근데 부하테스트, 스트레스 테스트, 성능 테스트가 어떤 점이 다른지 정확히 모르고 있어서 짚고 넘어가보자
개념 비교
성능테스트
- 정상적인 조건에서 시스템의 성능을 평가
- 응답 시간, 처리량 등 전반적인 성능 지표를 측정
- 부하테스트와 스트레스테스트를 포함하는 상위 개념
부하테스트
- 예상되는 실제 사용자 부하 하에서 시스템의 성능을 평가
- 예상되는 최대 부하 조건에서 시스템의 성능을 평가
- 시스템이 정상적으로 작동하는 최대 부하(최대 사용자 수나 트랜잭션 수)를 확인
- 적절한 부하를 발생시켜서 통계적으로써 의미있는 수치를 측정한다.
- 장시간의 서비스 진행여부를 확인하는 신뢰성(reliability)
- 실체 처리능력을 가늠하는 성능테스트(Performance)
- "부하"라는 것은 매우 포괄적이므로, 부하테스트에 사용되어지는 부하의 모든 의미를 내포하는 것으로 이해하는 것이 좋다.
스트레스테스트
- 시스템의 한계를 넘어서는 극단적인 부하 상황에서의 동작을 평가
- 시스템이 붕괴되는 지점을 찾고 복구 능력을 테스트
- 과부하 상황에서의 시스템 동작과 복구 능력을 테스트
- CPU, RAM, DISK의 환경이 갖추어지지 않은 어플리케이션에 비정상적으로 높은 부하를 발생시켜 한계점을 테스트해보는 것을 말한다.
- 실제로 이러한 부하가 발생시키면 VM서비스의 다운, 데이터의 소실 등의 시스템레벨의 오작동을 유발 시키는 것이 가능하다.
- 이러한 결점과 결함점을 찾는 것을 목표로 스트레스 테스트가 진행되어진다.
- 어디까지나 시스템레벨에서의 결함을 예상하는 수준으로 결과물을 파악하는 것이 중요하며, 실접속자가 발생시키는 부하량과는 매우 다른 케이스를 가질 수도 있다는 점을 유의한다.
구분 | 부하 테스트 (Load Test) | 스트레스 테스트 (Stress Test) |
부하 수준 | 예상되는 최대 부하 또는 그에 가까운 수준의 부하 적용 | 시스템의 한계를 초과하는 극단적인 부하 적용 |
테스트 기간 | 일반적으로 장시간 동안 지속적인 부하 적용 | 짧은 시간 동안 급격한 부하 증가 적용 |
결과 분석 | 응답 시간, 처리량, 리소스 사용률 등의 성능 지표 분석 | 시스템 오류, 데이터 손실, 보안 취약점 등 극한 상황에서의 시스템 동작 분석 |
실제 사용 사례 | 온라인 쇼핑몰에서 블랙프라이데이와 같은 대규모 세일 기간 동안의 예상 트래픽 시뮬레이션 | DDoS 공격과 같은 예기치 못한 극단적 상황에서 시스템의 동작 테스트 |
구분 | 부하 테스트 (Load Test) | 스트레스 테스트 (Stress Test) | 성능 테스트 (Performance Test) |
---|---|---|---|
목적 | 시스템이 예상된 부하(사용량)에서 정상적으로 동작하는지 확인 | 시스템이 한계치 이상에서 어떻게 반응하는지 확인 | 시스템의 전반적인 성능(응답 속도, 처리량 등)을 측정 |
테스트 환경 | 예상되는 사용자 수나 요청량을 시뮬레이션 | 극한의 트래픽과 부하를 가해 시스템이 언제, 어떻게 실패하는지 분석 | 다양한 성능 지표(응답 시간, Throughput 등)를 분석 |
주요 지표 | 응답 시간, 처리량, CPU/RAM 사용량 | 장애 발생 지점, 시스템 복구 시간 | 처리량(Throughput), 응답 속도, 자원 사용률 |
예제 | 웹사이트에 동시 접속자 1000명이 있을 때 응답 속도가 일정한지 확인 | 웹사이트에 예상보다 훨씬 많은 트래픽을 가할 때 시스템이 다운되는지 테스트 | API의 응답 시간이 특정 기준을 초과하는지 측정 |
부하 테스트 (Load Testing) 설명
주요 목적
- 성능 병목 지점 식별
- 시스템 용량 계획 수립
- 사용자 경험 개선
- 예상된 트래픽 수준에서 시스템이 정상적으로 동작하는지 확인
- 서버의 응답 시간과 처리량(Throughput)을 측정
- 특정 트랜잭션이 성능 저하 없이 얼마나 처리되는지 평가
- CPU, 메모리, 네트워크 사용량 분석을 통한 최적화
일반적 진행 단계
- 테스트 목표 정의 & 부하 매개변수 결정 (동시 사용자 수 등)
- 부하 수준(예: 동시 사용자 500명)과 성능 기대치를 설정
- 테스트 시나리오 작성
- 테스트 환경 구축 및 부하 실행
- 실제 서비스 환경과 유사한 테스트 환경을 구성
- 부하 테스트 도구를 사용하여 요청을 생성
- 결과 분석 및 시스템 최적화
- 응답 시간, 실패율, 자원 사용률 등을 분석하여 개선점 도출
부하 테스트에 많이 쓰이는 툴과 서비스
부하 테스트 도구 | 유형 | 특징 | 장점 | 단점 |
---|---|---|---|---|
JMeter | 오픈소스 | 강력한 커뮤니티 지원, 다양한 프로토콜 지원(HTTP, FTP, JDBC 등) | 확장성, 다양한 플러그인 지원 | UI가 다소 복잡, 초보자에게 진입 장벽 있음 |
Gatling | 오픈소스 | Scala 기반, 코드 기반 스크립팅 지원 | 코드 기반으로 유지보수 용이, 고성능 | 설정이 복잡할 수 있음 |
Locust | 오픈소스 | Python 기반, 동적 시뮬레이션 지원 | Python으로 간편한 스크립팅 | UI 제공 안 됨, 그래픽 분석 기능 부족 |
k6 | 오픈소스 | JavaScript 기반, CLI 중심 | 클라우드 환경에서도 테스트 가능, 경량화 | 고급 분석 기능 부족 |
Artillery | 오픈소스 | Node.js 기반, CLI 방식 | 간단한 설정으로 빠르게 부하 테스트 가능 | 대규모 테스트에는 부적합 |
LoadRunner | 상용 | 강력한 분석 기능, 기업용 솔루션, 엔터프라이즈급 애플리케이션, 분산 테스팅 | 다양한 프로토콜 지원, 고급 보고 기능, 전문적인 지원 | 유료 라이선스 필요 |
AWS Load Testing | 클라우드 | AWS 환경에서 최적화된 부하 테스트 | 서버리스 방식으로 실행 가능 | AWS 서비스에 종속적 |
LoadView | 오픈소스 | 클라우드 기반, 실제 브라우저 테스트, 웹사이트, 웹 애플리케이션, API | 사용 편의성, 24/7 전문가 지원 | 오픈소스 대비 비용 발생 |
ngrinder | 오픈소스 | GUI, CIL(Groovy, Jython로 코딩), HTTP 지원 | 다양한 프로토콜 지원, 분산 테스트 실행, 실시간 모니터링 등을 제공, 한국어 지원 | 설치 및 초기 설정이 복잡하며, 고급 기능 활용 시 학습 곡선이 가파를 수 있음 |
부하 테스트 툴별 서비스 예시 및 사용 방법
1. Apache JMeter
- 서비스 예시: 대규모 웹사이트 트래픽 테스트, REST API 성능 측정, 웹 애플리케이션, API, 데이터베이스 테스트
- 사용 방법:
- JMeter 다운로드 및 설치
- 테스트 시나리오 작성 (Thread Group 추가)
- HTTP Request 설정
- Listener 추가하여 응답 시간 및 실패율 분석
- 테스트 실행 및 결과 분석
- GUI, CLI(XML로 작성, java로 실행) 모두 지원
- 장점:
- 다양한 프로토콜 지원 (HTTP, WebSocket, FTP 등)
- GUI 및 CLI 실행 가능
- CSV 데이터를 활용한 테스트 가능
- 커스터마이징 가능
- 단점:
- 다소 무거운 성능 (많은 자원 사용)
- 설정이 복잡할 수 있음 (GUI 등)
2. Gatling
- 서비스 예시: 온라인 쇼핑몰의 동시 접속자 증가에 따른 응답 시간 측정, 웹 애플리케이션, API 테스트
- 사용 방법:
- Gatling 설치 후 Scala 기반 스크립트 작성
- 요청 정의 및 시뮬레이션 설정
- CLI에서 테스트 실행
- HTML 리포트 분석
- 장점:
- 코드 기반으로 유지보수 용이
- HTML 리포트 자동 생성
- 효율적인 리소스 사용, 실시간 보고
- 단점:
- Scala 언어 학습 필요
3. Locust
- 서비스 예시: API 서버 부하 테스트
- 사용 방법:
- Python 기반 스크립트 작성 (사용자 시뮬레이션)
- 실행 후 웹 UI에서 실시간 모니터링
- 결과 분석 및 튜닝
- 장점:
- Python으로 간단한 스크립팅 가능
- 분산 테스트 가능
- 단점:
- 그래픽 분석 기능 부족
4. k6
- 서비스 예시: 마이크로서비스 환경에서 API 성능 테스트
- 사용 방법:
- JavaScript 기반 테스트 스크립트 작성
- CLI에서 테스트 실행
- Grafana 등과 연동하여 모니터링
- 장점:
- 클라우드 기반 테스트 가능
- CI/CD 파이프라인과 쉽게 연동 가능
- 단점:
- UI 없음, CLI 기반
5. AWS Load Testing
- 서비스 예시: AWS Lambda, API Gateway 부하 테스트
- 사용 방법:
- AWS Fargate 또는 Lambda를 사용하여 테스트 설정
- CloudWatch로 성능 모니터링
- 결과 분석 후 리소스 조정
- 장점:
- AWS 환경에 최적화됨
- 별도 인프라 필요 없음
- 단점:
- AWS 서비스 종속적
요약
- JMeter: 전통적인 부하 테스트 도구, 다양한 프로토콜 지원
- Apache JMeter를 이용한 부하 테스트 및 리포트 생성 : https://creampuffy.tistory.com/209
- Gatling: 코드 기반 테스트에 적합
- Locust: Python 기반의 가벼운 부하 테스트 도구
- k6: JavaScript 기반, 클라우드 및 CI/CD 연동 최적화
- AWS Load Testing: AWS 환경에서 부하 테스트에 적합
툴 선택 기준:
- 오픈소스 vs 상용: 예산 고려
- 오픈소스 부하테스트 툴 비교 2024 : https://testguild.com/load-testing-tools/
- 기술 스택: Python이라면 Locust, JavaScript라면 k6
- 테스트 환경: AWS라면 AWS Load Testing
- jvm 위에서 동작하면 jmeter, ngrinder 무겁고 느릴 수 있다 -> k6, locust이 경량화
- k6 vs JMeter, 어느 성능 테스트 도구를 써야 할까? : https://velog.io/@yongtae923/k6-vs-JMeter#k6-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-%EC%84%B1%EB%8A%A5-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8F%84%EA%B5%AC
- Load Tests: Locust vs Jmeter : https://azevedorafaela.com/2020/05/23/load-tests-locust-vs-jmeter/
위에서는 어떤 툴이 있는지 개념이 뭔지 간단히 알아보았으니
좀 더 자세하게
https://it-roheerumi.tistory.com/195
[성능 테스트] 04. 부하 테스트 도구와 활용
# 학습 목표 시스템의 가용성과 확장성을 평가할 수 있다. 부하 테스트의 목적을 이해할 수 있다. Throughput과 Latency의 개념을 이해할 수 있다. 시스템의 병목이 발생하는 주요 원인과 대책을 이해
it-roheerumi.tistory.com
이 분의 정리를 참고했다
어떤 부분을 확장할 것인가? : 확장성에 대한 특징 파악
- Throughput은 시간당 처리량으로, 시스템의 성능 지표는 RPS(request per second), TPS(transaction per second)와 같은 단위로 표현됨
- Throughput은 데이터 전송량에 포커스를 맞춘 성능 지표
- 한편 볼륨의 성능을 측정할 경우에는 IOPS(Input/Output per second)라는 단위를 사용함
- 성능을 측정할 때는, 인프라 내의 구성요소(티어)로 구분된 각 요소를 구분하지 않고 통합해서, 특정 작업이 얼마만큼의 Throughput을 갖는지를 측정
확장할 때 고려할 수 있는 부분
- 1000rps에서 2000rps로 성능을 두 배 개선하기 위해서는, 웹서버를 확장해야 할까? DB 서버를 확장해야 할까?
- 시스템 구성 변경 시 다운타임은 얼마나 허용되는가? 서비스 정지 없이 가능한가?
- 현재 시스템에서 낼 수 있는 최대 성능(limit)은 어디까지인가?
부하가 많이 발생할 때 시스템에 일어나는 문제 요소
- 응답 속도 (latency = 처리 시간) 저하
- 시스템 잠금(lock) 경합
- 부하 발생시 애플리케이션 또는 서버 에러 발생
- 데이터 일관성 문제와 손실
-> 해결할 수 있을만큼의 부하 수용 범위를 파악해야 함
Throughput과 Latency
웹 애플리케이션 성능 지표로서 throughput 예
- 1초에 처리하는 HTTP 요청 수 (rps)
- 네트워크로 전송되는 데이터 전송 속도 (스트리밍 서비스와 같이 대역폭이 중요한 경우)
Latency
- 사용자가 어떤 웹페이지를 보기위한 Latency는 사용자의 인터넷 환경, 브라우저 등의 개별환경 변수가 존재함. 즉 네트워크를 통한 왕복 시간도 포함
- 하지만 성능 테스트를 진행할 때에는, 사용자 환경에 따른 변인을 통제하거나, 애초에 네트워크 상황을 고려하지 않고 테스트를 진행
부하테스트 계획
- 부하 테스트 전에 서비스 수준 목표(SLO)를 설정하는 것이 좋음 -> 척도 표준화 및 목표 설정
Latency에 중점을 둔 SLO 예시 | Throughput에 중점을 둔 SLO 예시 |
- GET 호출의 90%는 1ms 이내에 완료해야 함 - GET 호출의 99%는 10ms 이내에 완료해야 함 - GET 호출의 99.9%는 100ms 이내에 완료해야 함 |
- throughput은 순간적으로 요청이 치솟는 peak 트래픽에서의 처리량을 바탕으로 함 |
<1일 기준으로 RPS를 계산하고자 할 때의 시나리오 예시> - DAU 5만명, 1명당 평균 접속 횟수 20회 - 1일 평균 접속 수에 대한 피크 트래픽 배율 : 보통 평균의 2-3배 - 안전 계수 (얼마만큼 넉넉하게 프로비저닝 할 것인지) -> 3배 => 피크 트래픽 배율을 3배로 하고 계산하면 이 경우 하루가 총 86400초 이므로 RPS는 약 100RPS => 도출한 SLO : 서비스는 100RPS를 달성해야 함 |
https://rovictory.tistory.com/m/219
[Issuefy] Jmeter를 사용한 성능 테스트 및 스케일링 분석
Issuefy 아키텍처Issuefy는 AWS의 오토 스케일링 그룹과 ECS를 활용하여 트래픽 변화에 유연하게 대응할 수 있는 아키텍처를 채택했습니다. CPU 사용량이 70%를 초과하면 자동으로 스케
rovictory.tistory.com
- CPU 사용량 70%는 몇 TPS일 때 발생하는가?
- t3a.small 단일 인스턴스로 처리할 수 있는 최대 TPS는 얼마인가?
- 스케일 아웃이 최대치에 도달했을 때, 얼마나 많은 TPS를 감당할 수 있는가?
이런 식으로 SLO를 세워야 한다
병목 부분 찾기
이 아키텍처들처럼 어디서 병목 부분을 찾고 테스트 계획을 세워야 하는지 보기에 간편해서 가져왔다
- 웹서버 부하테스트 실전 노하우
(GCP 예시도 나와있고, 엄청 자세히 나와있다)
https://www.slideshare.net/slideshow/ss-183469952/183469952
웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우 - Download as a PDF or view online for free
www.slideshare.net
- 우아한 형제들 : 결제 시스템 성능, 부하, 스트레스 테스트
(다만 2018년 자료)
https://techblog.woowahan.com/2572/
결제 시스템 성능, 부하, 스트레스 테스트 | 우아한형제들 기술블로그
안녕하세요. 우아한형제들에서 결제시스템을 개발하고 있는 권용근입니다. 입사한 지 4개월 만에, 드디어 우아한형제들 기술 블로그에 글을 남기게 되어 감회가 새롭습니다. 저는 최근 결제 시
techblog.woowahan.com
- 툴 비교, 가장 많이 쓰는 게 나와있고 grafana에서 작성한 거라 모니터링 연동에도 참고할 수 있을 것 같다
https://grafana.com/blog/2020/03/03/open-source-load-testing-tool-review/#vu
Open source load testing tool review: 2020 | Grafana Labs
Chris Bedwell · 21 Nov 2024 · 21 min read 5 tips to write better browser tests for performance testing and synthetic monitoring
grafana.com
- EC2 CPU 성능 버스트 가능 인스턴스 개념 및 가이드
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html
성능 버스트 가능 인스턴스에 대한 주요 개념 및 정의 - Amazon Elastic Compute Cloud
성능 버스트 가능 인스턴스에 대한 주요 개념 및 정의 기존 Amazon EC2 인스턴스 유형은 고정된 CPU 리소스를 제공하는 반면, 성능 순간 확장 가능 인스턴스는 기본 수준의 CPU 사용률을 제공하면서
docs.aws.amazon.com
- aws기반 부하테스트 개요
(다만 2016년 자료)
https://aws.amazon.com/ko/blogs/korea/how-to-loading-test-based-on-aws/
AWS 기반 웹 및 애플리케이션 서버 부하 테스트: A to Z | Amazon Web Services
사용자가 이용하고 있는 온라인 서비스로부터 예상치 못한 느려짐을 겪거나, 접속 불가로 인해 서비스 이용 조차 할 수 없다면, 서비스에 중요한 재방문율(Retention Rate)과 유료 전환율(Conversation R
aws.amazon.com
<이외 툴들을 비교해놓은 참고자료들>
[1] Load Testing vs Stress Testing vs Performance Testing - Guru99 https://www.guru99.com/performance-vs-load-vs-stress-testing.html
[2] Load Testing vs. Stress Testing: Key Differences & Examples https://queue-it.com/blog/load-vs-stress-testing/
[3] What is Load Testing? - Splunk https://www.splunk.com/en_us/blog/learn/load-testing.html
[4] What is Load Testing: Process, Tools, & Best Practices | BrowserStack https://www.browserstack.com/guide/load-testing
[5] Top 6 Best Performance Testing Tools in Review - Shift Asia https://shiftasia.com/column/top-6-best-performance-testing-tools-in-review/
[6] Top 20 Performance Testing Tools in 2024 | BrowserStack https://www.browserstack.com/guide/performance-testing-tools
[7] Load Testing Services by LoadView https://www.loadview-testing.com/load-testing-services/
[8] Free Load Testing Tools & Services - Software Testing Magazine https://www.softwaretestingmagazine.com/tools/free-web-load-testing-services/
[9] A Detailed Guide To Performance Testing Vs Load Testing - QA Touch https://www.qatouch.com/blog/performance-testing-vs-load-testing/
[10] Load Testing Your API: Pros, Cons & How-to with LoadView Testing https://www.loadview-testing.com/blog/load-testing-your-api-pros-cons-how-to-with-loadview-testing/
[11] What is Load Testing: Tools and Best Practices - HyperTest https://www.hypertest.co/software-testing/what-is-load-testing-and-how-it-works
[12] Why Open Source Load Testing Tools: Advantages and ... https://www.loadview-testing.com/blog/why-open-source-load-testing-tools-advantages-and-disadvantages/
[13] 16 Top Load Testing Software Tools for 2024 (Open Source Guide) https://testguild.com/load-testing-tools/
[14] What Is Load Testing? Types, Practices, Tools, Challenges & More https://www.zaptest.com/what-is-load-testing-deep-dive-into-the-types-practices-tools-challenges-more
[15] Performance Testing vs. Load Testing vs. Stress Testing: A Guide for ... https://www.linkedin.com/pulse/performance-testing-vs-load-stress-guide-professionals-fldef
[16] Performance Testing vs. Load Testing vs. Stress Testing - Testscenario https://www.testscenario.com/difference-between-performance-testing-vs-load-testing-vs-stress-testing/
[17] Load Testing vs. Stress Testing: What's the Difference? - LoadNinja https://loadninja.com/articles/load-stress-testing/
[18] Performance Testing, Load Testing & Stress Testing Explained https://www.bmc.com/blogs/load-testing-performance-testing-and-stress-testing-explained/
[19] Load Testing vs Stress Testing vs Performance Testing - ACCELQ https://www.accelq.com/blog/load-testing-vs-stress-testing-vs-performance-testing/
[20] Performance Testing vs. Load Testing vs. Stress Testing https://blog.postman.com/performance-testing-vs-load-testing-vs-stress-testing/
[21] What is Load Testing? How it works - OpenText https://www.opentext.com/what-is/load-testing
[22] Software load testing - Wikipedia https://en.wikipedia.org/wiki/Software_load_testing
[23] What is Load Testing? Overview, Tools & Best Practices - Shift Asia https://shiftasia.com/column/what-is-load-testing-overview-tools-best-practices/
[24] What is Load Testing? Examples, Tutorials & More - Stackify https://stackify.com/what-is-load-testing/
[25] Everything You Need To Know About Load Testing - Queue-it https://queue-it.com/blog/load-testing/
[26] Top 11 Performance Testing Tools for 2025 | LambdaTest https://www.lambdatest.com/blog/performance-testing-tools/
[27] Top 15 Open-Source Load Testing Tools https://www.loadview-testing.com/blog/best-open-source-load-testing-tools/
[28] Load and Performance Testing Services - KiwiQA https://www.kiwiqa.com/load-performance-testing.html
[29] 11 Best Load Testing Tools to Consider in 2025 https://www.globalapptesting.com/blog/best-load-testing-tools
[30] Load testing tools | Grafana Labs https://grafana.com/load-testing/load-testing-tools/
[31] Samples for Azure Load Testing - GitHub https://github.com/Azure-Samples/azure-load-testing-samples
[32] What is Load Testing? | Best Practices in 2025 https://www.loadview-testing.com/learn/load-testing/
[33] Top 20 Performance Testing Tools in 2025 - QA Touch https://www.qatouch.com/blog/performance-testing-tools/
[34] #1 Load and Performance Testing Services | Securium Solutions https://securiumsolutions.com/load-performance-testing-services/
[35] Load Testing Tools for Web Applications - Ramotion https://www.ramotion.com/blog/load-testing-tools-for-web-applications/
[36] Load Testing Using JMmeter | JMeter Tutorial For Beginners https://www.youtube.com/watch?v=NTyY8wKSvik
[37] Load Testing Complete Guide for Beginners - Software Testing Help https://www.softwaretestinghelp.com/load-testing/
[38] How to do Load Testing?[A FULL GUIDE] - Luxe Quality https://luxequality.com/blog/how-to-do-load-testing/
[39] JMeter Load Testing: A Comprehensive Guide - Simplilearn.com https://www.simplilearn.com/tutorials/jmeter-tutorial/jmeter-load-testing
[40] What are the advantages and disadvantages of load test ... - Kvtester https://kvtester.com/Technical_Support/Technology/1533.html
[41] Pros and Cons of the best open source web testing tools - CloudQA https://cloudqa.io/pros-cons-best-open-source-web-testing-tools/