기타/관리

nGrinder 설치 및 사용(부하 테스트)해보기

펭귄힝 2024. 5. 22. 18:49

오늘은 내가 만든 자바 애플리케이션을 nGrinder 라는 도구를 사용해 성능 테스트를 진행해보려고 한다.

 

 

0. 동작 흐름

사용하기 전에 동작 흐름을 살펴보자.

 

이미지 출처

 

그림을 보면 다소 복잡해보이지만 간단하게 설명하자면 Controller 가 서버 역할을 하고 각각의 Agent 들이 Controller 의 명령을 받아서 타겟 서버에 데이터를 전송하는 역할을 수행한다. 그리고 그에 따른 응답 정보를 Agent 가 다시 Controller 로 전송한다.

 

 

1. nGrinder 설치

자 그럼 본격적으로 설치 해보자.

 

필자는 nGrinder 의 Controller 와 Agent 를 모두 로컬 PC 에 설치해두고 서버 컴퓨터에 부하 테스트를 진행할 예정이다.

 

 

https://github.com/naver/ngrinder/releases/tag/ngrinder-3.5.9-20230227

 

Release ngrinder-3.5.9 · naver/ngrinder

Changes Fix security vulnerabilities Bump base JDK version up to 11 Bug fix #998 Fix failing to call mvn and gradle command in Windows #1004 Fix script validation error in docker env

github.com

 

 

nGrinder 공식 Github 에 접속해서 위 사진에 보이는 war 파일을 다운로드 해준다.

 

 

 

 

 

 

이제 다운받은 war 파일을 실행해주면 되는데 필자의 로컬 PC 에는 jdk 17버전이 기본적으로 깔려있었고 환경 변수까지 설정되어 있는 상태였다. 그런데 nGrinder 의 경우 아직 jdk 17 버전을 지원하지 않아서 안정적으로 실행하기 위해서는 jdk 11 버전을 설치해주어야 한다.

 

그래서 jdk 11버전을 설치한 후 별도의 배치 파일을 만들어서 nGrinder Controller 를 실행할 때에만 jdk 11 버전을 사용하도록 만들어주었다.

 

(이 글을 보는 독자분들의 경우 실행 환경을 잘 확인하여 실행 명령어를 입력하길 바란다.)

 

 

 

 

 

 

최종적으로 war 파일을 실행하면 위와 같이 로그인 화면이 나타나게 된다.

 

 

 

 

 

 

아이디 비밀번호 모두 초기 값인 admin 을 입력하여 로그인해준다. (언어도 한국어로 맞춰주었다.)

 

 

 

 

 

 

로그인 후 나오는 메인 페이지에서 오른쪽에 admin 이름을 클릭해서 에이전트 다운로드 버튼을 눌러 에이전트 파일을 로컬 PC로 다운로드 해준다.

 

 

 

 

 

 

다운받은 에이전트 파일의 압축을 풀고

 

 

 

 

 

 

run_agent.bat 파일을 실행하여 agent 를 실행해준다.

 

 

 

 

 

 

실행되면 위와 같이 나타나게 되는데 보시다시피 16001번 포트를 통해 controller 와 통신하고 있는 것을 알 수 있다. 따라서 controller 와 agent 를 각각 다른 환경에서 실행하게 된다면 controller 의 16001번 포트를 열어주어야 한다.

 

(이 외에도 controller 에서 테스트 정보를 수집하기 위해서는 12000~13000번의 포트 번호도 열어주어야 한다.)

 

 

 

 

 

 

agent 까지 실행하고 controller 의 agent 관리 메뉴를 들어가보면 위와 같이 잘 나타나는 것을 확인할 수 있다.

 

 

 

 

 

2. 성능 테스트 해보기

설치와 실행을 끝냈으니 본격적으로 API 테스트를 진행해보겠다.

 

 

검색 쿼리를 날리면 위 스펙에 맞게 결과를 반환 해주는 API 를 테스트 할 것이다.

 

 

 

 

 

 

controller 메인 화면에 접속해서 테스트할 API 를 입력한 후 테스트 시작 버튼을 누른다.

 

 

 

 

 

 

그럼 이렇게 뜨게 될텐데, 박스 친 부분만 간략하게 살펴보자면

 

 

 

에이전트: 실행 중인 에이전트 중 몇 개의 에이전트로 테스트 할 것인지 설정한다.

 

에이전트별 가상 사용자: 테스트에 참여할 사용자 수. (296 으로 설정했으므로 296명이 동시 접속한다는 가정 하에 테스트가 진행된다고 생각하면 된다.)

 

테스트 기간: 얼마만큼의 시간동안 테스트를 진행할지 설정한다.

 

 

 

모두 설정해주고 저장 후 시작 버튼을 클릭한다.

 

 

 

 

 

 

그럼 이렇게 연한 녹색 불이 뜨면서 테스트가 진행 중임을 확인할 수 있다.

 

 

 

 

 

 

scouter 를 통해 확인해보면 엄청난 요청이 들어오는 걸 볼 수 있다.

 

 

 

 

 

테스트가 끝나고 결과 보고서를 확인해보면 위와 같이 성능에 대한 지표를 확인할 수 있다.

 

여기서 보이는 TPS 는 초당 처리량이라고 생각하면 된다. 1초에 176개의 트랜잭션이 처리되었다.

 

평균 테스트 시간은 평균적으로 요청을 보냈을 때 결과를 받기까지의 반환 시간을 말한다. 1072ms 이니 대략 1초 정도 걸렸다는 것을 알 수 있다.

 

 

정리하자면 현재 애플리케이션은 검색 API 를 통해 30초동안 동시에 198개의 요청을 보냈을 때 TPS는 176, 평균 처리 속도는1072ms 라는 것을 알 수 있다.

 

 

 

 

 

참고자료