본문 바로가기
JAVA SPRING

API 부하테스트 툴 ngrinder

by 임만율 2024. 7. 8.

성능테스트, 부하테스트 말을 많이 들어봤지만 제대로 해본 적이 없었습니다.

그래서 이번에 한번 해보자! 하고 이것저것 찾아보면서 해봤던 기록을 남깁니다.

 

우선 성능테스트 툴은 다양한데요. 

ngrinder, Artillery, JMeter 등등 많습니다.

 

제일 처음해본건 JMeter 인데 한번에 잘 안되더라구요 ㅎ 그때 몇시간 해보다가 다음에 해보자 하고 아직 못해봤고.. 

이번에 다시 해보자! 했을 때 선택한 툴은 바로 ngrinder 입니다. 

 

ngrinder 는 네이버에서 오픈소스로 공개한 부하테스트 툴 입니다. 

이 녀석도 세팅에만 한참이 걸렸습니다.... 오류가 어찌나 다양하게 나는지 ㅋㅋ 

세팅 및 사용법 정리해보겠습니다.

 

우선 저는 intel mac 환경입니다. 

 

간단히 개념 정리!

  • Controller
    • 인터페이스를 제공하는 서버
    • 스크립트 생성 및 테스트 명령을 Agent 에 전달하는 역할
  • Agent
    • controller 의 명령을 받아 실제 부하를 발생시키는 서버
  • Target
    • 부하테스트의 대상이 되는 서버

 

1. ngrinder-controller 다운로드 및 실행

https://github.com/naver/ngrinder/releases

 

Releases · naver/ngrinder

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

github.com

 

최신 버전으로 다운받았습니다. 현재 시점으로 최신은 3.5.9 입니다. 

원하는 위치에 압축 풀고 

java -jar ngrinder-controller-3.5.9.war --port=8300

(포트는 마음대로)

 

3.5.9 버전은 JDK 11 을 사용하셔야 합니다. 그 이상도 가능한지는 안해봐서 모르겠지만 8버전은 오류났습니다.

이 오류가 난다면 자바 버전을 변경해줘야 해요.

echo $JAVA_HOME 으로 자바 환경변수 설정 확인해보고 버전이 다르다면 

 

저는 zsh 사용 중이라 

vi ~/.zshrc

source ~/.zshrc

 

순서로 환경변수 설정을 다시 해줍니다.

 

그리고 다시 실행하면 또 오류가 날 수 있어요.

ERROR
Please set `java.io.tmpdir` property like following. tmpdir should be different from the OS default tmpdir.
`java -Djava.io.tmpdir=${NGRINDER_HOME}/lib -jar ngrinder-controller.war`

 

tmp 임시파일을 지정하지 않아서 나는 오류입니다.

임시파일 위치를 지정해서 실행합니다. 

java -Djava.io.tmpdir=${NGRINDER_HOME}/lib -jar ngrinder-controller-3.5.9.war --port 8300

 

서버가 실행되면

 

 

로컬 주소로 화면에 접속해봅니다.

 

아이디 패스워드는 admin / admin 입니다.

 

2. Agent 다운로드 및 실행

 

상단에 있는 에이전트 다운로드 를 선택합니다.

 

이렇게 다운받은 run_agent.sh 파일을 실행시켜줍니다. 파일을 클릭해도 됩니다!

 

그러면 화면에 에이전트가 생기게 됩니다.

 

 

3. 스크립트 작성 

상단에 있는 '스크립트' 로 이동합니다.

스크립트 > 만들기 > 스크립트 만들기

 

보통 Groovy 로 스크립트를 많이들 작성하더라구요. 저도 Groovy 를 선택했습니다.

테스트하고자 하는 시나리오가 있으면 스크립트를 수정하면 됩니다. 

 

 

 

기본적으로 간단한 테스트는 자동으로 작성되는거 그대로 사용하면 됩니다.

다음에는 실제 제 프로그램에 필요한 테스트 시나리오를 잘 짜서 스크립트까지 작성해보고 싶네요.

 

 

4. 성능테스트

상단의 '성능테스트' 로 이동합니다.

테스트 생성 클릭!

 

에이전트는 아까 실행한 에어전트 하나를 쓰면 됩니다.

스크립트도 위에서 만든 스크립트를 선택합니다.

  • 에이전트 : 성능 측정에 사용할 Agent
    • 여러개를 구성하고 싶은 경우 docker 나 cloud service 를 고려해 볼 수 있다.
    • 일반적인 로컬에서 테스트 할 경우 1이 고정 값
  • 에이전트별 가상 사용자 : 프로세스 수 * 쓰레드 수
    • 동시에 요청하는 사용자
  • 테스트 기간 : 어느 정도 길게 확보해줘야 의미있는 평균치가 나온다고 한다.
  • 실행 횟수 : 쓰레드 당 테스트 코드 수행하는 횟수
  • Ramp-up : 점진적인 부하 테스트

 

보고서를 보면 상세한 결과를 확인할 수 있어요!

 

보고서

 

상세 보고서

  • TPS : 초당 트랜잭션 완료 수
  • 최고 TPS : 초당 트랜잭션 수의 최대치
  • 평균 테스트 시간 : 평균 응답 시간
  • 총 Vuser : 버츄얼 유저, 동시에 접속하는 가상 사용자의 수
  • 총 실행 테스트 : 테스트 실행 횟수

 

 

이번에 해본건 경험 수준이었고 다음에는 진짜 스크립트를 짜서 해보고 싶다는 생각이 들었어요.

부하 테스트를 실전에서 해볼 일이 없었어서 이렇게라도 해본 건 재밌었습니다!

'JAVA SPRING' 카테고리의 다른 글

Spring Batch 5 ItemProcessor 에서 return list  (0) 2024.06.02
커넥션, 트랜잭션 간단 정리  (0) 2024.06.02
Java 예외 처리  (0) 2024.05.27
Spring Boot CORS 설정  (0) 2023.09.03