오늘은 Software 서비스를 만들고, 실서비스에 전에 테스트해봐야할 성능테스트에는 어떤 것들이 있는지 살펴보고, 부하 테스트(Load Test)와 스트레스 테스트(Stress Test)의 대표적인 open source인 Apache JMeter로 성능테스트를 진행해보도록 하겠습니다.

1. 성능 테스트(Performance Test)

  • 성능 테스트는 언급된 부하 테스트와 스트레스 테스트를 포함한 테스트입니다.
    • Load Test
      • 정상적인 조건에서 얼마나 잘 동작하는지 평가를 진행합니다.
      • 평가 기준 : 응답 시간, 처리량, 시스템 자원 사용률
    • Stress Test
      • 점진적으로 시스템의 한계를 찾고, 극한 상황에서의 안정성 평가를 진행합니다.
      • 평가 기준 : 시스템 다운 시점, 성능 저하, 오류 발생 빈도
    • Spike Test
      • 갑작스러운 높은 부하에 대한 시스템의 반응을 평가합니다.
      • 평가 기준 : 순간 부하 시 응답 시간, 오류발생, 복구 시간.
    • Scalability Test
      • 시스템이 리소스 증가 시 어떻게 성능이 향상되는지를 평가합니다.
      • 리소스 추가에 따른 성능 개선 정도, 비용 대비 성능 효율
    • Volumne Test
      • 대량의 데이터를 처리할때 시스템의 성능을 평가합니다.
      • 평가 기준 : 데이터 처리 속도, 검색 시간, 데이터 저장 및 검색의 안정성
    • Endurance Test
      • 장시간 동안 시스템이 안정적으로 동작하는지를 평가합니다.
      • 평가 기준 : 메모리 누수, 성능 저하, 시스템 자원의 사용 패턴

2. Performance Test Tool

A. JMeter

  • 가장 시장 점유율이 높은 부하 테스트 소프트웨어는 Apache JMeter입니다. JMeter는 2024년 현재 부하 테스트 도구 시장에서 약 27.6%의 점유율을 차지하고 있으며, 점진적으로 증가하고 있습니다. [2]

    • JMeter 특징
      • 오픈 소스 : 무료로 사용할 수 있어 기업들이 비용절감하며 사용할 수 있는 강력한 성능 테스트 툴입니다.
      • 광범위한 프로토콜 지원 : HTTP, HTTPS, FTP, SMTP, POP3, IMAP, TCP, UDP, JMS, SOAP, REST, JDBC 등 다양한 프로토콜을 지원합니다. 이는 웹 애플리케이션, 데이터베이스, 네트워크 서비스 등 다양한 환경에서 테스트를 가능하게 합니다.
      • 사용 편의성 : GUI 제공하고 테스트 결과를 직관적으로 분석할 수 있습니다.
      • 확장성 : 플로그인 아키텍처를 통해 다양한 확장 기능을 추가 할 수 있습니다.
      • 통합 및 자동화 : CI/CD 파이프라인과의 통합이 용이하여 개발 초기 단계에서부터 성능 문제를 식별하고 해결 할 수 있습니다.

B. Locust

  • 두 번째로 살펴볼 Tool은 Locust입니다. 개인적으로 python환경의 개발 편의성을 고려해서도 locust를 추천합니다.

    • Locust 특징
      • 오픈 소스 : 무료로 사용 가능한 오픈 소스 성능 테스트 도구
      • Python 기반 : Interpretable한 Script언어 기반의 테스트가 가능하여 편리합니다.
      • 분산 실행 : 여러 노드를 사용하여 분산 부하 테스트가 가능합니다.
      • 웹 기반: 실시간으로 테스트를 모니터링하고 제어할 수 있는 웹 인터페이스를 제공합니다.
      • 경량화: 프로그램이 가볍습니다.

C. JMeter vs Locust

Jmeter는 다양한 프로토콜 지원과 GUI제공으로 다양한 관경에서 활용 가능한 장점이 있고, Locust는 python기반의 강력한 코드테스트 기능과 낮은 자원 소모로 효율적인 테스트를 수행할 수 있다는 장점이 있습니다. 구체적으로 어떤 차이가 있는지 살펴보면 아래와 같습니다.[3]

항목JMeterLocust
운영 체제 (Operating System)Any (JVM 필요)Any (Python 인터프리터 필요)
오픈 소스 (Open Source)YesYes
GUIYes, with non-GUI mode availableNo
실행 모니터링 (Execution Monitoring)콘솔, 파일, 그래프, 데스크톱 클라이언트, 커스텀 플러그인콘솔, 웹
"코드로서의 테스트" 지원 (Test as Code)약함 (Java)강함 (Python)
내장 프로토콜 지원 (In-built Protocols Support)HTTP, FTP, JDBC, SOAP, LDAP, TCP, JMS, SMTP, POP3, IMAPHTTP
통합 호스트 모니터링 (Integrated Host Monitoring)PerfMonNo
기록 기능 (Recording Functionality)YesNo
분산 실행 (Distributed Execution)YesYes
버전 관리 시스템(VCS)과의 사용 용이성 (Easy to use with VCS)NoYes
자원 소모량 (Resources Consumption)많은 자원 소모적은 자원 소모
동시 사용자 수 (Number of Concurrent Users)수천 명 (제약 있음)수천 명
램프업 유연성 (Ramp-up Flexibility)YesNo
테스트 결과 분석 (Test Results Analyzing)YesYes

