nGrinder는 네이버에서 제작한 The Grinder 기반의 테스팅 플랫폼이다.
- nGrinder 공식 페이지: https://naver.github.io/ngrinder/
이전에 진행했던 사이드 프로젝트에서 Querydsl과 Fetch Join을 통해 N+1 문제를 해결했었다. 당시에 이렇게 해결했던 부분은 단순히 콘솔창에 로깅되는 쿼리 호출문의 개수를 보며 성능이 개선되었다라는 것 밖에는 뚜렷한 개선 사항을 확인하지 못했었다. 좀 더 확실한 개선점을 확인하기 위해, API 성능 테스팅 툴인 nGrinder를 이용해보았다. 이전에 JMeter라는 툴을 사용해본 적이 있지만, nGrinder와의 성능 차이는 크게 없는 것 같아 nGrinder를 택했다.
📌 nGrinder의 구성 요소 및 시스템 아키텍처
- controller: 테스트의 대부분의 작업이 진행되는 웹 기반 GUI 시스템
- agent: 컨트롤러의 명령어를 받아 target 머신에 프로세스와 스레드를 실행, 테스트하려는 머신에 이 agent를 설치
- target: 테스트하려는 target 머신
출처: https://github.com/naver/ngrinder/wiki/Architecture
📌 nGrinder 설치 전 준비사항
Java 17 버전을 사용 중이었고, nGrinder 스크립트 검증 시 에러가 발생했었다. 6월달 기준 nGrinder는 Java 8 혹은 11 버전을 사용해야 한다는 글이 있었다. Java 11 버전 이후의 버전을 사용 중이라면, OS에 설정되어 있는 Java 버전을 8 or 11로 낮춰주어야 한다.
- 참고 글: https://github.com/naver/ngrinder/discussions/966
https://github.com/naver/ngrinder/discussions/982
📌 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
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
https://velog.io/@may_yun/Ngrinder-MAC-M1-%EC%84%A4%EC%B9%98
http://ngrinder.373.s1.nabble.com/controller-td3268.html
추후 더미 데이터를 추가한 후, 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 |