Skip to content

부하 테스트 툴 비교 및 정리

KWAKMANBO edited this page Jan 13, 2025 · 3 revisions
  • 부하 테스트를 수행할 테스트 도구 몇가지를 알아보자 각 툴의 장단점을 알아보고 어떤 툴이 프로젝트 부하 테스트에 적합한지 판단해볼 예정이다.
  • 대표적으로 사용되는 부하테스트툴인 k6, nGrinder, JMeter 3가지를 다뤄볼 예정이다.

1. Apach JMeter

image

  • JMeter는 오픈 소스 소프트웨어로 부하 테스트 툴이다.
  • JAVA로 작성된 소프트웨어이고

JMeter의 장점

빠르게 테스트를 배우고 이용이가능

  • JMeter은 GUI를 지원하기 떄문에 비교적 쉽게 배우고 사용할 수 있음

다양한 프로토콜 지원

image

  • 지원하는 프로토콜에 대한 정보를 얻고싶다면 더보기를 통해 알 수 있음

큰 커뮤니티

  • 웬만한 정보가 커뮤니티에 다있어 정보를 찾기가 쉬움

분산 테스팅의 지원

image

  • 분산 부하 테스트 기능일 무료료 지원해줌
  • 컨트롤러 노드를 지정하고 작업자 노드를 설정해 분산 부하 테스팅 기능을 지원해줌

이해하기 쉬운 HTML 리포팅 기능

  • 부하테스트 결과를 HTML로 만들어줌

2. k6

image

  • 오픈 소스 소프트웨어로 Load Impact에서 2017년 발표

  • Go 언어로 작성되어 있으며, 테스트에 사용되는 스크립트는 JavaScript를 사용

  • 코드 기반 스크립팅과 개발자 경험을 중요시함

  • GUI를 지원하지 않지만, k6 Test Builder를 사용하면 GUI를 통해 사용할 수 있음 but, JMeter만큼 의 GUI기능을 지원하진 않음

  • k6가 지원하는 프로토콜은 아래와 같음 image

  • 기본적으로 지원하는 프로토콜은 적지만, plugin을 사용해서 지원하는 프로토콜을 추가할 수 있음

k6의 장점

빠르게 테스팅을 배우고 수행하고싶을때

  • 위에서 JMeter에서도 언급했던 장점이지만, k6도 배우기 쉽고 테스트 수행하기가 쉽다는 장점이 있음
  • k6는 간편하게 설치할 수 있음

플러그인

  • 위에서 언급했듯이 k6는 plugin을 지원함
  • 플러그인을 필수적으로 사용해야하는 것은 아니지만, 플러그인을 사용해서 k6를 좀더 효율적으로 사용할 수 있음
  • JMeter도 플러그인을 사용하지만 JMeter는 플러그인 관리자까지도 플러그인 인것을 생각하면 모든 것이 플러그인으로 관리되는 JMeter보다 k6가 더 효율적으로 보일 수 있음

스크립팅

  • k6에서 스크립트는 JavaScript를 사용하는데 이를 통해 작성하기 쉽고 실행하기 쉽다는 장점이 있음
  • 실행기만 있으면 테스트를 진행할 수 있다느 장점이 있음

성능

  • k6는 Go로 작성되어 있음 -> Go는 컴파일된 언어 이므로 Java나 Python처럼 Interprter를 사용할 필요 x
  • Go로 작성되어 있어 복잡성이 줄어들었고, 외부 종속성이 없음 -> 병목현상의 잠재적 원인이 적음

K6와 JMeter의 비교

