imhamburger 님의 블로그

성능 테스트 도구 nGrinder 이해하기 본문

끄적끄적

성능 테스트 도구 nGrinder 이해하기

imhamburger 2024. 8. 12. 20:25

nGrinder는 네이버에서 개발한 오픈소스 성능 테스트 도구이다.

예를들어, 내가 웹사이트를 만들었는데 이 웹사이트에 유저가 늘어나는 상황이라면 지연시간, 에러 발생 등이 일어날 수 있다. 이러한 상황말고도 다양한 상황들을 내가 시나리오를 짜고 그 시나리오를 nGrinder에서 간편하게 테스트해 볼 수 있다.

 

nGrinder는 웹, API서버, 데이터베이스 등 다양한 시스템의 성능을 테스트할 때 유용하며 특히 대규모 서비스의 안정성을 검증하는 데 효과적이다.

 

nGrinder 설치와 사용법은 공식문서를 확인하면 된다.

참고로 nGrinder 실행 시 다른 포트번호로 실행시키고 싶다면 아래와 같이 --port {번호입력} 을 추가하면 된다.

java -jar -Djava.io.tmpdir=${NGRINDER_HOME}/lib ngrinder-controller-3.5.9-p1.war --port 8949

 

나는 맥북이라 그런지 실행할 때 오류가 났었는데 tmpdir 경로를 별도로 지정해줘야 했다.

나는 .zshrc 에 NGRINDER_HOME 경로를 저장해놓았다.

export NGRINDER_HOME=/Users/seon-u/app/ng/ngrinder-controller

 

nGrinder를 실행하면 나오는 첫화면이다. 테스트하고 싶은 URL을 입력하고 Start Test를 누르면 된다.

 

Start하기 전에 Agent 를 설치해줘야 한다. nGrinder는 Controller와 Agent 로 이루어져 있다.

  • Controller는 성능 테스트를 관리하고 조정하는 역할이다. 테스트 스크립트를 작성하고, 실행하고, 결과를 분석하는 등 모든 관리 작업이 Controller에서 이루어진다. 위와 같이 웹 인터페이스를 통해 Controller에 접근하여 테스트를 설정하고 모니터링 한다.
  • Agent는 Controller의 지시에 따라 실제로 부하를 생성하는 컴포넌트이다. 테스트 스크립트를 실행하고 시뮬레이션하여 지정된 서버에 트래픽을 발생시킨다. Agent는 여러 대의 서버에 분산 배치할 수 있으며 이를 통해 대규모 테스트를 수행할 수 있다. Agent는 독립적으로 실행될 수 있어, Controller와의 연결이 끊어지더라도 설정된 테스트를 계속 수행할 수 있다.

 

여러 대의 Agent가 동시에 테스트를 수행함으로써, 대규모의 트래픽을 생성할 수 있다.

예를 들어, 10대의 Agent가 각각 1000명의 가상 사용자를 시뮬레이션하면, 총 10,000명의 사용자가 동시에 접속하는 상황을 시뮬레이션할 수 있다.

또한 한국과 미국에 각각 Agent를 배치하면, 두 지역에서 동시에 발생하는 트래픽을 테스트할 수 있다.

 

 

Agent 설치는 왼쪽상단에 admin에 커서를 갖다대면 Download Agent를 클릭하여 할 수 있다.

혹은 터미널에서 wget {링크} 를 하여 설치할 수도 있다. tar 파일이기 때문에 아래와 같이 압축을 풀어주도록 하자.

tar -xvf {파일명.tar}

 

에이전트 실행

bash run_agent.sh

 

 

 

사실 nGrinder처럼 성능 테스트를 해주는 도구들이 여러 개 있다.

도구 특징 지원언어 웹 기반 UI 분산 테스트 오픈소스 주요 사용사례
nGrinder 네이버 개발,
분산 부하 테스트
Groovy, Jython O O O 대규모 웹 서비스,
API 서버 성능 테스트
JMeter 가장 널리 사용되는 성능 테스트 도구,
다양한 플러그인 및 프로토콜 지원
Java X O O 웹 애플리케이션,
데이터베이스,
FTP 서버 등
Gatling 고성능, Scala 기반,
코드로 성능 테스트 시나리오 작성
Scala X O O 실시간 웹 애플리케이션,
API 서버 성능 테스트
Locust Python 기반,
이벤트 기반으로 가벼운 성능 테스트 가능
Python O O O API 서버, 웹 애플리케이션
k6 JavaScript 기반,
클라우드 네이티브,
CI/CD 파이프라인 통합에 강점
JavaScript X O O API 서버,
마이크로서비스,
클라우드 인프라 성능 테스트
Artillery JavaScript 기반,
쉽고 빠른 테스트 설정, Node.js 환경과 통합 용이
JavaScript X O
(pro버전)
O API 서버,
마이크로서비스,
실시간 채팅 앱
Tsung 고성능,
분산 부하 테스트,
Erlang 기반
Erlang X O O 실시간 채팅 서버, XMPP,
HTTP 성능 테스트
LoadRunner 상용 도구,
높은 신뢰성,
다양한 프로토콜 지원
C, Java,
VBScript 등
O O X 엔터프라이즈급 애플리케이션,데이터베이스

 

nGrinder는 Jython을 지원하기 때문에 nGrinder 설치 전 자바 11버전을 설치해줘야 한다.

(11버전이 에러없이 제일 잘 돌아간다고 한답니다~ 실제로 17버전은 에러가 발생하였다.)

 

nGrinder 웹인터페이스에서 Start Test를 누르면 다음과 같은 테스트 시나리오를 만들 수 있는 설정들이 나온다.

아래에 Vuser는 Virtual User로 테스트한 유저수를 의미한다. 1초 = 1000밀리초(MS)

 

 

테스트를 다 돌리고나면, 아래와 같이 결과리포트를 확인할 수 있다.

Total Vusers 테스트한 유저 수
TPS 초당 처리 가능한 요청 수
Peak TPS TPS가 가장 높을 때를 의미
Mean Test Time 지연 시간
Executed Tests 실행한 테스트 수
Successful Tests 성공한 테스트 수
Errors 에러 발생 수
Run time 실행 시간