본문 바로가기
Develop

API 성능 테스트를 위한 nGrinder 시작하기

by jaeyoungb 2023. 12. 25.

nGrinder는 네이버에서 제작한 The Grinder 기반의 테스팅 플랫폼이다.

- nGrinder 공식 페이지: https://naver.github.io/ngrinder/

 

nGrinder

Please post questions in Discussions not Issues. nGrinder 3.5.5-p1 version is now available. Check the changes at here. nGrinder is a platform for stress tests that enables you to execute script creation, test execution, monitoring, and result report gener

naver.github.io

 

이전에 진행했던 사이드 프로젝트에서 Querydsl과 Fetch Join을 통해 N+1 문제를 해결했었다. 당시에 이렇게 해결했던 부분은 단순히 콘솔창에 로깅되는 쿼리 호출문의 개수를 보며 성능이 개선되었다라는 것 밖에는 뚜렷한 개선 사항을 확인하지 못했었다. 좀 더 확실한 개선점을 확인하기 위해, API 성능 테스팅 툴인 nGrinder를 이용해보았다. 이전에 JMeter라는 툴을 사용해본 적이 있지만, nGrinder와의 성능 차이는 크게 없는 것 같아 nGrinder를 택했다.

 

 

📌 nGrinder의 구성 요소 및 시스템 아키텍처

- controller: 테스트의 대부분의 작업이 진행되는 웹 기반 GUI 시스템

- agent: 컨트롤러의 명령어를 받아 target 머신에 프로세스와 스레드를 실행, 테스트하려는 머신에 이 agent를 설치

- target: 테스트하려는 target 머신

 

nGrinder 시스템 아키텍처

출처: https://github.com/naver/ngrinder/wiki/Architecture

 

Architecture

enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub.

github.com

 

 

📌 nGrinder 설치 전 준비사항

Java 17 버전을 사용 중이었고, nGrinder 스크립트 검증 시 에러가 발생했었다. 6월달 기준 nGrinder는 Java 8 혹은 11 버전을 사용해야 한다는 글이 있었다. Java 11 버전 이후의 버전을 사용 중이라면, OS에 설정되어 있는 Java 버전을 8 or 11로 낮춰주어야 한다.

- 참고 글: https://github.com/naver/ngrinder/discussions/966

 

에이젼트 실행오류 · naver/ngrinder · Discussion #966

ngrinder ver 3.5.8 OS Mac montery 12.5.1 java version "20.0.1" 에이전트 다운받고 ./run_agent.sh 실행하면 위와같이 에러가 나서 해결 방법을 문의드려요ㅠㅠ Exception in thread "main" java.lang.UnsatisfiedLinkError: /Users/jeeh

github.com

https://github.com/naver/ngrinder/discussions/982

 

검증 시 에러 발생... · naver/ngrinder · Discussion #982

하단과 같은 에러가 발생합니다. 현재 진행하는 프로젝트 java 버전이 17인데, 해당 프로젝트의 java 버전을 다운그레이드 하지 않는 이상 실행을 못하는 걸까요? 아니면 프로젝트 파일이 아닌, mac

github.com

 

 

📌 nGrinder 설치 과정(mac 기준)

1. https://github.com/naver/ngrinder/releases 해당 주소에서 war 파일을 다운받는다. (2023.12.25 기준 3.5.8ver)

 

2. 터미널을 통해 war 파일이 있는 디렉토리로 이동한 후, 다음 명령어를 입력한다.

$ java -Djava.io.tmpdir=${NGRINDER_HOME}/lib -jar ngrinder-controller.war --port 7070
e.g.) $ java -Djava.io.tmpdir=/Users/jaeyoung/.ngrinder/lib -jar ngrinder-controller.war --port 7070
NGRINDER_HOME 환경변수 지정해주거나 현재 유저패스 값 입력, 본인 후자 선택

기본적으로 port 번호를 설정해주지 않으면, 8080 port를 사용한다. 로컬에서 nGrinder를 사용하는 입장에서 애플리케이션 실행 port 번호인 8080과 겹치지 않기 위해 7070으로 실행해주었다. 이미 사용 중인 port 번호가 아닌 임의의 번호를 설정해주면 된다.

 

만약 위 명령어 입력 시 'unreachable IP'와 연관된 에러가 발생한다면, mac 유저이름/.grinder/system.conf에 controller.ip=127.0.0.1을 한 줄 추가해주면 된다.

