본문 바로가기

# Development/Tools

[nGrinder] 성능테스트: nGrinder 설치하기, 사용하기

nGrinder 설치하기, 사용하기:  API 성능 테스트

nGrinder란?

서버의 부하 테스트를 위한 도구이다. 웹 애플리케이션을 서비스하기 전에 서버가 얼마나 많은 사용자를 수용할 수 있는지 요청을 전송해봄으로써 서버의 성능을 측정해볼 수 있다.

 

nGrinder는 Controller와 Agent로 이루어져 있다.

  • Controller
    • 웹 기반의 GUI 시스템
    • 테스트 전반적인 작업이 이 Controller 에 의해서 작동
  • Agent
    • Controller 의 명령어를 받음
    • Target 머신에 프로세스와 스레드를 실행시켜 부하를 발생 시킴
    • 복수의 머신에 설치되어서 Controller 의 신호에 따라서 일시에 부하를 발생 시킴
  • Target
    • 테스트를 하기위한 타겟 머신
    • 테스트를 하려는 서버를 의미함

nGrinder 설치하기

JAVA 설치

nGrinder를 설치하기 위해서는 우선 자바가 설치되어 있어야 한다.

https://www.oracle.com/java/technologies/downloads/#jdk19-windows

 

Download the Latest Java LTS Free

Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.

www.oracle.com

 

Controller 설치

자바가 설치 되었다면 아래의 nGrinder 다운로드 링크에서 최신 버전의 .war 파일을 다운로드 한다.

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

 

 

파일이 저장된 폴더에서 cmd 창을 열어서 자바로 .war 파일(Controller)를 실행한다.

java -jar ngrinder-controller-3.5.8.war --port 7070

 

 

Controller를 실행한 포트 번호(7070)로 브라우저 주소창에 http://localhost:7070/login 를 입력하면 아래와 같은 화면이 나타난다. 초기 아이디와 패스워드는 모두 admin이다.


Agent 설치

오른쪽 상단 admin > Download Agent 를 클릭해서 Agent 압축 파일을 다운받는다.

 

 

다운받은 파일의 압축을 풀어준다.

tar -xvf ngrinder-agent-3.5.8localhost.tar

 

 

생성된 ngrinder-agen 디렉터리에는 여러 라이브러리 파일과 에이전트 실행 스크립트가 있다.

 

 

run_agent, stop_agent를 통해 에이전트를 켜고 끌 수 있다. window의 경우 run_agent.bat, 리눅스 기반일 경우 run_agent.sh 스크립트를 실행하여 에이전트를 실행한다.

 

 

오른쪽 상단 admin > Agent Management에 들어오면 실행중인 Agent를 확인할 수 있다.


API 성능 테스트

API 성능 테스트를 진행하기 위한 Script 생성

Script > Create > Create a script 클릭

 

 

Script Name 설정 및 테스트 하려는 API의 URL 입력한다.

 

 

입력한 방식으로 URL을 호출하는 스크립트가 생성된다. Validate 버튼을 눌러 테스트 해볼 수 있다.

 

 

처음 테스트를 했더니 아래와 같은 에러 메세지가 나왔다.

net.grinder.engine.common.EngineException: Setting of Local DNS provider failed

 

 

찾아보니 JDK 버전이 높아서 생기는 에러라고 해서 jdk-19에서 jdk-11로 재설치 하니 validate 테스트에 성공했다.

 

 

혹시 params를 가지는 GET 방식의 API를 호출한다면, 생성된 스크립트에서 class TestRunner() 안의 parmas = [:] 에 keyd와 value를 아래와 같은 형식으로 채워주면 된다!!!

 

테스트 제약 조건 변경

진짜 성능이 안좋은 API 를 테스트 하다보면 script validation 과정에서 이런 문구를 만날 수 있다. .

Validation should be performed within 100 sec.

 

이럴 때는 nGrinder의 기본 제약 조건을 변경해줘야 한다. 변경은 admin > system configuration에서 할 수 있다.

 

 

system configuration에 들어가서 validation time out을 재정의 해주면 된다.

 

Performance Test

이제 생성한 스크립트를 가지고 테스트를 진행해볼 차례다. 왼쪽 상단의 Performance Test를 클릭 한 후 Create Test를 클릭한다.

 

Test 속성 설정

Test Configuration의 속성들을 설정해서 테스트를 진행 할 수 있다.

 

Basic Configuration
⚡ Agent
    └──성능 측정에 사용할 Agent 개수

⚡ Vuser per agent
    └──Agent 당 설정할 가상 사용자 수
    └──동시에 요청을 날리는 사용자 수를 의미

⚡ Process / Thread
    └──하나의 Agent에서 생성할 프로세스와 스레드 개수

⚡ Script
    └──성능 측정 시 각 Agent에서 실행할 스크립트
    └──앞서 API 호출 과정에서 생성한 Script를 연결(.groovy)하거나 Github에서 가져올 수 있다.

⚡ Duration (HH:MM:SS)
    └──성능 측정 수행 시간

⚡ Run Count
    └──스레드 당 테스트 코드를 수행하는 횟수


Enable Ramp-up

⚡ Initial Count
    └──처음 시작 시 가상 사용자 수

⚡ Initial Sleep Time
    └──테스트 시작 시간

⚡ Incremental Step
    └──Process 또는 Thread를 증가시키는 개수
 
 ⚡ Interval
    └──Ramp-up 설정을 적용할 상승 시간을 설정합니다.

 

Report 확인

TEST를 실행하고 나면 Report 탭에서 수행 결과를 확인 할 수 있는데, 여기서 Detailed Report를 클릭하면 더 자세한 결과를 볼 수 있다.

 

 

 

[성능 테스트] Throughput(TPS), Latency

Throughput(TPS), Latency: API 성능 테스트 성능테스트란? 제작한 웹 서버(API)가 얼마나 많은 사용할 수 있는지 테스트하거나, 두가지 설계에 대해 어떤 설계가 더 좋은 성능을 내는지 확인하는 테스트

yoon001.tistory.com

Summary
⚡ TPS(Transaction Per Second)
    └── 초당 처리량

⚡ Peak TPS
    └── 최대 처리량

⚡ Mean Test Time (MTT)
    └──평균 응답 시간

⚡ Mean Time to First Byte (MTFB)
    └── 평균 첫 번째 바이트 도달 시간
    └── Response Time으로 볼 수도 있음

 

** 응답시간 (Response Time)
사용자가 해당 업무를 요청한 시점부터 서버로부터 그 결과에 대한 응답을 받아서  사용자에게 요청 결과를 반환하는 데 걸리는  총시간이다. 사용자 측면에서의 성능을 평가하는 KPI로 주로 사용된다.

 

 

<참고>