Ngrinder Stress Testing Tool Setting(download + Docker 활용 방식)
네이버 오픈소스 부하테스트 툴인 Ngrinder 환경 세팅을 위해서 controller/agent를 다운로드 하는 방식, Docker를 활용하는 방식이 있다. (windows 10기준으로 작성하고자 한다.)
1. Controller, Agent를 다운받는 방식
[선행조건]
- Java 11 / 1.8버전 , Path 설정
1-1) ngrinder-controller-3.5.8.war 다운로드
https://github.com/naver/ngrinder/releases/tag/ngrinder-3.5.8-20221230
Release ngrinder-3.5.8 · naver/ngrinder
Changes Shows error message when running without tmpdir property
github.com
1-2) Ngrinder Controller(Web) 가동
java -jar ngrinder-controller-3-5-8.war --port={입력할 포트}
# EX : java -jar ngrinder-controller-3-5-8.war --port=8300
1-3) localhost:{입력한 포트} 접속 후 ID/PWD 'admin' 동일하게 입력 및 Download Agent

1-4) agent 배치파일 실행
# 압축 해제 후 run_agent.bat 실행
run_agent.bat
1-5) 과정 흐름 참고
1-6) Script → Create a Script → script 작성 후 Validate 하여 정상동작하는지 확인
한편, ngrinder를 사용할 때 특정 jdk 버전을 맞추어야하다보니 Path를 변경하는 번거로움이 있을 것이다.
예를 들어 IntelliJ에서 개발을 하다가 Ngrinder를 사용해야할 때 path를 변경해야하는데, 바뀐 path가 잘 적용되지 않는 경우가 있었다.
(다른 분도 이런 상황을 겪어서 wsl2+docker 환경을 만들어 드렸다.)
이때의 대처방법은 2가지 정도가 있는데,
1. Java path를 11버전으로 두고 IntelliJ 프로젝트별로 직접 jdk 버전을 설정한다.
2. Docker 환경으로 ngrinder를 사용해 path 변경을 신경쓰지 않도록 한다.
지금부터는 2번의 방법에 대해 설명하고자 한다!
2. Docker를 활용하는 방식
[선행조건]
- Docker Desktop, Windows Terminal + Ubuntu LTS WSL2 환경
2-1) Docker Hub에서 ngrinder/controller, ngrinder/agent 이미지 Pull 하기
docker pull ngrinder/agent:3.5.5
docker pull ngrinder/controller:3.5.5
#Docker Hub에서 Pull 해온 image 확인
docker images
2-2) Docker Image 기반의 Container 실행하기
docker run -d -v ~/ngrinder-controller:/opt/ngrinder-controller -p {지정할_PORT_번호}:80 -p 16001:16001 -p 12000-12009:12000-12009 ngrinder/controller:3.5.5
#(ex) docker run -d -v ~/ngrinder-controller:/opt/ngrinder-controller -p 8300:80 -p 16001:16001 -p 12000-12009:12000-12009 ngrinder/controller:3.5.5
docker run -v ~/ngrinder-agent:/opt/ngrinder-agent -d ngrinder/agent:3.5.5 {Controller 띄운 자신의 IP}:{Controller 띄운 port}
#(ex) docker run -v ~/ngrinder-agent:/opt/ngrinder-agent -d ngrinder/agent:3.5.5 123.45.678.1:8300
2-3) Docker Container 상태 Docker desktop 통해 확인 혹은 Command로 확인
#a OPTION이 붙지 않으면 현재 동작중인 컨테이너만 표기된다.(a 옵션으로 종료된 컨테이너도 표시함)
docker ps -a
Q. 왜 Docker 방식의 경우 3.5.8 최신버전으로 안하고 3.5.5로 하였는지?
A. 도커로 3.5.8 버전을 사용한 경우 script 생성시 validation Check 기능이 동작하지 않는 현상발생
Q. 굳이 docker를 사용하여서 ngrinder를 사용해야 할지?
A. Controller,Agent를 다운받는 방식의 경우 Java 1.8 / 11 버전을 쓸 것이 강제됨. IntelliJ에서 사용중인 JDK17버전 path에서 JDK11로 변경 후 반영할때 굉장히 곤란한 상황들을 겪음. 레지스트리에서 이전 path를 물고있는듯 하여 JAVA_HOME 등을 아예 삭제하여 재생성하고 jdk 이전버전 삭제 등등의 작업까지해야 path가 제대로 적용이 되는 현상이 생겨서 많은 피로도를 느낌. path 변경에 문제가 안생긴다면 굳이 docker 안써도 된다고 판단됨. 다만 jdk 변경하는 번거로움이 없다는장점 + Agent를 증가시키게 될 경우에도 docker를 찾게 될 것으로 예상하였음.
Q. 왜 일반적인 cmd로 안하고 windows terminal에 wsl2 ubuntu 환경으로 하였는지 ?
A. cmder 환경에서 잘 구동되는 것 확인하였는데 다른날 처음 발생한 에러에 대해 찾아보니 ngrinder-agent Docker 컨테이너가 실행되는 호스트 환경이 Linux임을 권장하고, ngrinder-agent는 Linux 기반 환경을 가정하고 설계되었다는 답변을 받음. 안정적으로 구동하려면 wsl2 ubuntu 환경을 써야할 것으로 보임
그 외에는.. M1 맥북으로도 Docker 환경에서 사용하는 방법을 강구해보았는데, 잘 안되서 Github discussions를 확인해보니 비슷한 환경에서 어려움을 겪는 분들이 꽤 있어보였다. mac환경에서는 path변경 후 source ~/.zshrc 이정도만 해도 path 적용 잘되서 agent&controller 다운받아서 실행하는 방식으로 사용하기 간편한듯.
Reference
https://github.com/naver/ngrinder/tree/develop/docker
GitHub - naver/ngrinder: enterprise level performance testing solution
enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub.
github.com
https://velog.io/@injoon2019/%EB%B6%80%ED%95%98%ED%85%8C%EC%8A%A4%ED%8A%B8-z8jb3vvv
https://blog.naver.com/wideeyed/222173944239
https://velog.io/@hellonayeon/nGrinder-install-and-how-to-use-memo