본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
강의 요약
오늘은 검색 API 개발하면서 레디스를 살짝 맛보기로 봤고(Cacheable, CacheEvict 정도), 댓글이랑 태그 API도 구현했다. 레디스는 다음 프로젝트에서 더 깊게 다룰것 같아서 그때 다루는 것으로, 그리고 본격적으로 성능 테스트 파트로 넘어갔다. 강의에서는 스트레스 테스트, 스파이크 테스트, 인듀런스 테스트 같은 성능 테스트 종류들을 소개하고, Locust로 실제 시나리오를 돌려보는 걸 배웠다. JMeter, Gatling 같은 도구들도 간단히 소개받았고.강의에서 성능 테스트 이야기 나왔으니 이론적인 내용과 툴들에 대한 내용들을 궁금해서 추가적으로 찾아봤다.
성능 테스트란
성능 테스트는 시스템의 속도, 안정성, 확장성을 평가하는 비기능 테스트다. 응답 시간, 처리량, 리소스 사용량, 에러율 같은 메트릭을 측정해서 사용자 경험에 영향을 미치는 조건에서 시스템이 어떻게 동작하는지 평가한다.
성능 테스트의 종류
찾아보니 성능 테스트는 여러 종류가 있고, 각각 다른 목적을 가지고 있다.


로드 테스트(Load Testing)
예상되는 최대 사용자 부하 상황에서 시스템 동작을 평가하는 테스트다. 현실적인 사용 패턴을 시뮬레이션해서 일반적인 운영 조건에서 성능 요구사항을 충족하는지 검증한다. 사용자가 점진적으로 증가하는 패턴을 시뮬레이션하고, 지속적인 부하 수준을 유지하면서 응답 시간, 처리량, 리소스 사용률의 기준선을 제공한다.
스트레스 테스트(Stress Testing)
시스템을 정상 운영 범위 이상으로 밀어붙여서 한계점과 실패 지점을 찾아내는 테스트다. 점진적으로 사용자 수를 늘려가면서 최대 용량 임계값을 결정하고, 리소스가 제한될 때 애플리케이션이 어떻게 동작하는지 확인한다. 중요한 건 시스템 복원력, 에러 핸들링, 복구 능력에 대한 통찰을 제공한다는 점이다.
인듀런스 테스트(Endurance/Soak Testing)
장기간 지속적인 부하를 유지해서 메모리 누수, 리소스 저하, 시스템 안정성 문제를 찾아내는 테스트다. 일반적으로 8시간 이상 실행되며, 지속적인 운영 중에 성능 저하 없이 작동해야 하는 애플리케이션에 필수적이다. 시스템이 장기간 운영 동안 안정적이고 효율적으로 유지되는지 확인한다.
스파이크 테스트(Spike Testing)
갑작스럽고 극단적인 부하 증가나 감소 상황에서 시스템 안정성을 평가한다. 예측 불가능한 트래픽 변화 상황에서 시스템이 충돌하거나 심각한 성능 저하 없이 복구하고 기능을 유지할 수 있는지 검증한다. 일반 테스트 사이클에서는 나타나지 않는 위험을 드러낸다.
피크 테스트(Peak Testing)
플래시 세일이나 바이럴 이벤트로 인한 지속적인 높은 부하 상황에서 시스템이 어떻게 동작하는지 분석한다. 시스템 최대 부하에 가까운 수준에서 성능을 평가하고, 높은 트래픽 볼륨을 처리할 수 있는지, 성능이 심각하게 저하되지 않고 유지되는지 검증한다.
확장성 테스트(Scalability Testing)
부하가 증가할 때 시스템이 어떻게 반응하는지 조사하고, 인프라나 구성이 변경될 때 시스템이 어떻게 확장되는지 분석한다. 예를 들어 서버를 추가하면 몇 명의 사용자를 더 지원할 수 있는지, 데이터베이스 CPU를 늘리면 응답 시간이 얼마나 개선되는지 확인한다.
성능테스트 도구들
JMeter: 가장 널리 사용되는 오픈소스 성능 테스트 도구다. 다양한 프로토콜을 지원하고 레퍼런스가 많다.
Locust: 파이썬으로 시나리오를 작성하는 도구다. 코드 기반이라 개발자에게 직관적이고 버전 관리가 쉽다.
Gatling: 스칼라 기반 도구로 고성능 부하 생성이 가능하고 상세한 리포트를 제공한다.
K6: 자바스크립트로 작성하는 현대적인 도구다. 개발자 친화적인 API를 제공하고 CI/CD 파이프라인 통합이 쉽다.
nGrinder: 네이버에서 개발한 도구로 대규모 분산 테스트에 강점이 있다.
nGrinder를 잠깐 부하테스트용으로 써본 적은 있는데, 솔직히 얕게 건드려본 수준이라 제대로 활용했다고 보기 어렵다. 이번 기회에 JMeter나 K6 같은 도구들을 제대로 학습해보고 싶다. 특히 K6는 자바스크립트 기반이라 좀 더 익숙하게 접근할 수 있을 것 같고, JMeter는 레퍼런스가 워낙 많아서 막힐 때 참고할 자료가 많을 것 같다. 오늘 이론적인 부분을 정리하면서 성능 테스트 종류별 목적과 시나리오를 이해하게 됐는데, 예상 성능을 측정하는 부하 테스트와 시스템의 한계를 식별하는 스트레스 테스트 같은 경우는 필수적으로 확인하면 좋을 것 같다. 그리고 이 도구들은 CI/CD 파이프라인 통합도 가능하다고 하니, 배포 전에 자동으로 성능 테스트가 돌아가는 구조를 만들어볼 수 있으면 좋겠다.
참고 출처
- https://abstracta.us/blog/performance-testing/types-of-performance-testing/
- https://www.blazemeter.com/blog/performance-testing-vs-load-testing-vs-stress-testing
- https://abstracta.us/blog/performance-testing/performance-testing-tools/
Types of Performance Testing - Everything You Need to Know | Abstracta
Discover load, stress, endurance, scalability testing, and more. Find out all types of performance testing and boost high-quality with Abstracta!
abstracta.us



