📊 성능 테스트
웹 서비스 기능 구현 후 대용량 트레픽이 들어올 때 어떻게 동작할 지 궁금하였고, 성능 테스트를 진행하기 위해서 해당 포스팅을 작성하였습니다.
성능 테스트의 필요성
성능 테스트는 사용자의 만족도와 연관이 깊습니다. 웹 애플리케이션의 성능을 최적화 해놓아야 서비스를 사용하는 클라이언트 입장에서 최적의 사용자 경험을 제공받을 수 있기 때문입니다.
즉, 사용자 경험을 높이기 위해서 시스테의 응답시간, 처리량, 안정성 등을 평가하고 최적화 해줘야 합니다.
이 때, 필요한 테스트가 성능 테스트 입니다.
성능 테스트의 대표적인 것들로 부하 테스트, 스트레스 테스트, 안정성 테스트 등이 있습니다.
일반적으로 부하테스트는 정상 부하 상태에서 어떻게 작동하는지 확인 가능하고, 스트레스 테스트를 통해서 시스템의 한계점을 파악할 수 있습니다. 안정성 테스트는 시스템이 장시간 동안 안정적으로 작동하는지를 검증하는데 목적이 있으며, 이를 통해 시스템의 신뢰성을 평가할 수 있습니다.
성능 테스트 도구 종류
성능 테스트를 수행하기 위해서는 다양한 기술과 도구가 필요한데, 대표적으로 JMeter, LoadRunner, Gatling 등이 있습니다.
LoadRunner
장점
- 다양한 프로토콜 지원 : HTTP, HTTPS, FTP, SAP 등
- 시나리오 기반 테스트 : VuGen 이라는 스크립트 도구를 사용하여 사용자의 행동을 실제 레코딩하고, 이를 기반으로 가상 사용자 시나리오 작성 가능.
- 실시간 모니터링 : 테스트 수행 중 시스템 리소스 사용량, 응답 시간, 에러 발생 등의 지표를 실시간으로 확인할 수 있습니다.
단점
- 비용 : 상대적으로 사용 시 높은 비용을 필요로 합니다.(💲3,000 ~ 5,000)
- 러닝 커브 : 사용법이 복잡하고 학습하는데 시간이 많이 소요됩니다.
- 자원 소모 : 높은 하드웨어 요구 사항과 메모리 사용량이 많을 수 있습니다.
JMeter
장점
- 무료 및 오픈 소스 : 무료로 사용 가능하며, 오픈 소스 커뮤니티의 지원을 받을 수 있습니다.
- 다양한 프로토콜 지원 : HTTP, HTTPS, FTP, JDBC, LDAP, JMS 등
- 유연성 : 다양한 테스트 시나리오를 구현할 수 있는 확장성과 유연성이 뛰어납니다.
- 커뮤니티 지원 : 오랜 역사로 인해 커뮤니티 지원이 활성화되어 있습니다.
단점
- 메모리 관리 : 대용량 테스트 진행 시 수행 메모리 관리가 어려울 수 있습니다.
- 실시간 모니터링 : 실시간 모니터링은 제한적입니다.
Gatling
비교적 최신에 나온 성능 테스트 도구 중 하나로, 고성능을 요구하는 웹 애플리케이션 테스트에 적합합니다. Scala 기반으로 개발되었으며, 복잡한 시나리오 작성도 가능합니다.
장점
- 성능 및 확장성 : Gatling은 Scala와 Akka 프레임워크를 기반으로 하여 뛰어난 성능과 확장성을 제공합니다. 단일 Gatling 인스턴스로 수십만 명의 사용자를 시뮬레이션할 수 있습니다.
- 스크립팅 언어 : Gatling은 Scala 언어를 사용하여 복잡한 시나리오를 작성할 수 있습니다.
- 비동기 테스트 지원: Gatling은 WebSocket, AJAX 등 다양한 비동기 프로토콜을 지원하여 비동기 애플리케이션 테스트가 용이합니다.
- 실시간 모니터링 및 분석: Gatling은 실시간 모니터링 대시보드와 HTML 리포트 생성 기능을 제공합니다. InfluxDB, Grafana 등 외부 모니터링 도구와의 연동도 가능합니다.
단점
- 학습 곡선: Gatling은 Scala 언어 기반이므로 높은 학습 곡선이 존재합니다.
- 커뮤니티 및 생태계: 상대적으로 작은 커뮤니티와 생태계를 가지고 있습니다.
- 비용: 상용 버전인 Gatling Enterprise는 비용이 발생합니다.
JMeter 선택
선택 기준은 크게 3가지 정도가 있습니다.
- 테스트 환경으로써 적합한가
- 비용적인 측면 검토
- 러닝 커브가 높지는 않은가
테스트 환경
필자가 진행중인 프로젝트는 웹 애플리케이션에 대한 테스트이므로, HTTP 또는 HTTPS 프로토콜 지원 가능 여부를 따져야 합니다. 관련 기준에 대해서는 3개 모두 적합하기 때문에 차별화된 기준은 아닙니다.
비용적인 측면
필자의 경우 아직 취준생이므로, 최대한 비용이 들지 않고 테스트할 수 있는 툴에 대해서 고민하고 있습니다. 따라서 3가지 플랫폼 중 유일하게 무료의 오픈소스를 제공하는 JMeter 사용을 지향했습니다.
러닝 커브가 높지는 않은가
가장 사용법이 간단하고 GUI를 기반으로 결과를 제공하는 JMeter가 가장 적합하다고 판단했습니다. 상대적으로 Gatling에서 사용하는 Scala 언어는 한번도 사용해본적이 없고, LoadRunner 또한 사용법이 복잡하다는 특징이 있습니다.
결과적으로 위와 같은 기준에 의거하여 JMeter를 선택하여 테스트를 진행하려 합니다.