imhamburger 님의 블로그
성능 테스트 도구 nGrinder 이해하기 본문
nGrinder는 네이버에서 개발한 오픈소스 성능 테스트 도구이다.
예를들어, 내가 웹사이트를 만들었는데 이 웹사이트에 유저가 늘어나는 상황이라면 지연시간, 에러 발생 등이 일어날 수 있다. 이러한 상황말고도 다양한 상황들을 내가 시나리오를 짜고 그 시나리오를 nGrinder에서 간편하게 테스트해 볼 수 있다.
nGrinder는 웹, API서버, 데이터베이스 등 다양한 시스템의 성능을 테스트할 때 유용하며 특히 대규모 서비스의 안정성을 검증하는 데 효과적이다.
nGrinder 설치와 사용법은 공식문서를 확인하면 된다.
참고로 nGrinder 실행 시 다른 포트번호로 실행시키고 싶다면 아래와 같이 --port {번호입력} 을 추가하면 된다.
java -jar -Djava.io.tmpdir=${NGRINDER_HOME}/lib ngrinder-controller-3.5.9-p1.war --port 8949
나는 맥북이라 그런지 실행할 때 오류가 났었는데 tmpdir 경로를 별도로 지정해줘야 했다.
나는 .zshrc 에 NGRINDER_HOME 경로를 저장해놓았다.
export NGRINDER_HOME=/Users/seon-u/app/ng/ngrinder-controller
nGrinder를 실행하면 나오는 첫화면이다. 테스트하고 싶은 URL을 입력하고 Start Test를 누르면 된다.
Start하기 전에 Agent 를 설치해줘야 한다. nGrinder는 Controller와 Agent 로 이루어져 있다.
- Controller는 성능 테스트를 관리하고 조정하는 역할이다. 테스트 스크립트를 작성하고, 실행하고, 결과를 분석하는 등 모든 관리 작업이 Controller에서 이루어진다. 위와 같이 웹 인터페이스를 통해 Controller에 접근하여 테스트를 설정하고 모니터링 한다.
- Agent는 Controller의 지시에 따라 실제로 부하를 생성하는 컴포넌트이다. 테스트 스크립트를 실행하고 시뮬레이션하여 지정된 서버에 트래픽을 발생시킨다. Agent는 여러 대의 서버에 분산 배치할 수 있으며 이를 통해 대규모 테스트를 수행할 수 있다. Agent는 독립적으로 실행될 수 있어, Controller와의 연결이 끊어지더라도 설정된 테스트를 계속 수행할 수 있다.
여러 대의 Agent가 동시에 테스트를 수행함으로써, 대규모의 트래픽을 생성할 수 있다.
예를 들어, 10대의 Agent가 각각 1000명의 가상 사용자를 시뮬레이션하면, 총 10,000명의 사용자가 동시에 접속하는 상황을 시뮬레이션할 수 있다.
또한 한국과 미국에 각각 Agent를 배치하면, 두 지역에서 동시에 발생하는 트래픽을 테스트할 수 있다.
Agent 설치는 왼쪽상단에 admin에 커서를 갖다대면 Download Agent를 클릭하여 할 수 있다.
혹은 터미널에서 wget {링크} 를 하여 설치할 수도 있다. tar 파일이기 때문에 아래와 같이 압축을 풀어주도록 하자.
tar -xvf {파일명.tar}
에이전트 실행
bash run_agent.sh
사실 nGrinder처럼 성능 테스트를 해주는 도구들이 여러 개 있다.
도구 | 특징 | 지원언어 | 웹 기반 UI | 분산 테스트 | 오픈소스 | 주요 사용사례 |
nGrinder | 네이버 개발, 분산 부하 테스트 |
Groovy, Jython | O | O | O | 대규모 웹 서비스, API 서버 성능 테스트 |
JMeter | 가장 널리 사용되는 성능 테스트 도구, 다양한 플러그인 및 프로토콜 지원 |
Java | X | O | O | 웹 애플리케이션, 데이터베이스, FTP 서버 등 |
Gatling | 고성능, Scala 기반, 코드로 성능 테스트 시나리오 작성 |
Scala | X | O | O | 실시간 웹 애플리케이션, API 서버 성능 테스트 |
Locust | Python 기반, 이벤트 기반으로 가벼운 성능 테스트 가능 |
Python | O | O | O | API 서버, 웹 애플리케이션 |
k6 | JavaScript 기반, 클라우드 네이티브, CI/CD 파이프라인 통합에 강점 |
JavaScript | X | O | O | API 서버, 마이크로서비스, 클라우드 인프라 성능 테스트 |
Artillery | JavaScript 기반, 쉽고 빠른 테스트 설정, Node.js 환경과 통합 용이 |
JavaScript | X | O (pro버전) |
O | API 서버, 마이크로서비스, 실시간 채팅 앱 |
Tsung | 고성능, 분산 부하 테스트, Erlang 기반 |
Erlang | X | O | O | 실시간 채팅 서버, XMPP, HTTP 성능 테스트 |
LoadRunner | 상용 도구, 높은 신뢰성, 다양한 프로토콜 지원 |
C, Java, VBScript 등 |
O | O | X | 엔터프라이즈급 애플리케이션,데이터베이스 |
nGrinder는 Jython을 지원하기 때문에 nGrinder 설치 전 자바 11버전을 설치해줘야 한다.
(11버전이 에러없이 제일 잘 돌아간다고 한답니다~ 실제로 17버전은 에러가 발생하였다.)
nGrinder 웹인터페이스에서 Start Test를 누르면 다음과 같은 테스트 시나리오를 만들 수 있는 설정들이 나온다.
아래에 Vuser는 Virtual User로 테스트한 유저수를 의미한다. 1초 = 1000밀리초(MS)
테스트를 다 돌리고나면, 아래와 같이 결과리포트를 확인할 수 있다.
Total Vusers | 테스트한 유저 수 |
TPS | 초당 처리 가능한 요청 수 |
Peak TPS | TPS가 가장 높을 때를 의미 |
Mean Test Time | 지연 시간 |
Executed Tests | 실행한 테스트 수 |
Successful Tests | 성공한 테스트 수 |
Errors | 에러 발생 수 |
Run time | 실행 시간 |
'끄적끄적' 카테고리의 다른 글
Firebase - Deploy 해도 화면이 안나오는 이유 (0) | 2024.08.29 |
---|---|
카프카(Kafka) - 파티션 자동할당, 수동할당 (0) | 2024.08.23 |
pdm - 의존성 관리도구, 가상환경에서 pytest 실행하기 (0) | 2024.07.30 |
Mac 터미널 명렁어 - pwd, cd, mkdir (0) | 2024.06.17 |
스텔라장 - L'amour, Les Baguettes, Paris (1) | 2024.06.12 |