관련 글: https://github.com/naver/ngrinder/discussions/991

 

컨트롤러 실행 시, 해당 에러가 발생합니다. · naver/ngrinder · Discussion #991

mac os 사용 중이고, java -Djava.io.tmpdir=/Users/jaeyoung/.ngrinder/lib -jar ngrinder-controller-3.5.8.war -p 7070 터미널에서 위 명령어 실행 시, 다음과 같은 에러가 발생합니다. 어쩔 때는 에러 없이 정상 동작하기도

github.com

 

3. 위 명령어를 통해, controller가 정상적으로 실행되었다면 웹 브라우저를 켜고 localhost:7070 입력하여 controller 접속한다.(초기 id/password는 admin/admin)

 

4. agent 다운로드 클릭한 후, 터미널에서 다운된 파일 경로로 이동하여 다음 명령어를 입력한다.

tar -xvf ngrinder-agent-{version}-localhost.tar
e.g.) tar -xvf ngrinder-agent-3.5.8-localhost.tar

 

5. 압축이 풀리면 터미널에서 ngrinder-agent로 이동한 후, 다음 agent 실행 명령어를 입력한다.

./run_agent.sh

controller를 실행시킨 상태에서, agent를 실행해야 한다.

 

6. agent까지 생성된 것을 확인한다.

 

 

📌 nGrinder 테스트 진행 과정

1. 먼저 스크립트 파일을 생성한다.

 

2. groovy 타입과 스크립트 이름을 설정해준다. 성능을 테스트할 API의 HTTP Method와 Query String을 포함한 전체 URL을 적어 생성한다. url에 localhost:8080가 포함된다면, 127.0.0.1과 같은 로컬 IP 주소를 적어주도록 하자. e.g.)http://127.0.0.1:8080/posts/1

 

3. 기본적인 스크립트 파일이 생성되고, 필요 시에 커스터마이징하여 사용하면 된다. 스크립트 파일 작성이 완료되었다면, 우측 상단의 Validate를 통해 검증해주도록 한다. Java 버전이 맞지 않을 경우, 해당 검증 부분에서 에러를 마주칠 수 있다.

 

4. Performance Test 탭으로 이동한 후, 테스트를 생성한다. 프로세스나 스레드, Duration / Run Count와 같은 설정들은 개인 테스트 상황에 맞게 설정하면 된다. Script 항목은 이전에 생성해둔 스크립트를 선택해주면 된다. 이후, 우측 상단의 Save and Start를 눌러 테스트를 실행한다. 테스트 생성과 실행 방법에 대한 자세한 설명은 구글링을 통해 쉽게 찾고 진행해볼 수 있다.

 

 

참고 글: https://github.com/naver/ngrinder

 

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://blog.advenoh.pe.kr/devops/nGrinder-%EC%82%AC%EC%9A%A9%EB%B2%95%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90/

 

nGrinder 사용법에 대해서 알아보자

1. 들어가며 nGrinder는 스트레스 테스트 도구로 Grinder 오픈소스 기반으로 작성되었고 네이버에 의해서 개발되었다. nGrinder 설치에서부터 API 테스트까지 알아보자. 1.1 nGrinder 구성요소 구성 설명 con

blog.advenoh.pe.kr

https://velog.io/@may_yun/Ngrinder-MAC-M1-%EC%84%A4%EC%B9%98

 

[Ngrinder] MAC M1 설치

Ngrinder: https://github.com/naver/ngrinder/releases현재 기준 3.5.8 최신위 링크에 들어가서 war 파일을 다운 받는다터미널에서 war 파일 실행다운받은 war 위치에서 실행해야한다📌 발생한 에러: nGrinder

velog.io

http://ngrinder.373.s1.nabble.com/controller-td3268.html

 

ngrinder-user-kr - controller 설치오류

 

ngrinder.373.s1.nabble.com

 

 

 

추후 더미 데이터를 추가한 후, nGrinder를 사용하여 API 성능 테스트를 결과 비교에 대해 블로깅할 예정이다.

'Develop' 카테고리의 다른 글

조회 쿼리 개선 + 성능 테스트 (Querydsl, nGrinder)  (0) 2024.01.10
H2 DB - 3가지 모드(Embedded, In-Memory, Server Mode)  (0) 2023.10.05
SQL 쿼리 실행 순서  (3) 2023.09.27
TCP/IP 4계층 모델  (0) 2023.07.12
네트워크 기초  (0) 2023.07.12