오늘은 내가 만든 자바 애플리케이션을 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 라는 것을 알 수 있다.
참고자료
https://brownbears.tistory.com/25
[nGrinder]nGrinder란? & docker 설치 방법
nGrinder란?nGrinder는 네이버에서 성능 측정 목적으로 jython(JVM위에서 파이썬이 동작)으로 개발 된 오픈소스 프로젝트이며, 2011년에 공개 하였습니다. 바닥부터 개발을 한 것이 아니라 The Grinder라는
brownbears.tistory.com
https://liltdevs.tistory.com/169
nGrinder 설명과 사용법 정리
nGrinder JMeter 와 같은 부하 및 성능 테스트 도구 JMeter 와 차이점은 JMeter 는 단일 데스크톱 컴퓨터에서 수행되는 반면에 nGrinder 는 컨트롤러 및 에이전트로 구성된 분산 아키텍처로 수행된다. nGrinde
liltdevs.tistory.com
https://www.youtube.com/watch?v=47_CV25nC5M&t
'기타 > 관리' 카테고리의 다른 글
Prometheus 를 사용하고 AlertManager 를 통해 서버 부하 알림 전송 해보기 (0) | 2024.07.06 |
---|---|
SpringBoot 3 에서 Zipkin 서버를 통한 분산 추적 해보기 (0) | 2024.07.05 |
Redis 를 사용하여 성능 최적화 (0) | 2024.06.01 |
클라우드 환경에 nginx 설치하여 분산 처리(Scale-Out)하기 (0) | 2024.05.24 |
[APM] Scouter 설치 및 자바 애플리케이션과 연동하기 with Docker (0) | 2024.05.17 |