상세 설명

  1. 운영 체제 (Operating System)

    • JMeter: Java 기반 도구로, JVM이 설치된 모든 운영 체제에서 실행할 수 있습니다.
    • Locust: Python으로 작성되어 있으며, Python 인터프리터가 있는 모든 운영 체제에서 실행 가능합니다.
  2. 오픈 소스 (Open Source)

    • 두 도구 모두 오픈 소스로, 비용 없이 사용할 수 있습니다.
  3. GUI

    • JMeter: GUI를 제공하여 사용자가 테스트 계획을 쉽게 작성할 수 있으며, 비-GUI 모드에서도 실행 가능하여 대규모 테스트나 자동화된 테스트 실행에 유용합니다.
    • Locust: GUI를 제공하지 않으며, 주로 CLI(명령 줄 인터페이스)와 웹 기반 인터페이스를 통해 테스트를 설정하고 모니터링합니다.
  4. 실행 모니터링 (Execution Monitoring)

    • JMeter: 콘솔, 파일, 그래프, 데스크톱 클라이언트, 커스텀 플러그인 등을 통해 실행 결과를 모니터링할 수 있습니다.
    • Locust: 콘솔과 웹 인터페이스를 통해 실행 결과를 모니터링합니다.
  5. "코드로서의 테스트" 지원 (Test as Code)

    • JMeter: Java로 작성된 스크립트를 통해 테스트를 작성할 수 있지만, 이는 상대적으로 약한 지원을 의미합니다.
    • Locust: Python을 통해 강력한 "코드로서의 테스트" 기능을 제공하여 개발자가 유연하게 테스트 시나리오를 작성할 수 있습니다.
  6. 내장 프로토콜 지원 (In-built Protocols Support)

    • JMeter: HTTP, FTP, JDBC, SOAP, LDAP, TCP, JMS, SMTP, POP3, IMAP 등 다양한 프로토콜을 지원합니다.
    • Locust: 기본적으로 HTTP 프로토콜만 지원합니다.
  7. 통합 호스트 모니터링 (Integrated Host Monitoring)

    • JMeter: PerfMon 플러그인을 통해 시스템 성능을 모니터링할 수 있습니다.
    • Locust: 별도의 호스트 모니터링 기능을 제공하지 않습니다.
  8. 기록 기능 (Recording Functionality)

    • JMeter: HTTP 요청을 자동으로 기록하여 테스트 계획을 쉽게 생성할 수 있는 기능을 제공합니다.
    • Locust: 기록 기능을 제공하지 않습니다.
  9. 분산 실행 (Distributed Execution)

    • 두 도구 모두 분산 테스트를 지원하며, 여러 워커(Worker) 노드를 사용하여 부하를 분산시킬 수 있습니다.
  10. 버전 관리 시스템(VCS)과의 사용 용이성 (Easy to use with VCS)

    • JMeter: 스크립트가 XML 형식으로 저장되어 버전 관리 시스템과의 통합이 다소 불편할 수 있습니다.
    • Locust: Python 스크립트를 사용하여 버전 관리 시스템과의 통합이 용이합니다.
  11. 자원 소모량 (Resources Consumption)

    • JMeter: 상대적으로 더 많은 시스템 자원을 소모합니다.
    • Locust: 비교적 적은 자원을 사용하여 효율적인 성능을 발휘합니다.
  12. 동시 사용자 수 (Number of Concurrent Users)

    • JMeter: 수천 명의 동시 사용자를 지원하나, 시스템 자원에 따라 제약이 있을 수 있습니다.
    • Locust: 수천 명의 동시 사용자를 효율적으로 지원할 수 있습니다.
  13. 램프업 유연성 (Ramp-up Flexibility)

    • JMeter: 사용자 정의 램프업 설정이 가능하여 부하를 점진적으로 증가시킬 수 있습니다.
    • Locust: 기본적으로 램프업 기능을 지원하지 않습니다.
  14. 테스트 결과 분석 (Test Results Analyzing)

    • 두 도구 모두 테스트 결과를 분석할 수 있는 기능을 제공합니다.

Reference

  1. https://techblog.woowahan.com/2572
  2. https://www.peerspot.com/categories/load-testing-tools
  3. https://www.blazemeter.com/blog/jmeter-vs-locust
  4. https://abstracta.us/blog/performance-testing/top-10-best-performance-testing-tools-in-2023/
profile
AI/ML Research Engineer

0개의 댓글