Goal
성능테스트를 고려하게 되는 경우와 방법에는 여러가지가 있다.
본 글에서는 nGrinder를 통해 간단하게 현재 내 서비스가 감당가능한 TPS을 확인할 수 있는 방법에 대해서 알아본다.
선행조건
부하 테스트 Tool
- nGrinder (간편 사용가이드)
BMT(BenchMark Test)
- 실제 서비스에 부하테스트를 할 수 없기 때문에, 리얼서버와 최대한 비슷한 환경의 테스트 환경을 구축한다.
- 서버: CPU, Memory
- 애플리케이션: JVM 옵션, 로그레벨
그 외
- DDOS White List 설정: TPS 확인을 위해 많은 요청을 할 것이기 때문에 DDOS방어 설정이 있다면, nGrinder Agent 호스트 IP를 등록해둘 필요가 있다.
- 각종 문제시 걸어둔 알람설정을 해지해둘 필요가 있다.
- 3rd Party API를 호출하는 경우, 적절한 Mock처리가 필요하다.
로드 테스트
Condition
- Peek Time의 Duration을 기준으로 부하테스트를 진행한다.
- 본 글에서는 1시간 기준으로 부하테스트를 진행한다.
Groovy 스크립트
- nGrinder 설정의 Vuser는 응답이오면 바로 재요청을 하는 방식이기 때문에 1초에 꼭 1회만 요청하지 않는다.
- 1Vuser가 1초에 1회의 요청만하게하여 테스트 기준치를 정할 수 있도록 Groovy 스크립트에 1초 sleep하는 내용을 추가한다.
1
grinder.sleep(1000)
Test
- 아래와 같이 Vuser를 늘려가면서 적당한 TPS를 구한다.
Vuser | Process | Thread | Duration | Report |
---|---|---|---|---|
100 | 2 | 50 | 1h | |
150 | 3 | 50 | 1h |
Report
- 위에 결과표를 클릭해서보면 100TPS 에서는 비교적 안정적으로 응답을하였고, 150TPS 에서는 그래프가 불안정함을 볼수 있다.
- 본 테스트의 적절한 TPS는 120TPS 정도로 볼 수 있다.
결론
- nGrinder를 통해 서비스의 적절한 TPS 확인할 수 있는 방법에 대해 알아보았다.
- 결과 그래프가 평평하지 않고 아래로 내려가는것은 해당시점에 응답이 느려졌다는 의미이고, 정확한 원인 판단을 위해선 APM툴(Scouter, Pinpoint등)을 이용해야 한다.