0%

웹 애플리케이션 로드테스트

Goal

성능테스트를 고려하게 되는 경우와 방법에는 여러가지가 있다.
본 글에서는 nGrinder를 통해 간단하게 현재 내 서비스가 감당가능한 TPS을 확인할 수 있는 방법에 대해서 알아본다.

선행조건

부하 테스트 Tool

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 100TPS
150 3 50 1h 150TPS

Report

  • 위에 결과표를 클릭해서보면 100TPS 에서는 비교적 안정적으로 응답을하였고, 150TPS 에서는 그래프가 불안정함을 볼수 있다.
  • 본 테스트의 적절한 TPS는 120TPS 정도로 볼 수 있다.

결론

  • nGrinder를 통해 서비스의 적절한 TPS 확인할 수 있는 방법에 대해 알아보았다.
  • 결과 그래프가 평평하지 않고 아래로 내려가는것은 해당시점에 응답이 느려졌다는 의미이고, 정확한 원인 판단을 위해선 APM툴(Scouter, Pinpoint등)을 이용해야 한다.