기능 JMeter k6
개발 언어 Java Go
스크립트 언어 제한적: 일부 Java (Groovy, BeanShell 등) JavaScript
지원 프로토콜 대부분의 프로토콜 지원 (HTTP/1.1, SOAP, FTP, JDBC, LDAP, JMS, SMTP, POP3, IMAP, TCP 등) 현대적인 프로토콜 지원 (HTTP/1.1, HTTP/2, WebSockets, gRPC)
브라우저 자동화 Selenium/WebDriver를 통해 지원 xk6-browser를 통해 지원
외부 종속성 Java 필요 없음
리소스 활용도 낮음; 하나의 로드 생성기가 수천 개의 가상 사용자를 시뮬레이션 가능 매우 우수함; 하나의 로드 생성기가 수만 개의 가상 사용자를 시뮬레이션 가능
메모리 관리 JVM 힙 메모리 설정 필요 로드 생성기 메모리를 네이티브하게 사용
스레드 모델 1 스레드당 1 가상 사용자; 성능이 느리고 리소스 비용이 높음 1 고루틴당 1 가상 사용자; 성능이 빠르고 리소스 비용이 낮음
스크립트 작성 용이성 GUI 기반, 코드 블록 포함 코드 기반; VS Code 플러그인 지원
테스트 수준 임계값 없음; 개별 요청에만 적용 지원
스크립트 형식 XML JavaScript
협업 동시 작업 어려움; 테스터 친화적; GUI 앱 필요 개발자 친화적, 버전 관리 용이; JavaScript 형식으로 협업 촉진
유지 관리 스크립트가 장황함; XML 형식은 가독성이 떨어짐 스크립트가 간결함; JavaScript는 가독성이 높음
커뮤니티 1998년부터 활동; 다양한 서드파티 튜토리얼; 방대한 문서; 중앙 커뮤니티는 없음 2017년부터 활동; 방대한 문서; 서드파티 튜토리얼은 적음; 공식 커뮤니티 존재
플러그인 지원 많은 기능이 플러그인 필요하지만, 다양한 플러그인 사용 가능 대부분의 기능이 네이티브로 지원되지만, 플러그인 지원은 새롭고 가용성은 적음
분산 로드 생성 지원 k6 Operator를 통해 지원
사전 생성된 보고서 기본 및 사용자 정의 HTML 보고서; 리스너를 통한 로깅 지원 내장된 사전 생성 보고서는 없지만, 분석 도구와의 통합을 통해 대시보드 제공
웹사이트 jmeter.apache.org k6.io
소스 코드 GitHub 링크 GitHub 링크

3. nGrinder

image

  • Naver에서 게발한 Enterprise 레벨 Java 기반 성능 테스트 도구
  • Agent와 Controller로 구성됨
    • Controller는 성능 테스트를 계획하고 모니터링하며, 테스트 프로세스를 조정하고 결과를 수집 및 표시하는 역할을 수행
    • Controller는 단일머신에 설치
    • Agent는 Controller의 지시에 따라 실제로 부하를 발생시키는 프로세스와 스레드를 실행하여 대상 시스템에 부하를 주는 역할을 수행
    • 각 Agent는 분산된 머신 또는 가상 머신에 설치됨
    • Agent가 테스트에 필요한 부하를 생성하고, 데이터를 수집하여 Controller에 전송
    • 테스트를 위해서 Agent는 반드시 필요하며, Controller는 이를 조종하는 역할을 수행
  • nGrinder는 분산 테스트/ Web UI/Multi Tenancy등을 지원하고 Groovy/Jython으로 테스트 스크립트를 작성할 수 있음

nGrinder의 구조

image

Controller

  • 성능 측정을 위한 웹 인터페이스를 제공하며, Web Application으로 Tomcat과 같은 웹서버 엔진을 이용하여 구동할 수 있음
  • 사용자와의 인터페이스를 담당하여 테스트 프로세스 정의, 스크립트 작성 등을 지원
  • 스크립트 수정 기능을 제공, Agent에 스크립트를 전달하여 테스트를 일임
  • 테스트 프로세스 조정
  • 테스트 통계를 수집하고 표시하는 기능 제공

Agent

  • Controller의 명령을 받아 실행, target에 프로세스와 스레드를 실행시켜 부하를 발생시킴
  • Agent 모드에서 실행할 때 대상 시스템에 부하를 주는 프로세스 및 스레드를 실행
  • 모니터 모드에서 실행 시 대상 시스템 성능 모니터링

Target

  • 테스트하려는 target 애플리케이션, 머신을 의미

nGrinder의 장점

웹 기반 인터페이스

  • 사용자 친화적인 웹 UI를 통해 테스트 설정, 실행, 모니터링, 결과 분석 등을 손쉽게 수행

분산부하 테스트 지원

  • 여러 에이전트를 활용하여 대규모 분산 부하 테스트를 효율적으로 수행할 수 있음

스크립트 기반 시나리오 작성

  • Groovy와 Jython 스크립트를 지원하여 복잡한 테스트 시나리오를 유연하게 작성할 수 있음

실시간 모니터링 및 상세한 리포팅

  • 테스트 진행 상황을 실시간으로 모니터링하고, 상세한 성능 지표와 보고서를 제공해줌

한국어 지원

  • 네이버에서 개발해서 한국어를 지원해주는 장점이 있음

참고문헌

Comparing k6 and JMeter for load testing
nGrinder를 활용한 부하테스트

팀 빌딩

📚팀 빌딩
📝Git 전략

회의록

1주차

🤝1월 7일
🤝1월 8일
🤝1월 9일

2주차

🤝주간 계획(1월 13일)

3주차

🤝주간 계획(1월 20일)

인공지능 리팩토링 1주차

🤝주간 계획(2월 3일)

인공지능 리팩토링 2주차

🤝주간 계획(2월 10일)

개발일지

AI 리팩토링 기획안

AI 리팩토링 개발일지

성능개선

리팩토링

팀회고

학습 정리

Clone this wiki locally