728x90
nGrinder 네이버에서 개발한 서버 부하 테스트를 위한 오픈 소스 프로젝트다. 애플리케이션을 개발하고 nGrinder에서 여러 가지 가상 시나리오를 만들어 트래픽이 몰렸을 때 성능을 측정할 수 있도록 도와준다.
부하 테스트 nGrinder
nGrinder는 웹 애플리케이션 Controller와 자바 애플리케이션 Agent로 구성되어 있다.
nGrinder 설치
https://github.com/naver/ngrinder/releases
nGrinder 사용방법
controller 실행
# ngrinder-controller-3.6.5.war 파일이 있는 디렉토리 경로로 이동
cd C:\ngrinder # 각자 맞게
# 실행
java -jar ngrinder-controller-3.5.6.war --port=8300
nGrinder 홈페이지 접속
http://localhost:8300/login
- ID: admin(초기값)
- PW: admin(초기값)
Agent 다운로드
- `ngrinder-agent-3.5.6-localhost.tar` 다운로드한 tar파일 압축해제
- 디렉터리로 이동해서 스크립트 파일 실행하여 agent 실행
- ./run_agent.sh - mac
- ./run_agent.bat - window(클릭)
- Agent Management > agent가 정상적으로 띄어져 있는지 확인
간단한 부하 테스트 방법
Script
- 어떤 기능을 테스트해 볼지 script 작성
- script 탭을 클릭하고 "create" 버튼 클릭
- 미리 테스트해 볼 API는 기본적으로 필요하다.
- script name을 지어주고 + 테스트하고자 하는 url을 입력 (http://127.0.0.1:8080/health-check)
- localhost 불가 ➜ 127.0.0.1
- validate 클릭
- save 클릭
Performance Test
- Performance Test 탭으로 이동
- create Test 클릭
- script는 아까 위에서 만든 스크립트 선택
nGrinder 용어 정리
TPS(처리량)란?
- TPS는 "Transactions Per Second"의 약어로, "초당 처리가능한 트랜잭션의 수"
- TPS가 100이라면 초당 처리 할 수 작업이 100이다라고 생각하면 된다.
- TPS 수치가 높을수록 짧은 시간에 많은 작업을 처리할 수 있다고 보면 된다.
Vuser란?
- 가상 사용자(Virtual User)
- ex) "vUser 50"은 가상 사용자(Virtual User)가 50명을 나타낸다. 이것은 부하 테스트 시나리오에서 50명의 가상 사용자가 동시에 시스템 또는 애플리케이션에서 동작하고 있다는 것을 의미한다.
- TPS: 평균 TPS
- Peak TPS: 최고 TPS
- Mean Test Time: 평균 테스트시간
- Executed Tests: 테스트 실행 횟수
- Successful Tests: 테스트 성공 횟수
- Errors: 에러 횟수
- Run time: 테스트 실행시간
TPS 수치는 높고 Mean Test Time은 낮을수록 성능적으로 긍정적
실제 EC2 부하테스트
- Agent: 1
- Vuser: 50
- Script: 간단한 SELECT문을 보냄 (JWT을 헤더에 추가해야 한다면 아래 코드와 같이 추가하면 된다.)
@BeforeProcess
public static void beforeProcess() {
HTTPRequestControl.setConnectionTimeout(300000)
test = new GTest(1, "ap*****r")
request = new HTTPRequest()
grinder.logger.info("before process.")
headers.put("Authorization", "Bearer eyJh*******DFA") // 추가
}
- 테스트를 시작하고 거의 바로 CPU가 100%를 사용하고 있고 Alert를 보면 경고를 해주고 있다.
더보기
하지만 지금의 테스트는 매번 같은 SELECT절을 보내며 테스트하게 돼서 DB캐시 혹은 JPA캐시 등에 저장되어 정확한 성능테스트가 어려울 수 있다.
1-1000 같은 숫자를 랜덤으로 SELECT 하는 테스트로 하면 조금 더 정확하게 테스트를 할 수 있을 것이다.
: 테스트는 다양하게 하는 것이 좋고, 성능테스트를 할 때는 모수를 많이 두는 것이 좋다.
실제 EC2 부하테스트 결과 분석
- Total Vusers (가상 사용자 수): 50
- TPS (초당 트랜잭션 수): 평균 155.5
- Peak TPS (최대 초당 트랜잭션 수): 186.0
- Mean Test Time (평균 테스트 시간): 325.68ms
- Executed Tests (실행된 테스트 수): 8,435
- Successful Tests (성공한 테스트 수): 8,435
- Errors (오류 수): 0
- Run time (실행 시간): 00:01:01 (1분 1초)
응답 시간 목표: 평균 테스트 시간이 325.68ms로, 목표로 한 500ms(0.5초) 이내에 있다. 이는 시스템이 사용자에게 0.5초 이내에 결과를 제공할 수 있음을 의미한다.
TPS와 사용자 수: 평균 TPS는 155.5, 최대 TPS는 186.0으로, 시스템이 초당 최소 155.5번에서 최대 186.0번까지 트랜잭션을 처리할 수 있음을 보여준다. 50명의 가상 사용자로 이러한 처리량을 달성했으며, 준수한 동시 사용자 수를 지원할 수 있음을 나타낸다.
성공률과 안정성: 실행된 테스트 수가 1분에 8,435건이며, 모든 테스트가 성공적으로 수행되었다. 이는 시스템의 높은 안정성과 신뢰성을 나타낸다.
인프런에서 진행한 인큐님의 강의(백엔드 개발자 성능 개선 초석 다지기)를 참고한 포스팅입니다. 문제시 바로 삭제하겠습니다. 언제나 잘못된 설명이나 부족한 부분에 대한 피드백은 환영입니다🤍
728x90