ward-study-reservation 프로젝트 성능을 JMeter Tool을 사용해서
무한 시간대로 설정해서 성능테스트를 해보았습니다.
그러기위해 JMeter의 설정지수들을 알아야 합니다.
먼저 ThraedGroup 설정지수를 보자면,
Number of Threads
스레드 개수이며, 가상 유저 수라고 생각하면 된다.
HTTP Request Sampler 가 2개일 경우, 스레드를 1로 설정해도, 2번의 request 가 발생한다. 가상 유저수가 HTTP Request Sampler 에 비례한다.
Ramp-Up
스레드 당 생성시간으로, 만약 Number of Threads = 100이고, Ramp-Up = 10 라면, 100명의 유저를 생성할 때 까지 10초가 걸린다는 말이다. 즉, 1초 동안 10명의 유저가 요청을 하는것이고, 만약 Ramp-Up = 0 으로 설정하면, 동시 접속 자 수는 100명이 된다.
Loop Count
하나의 스레드가 수행할 작업 수이며, 만약 Number of Threads = 100이고, Loop Count = 10 이면, 100명의 유저는 동일한 작업을 10번 수행하게 되며, 총 1000번 (총 요청횟수) 이 수행된다.
다음은 JMeter 성능테스트 지표가 무엇인지 설명은 아래와 같습니다.
Summary Report
- Label : Sampler 명
- Samples : 샘플 실행 수 (Number of Threads X Ramp-up period)
- Average : 평균 걸린 시간 (ms)
- Min : 최소
- Max : 최대
- Std. Dev. : 표준편차
- Error % : 에러율
- Throughput : 초당 처리량 (bps) = JMeter에서는 시간 단위를 보통 TPS (Transaction Per Second)로 표현
- Received KB/sec : 초당 받은 데이터량
- Sent KB/sec : 초당 보낸 데이터량
- Avg. Bytes : 서버로부터 받은 데이터 평균
조회성능을 측정하기 위해 ThraedGroup 설정을 합니다.
ThraedGroup에 Number of Threads(users)를 300
으로 설정,
사용자 수가 300명
이고 해당 Room에 대한 Reservation 조회 성능을 측정해보았습니다.
/room/1/reservation
JMeter에서는 모든 요소들은 Summary Report
에서 확인할 수 있습니다.
가장 중요한 것은 TPS(Transation per sec)
인데 JMeter에서는 Throughput
지표로 확인할 수 있습니다.
4분
을 기준으로 TPS(Thought)가 3973
으로 나왔습니다.
그리고 오류율은 0.03%
가 확인되었습니다.
똑같이 사용자 수가 300명
이고 해당 캐싱이 적용된
Room에 대한 Reservation 조회 성능을 측정해보았습니다.
4분기준으로 TPS(Thought)가 24389
으로 나왔습니다.
캐싱이 적용되면 엄청난 조회성능이 이루어졌음을 확인됩니다.
대략 513%
성능 개선이 이루어진 것입니다.
사용자 수가 가장 많이 사용할 서비스 기능은 study-group 등록일 것으로 예상, 이 api의 성능을 테스트해보았습니다. 테스트해본 결과는 아래와 같습니다.
Summary Report
에서 Saturation Point로 확인된 Throughput
은 706
으로 나옵니다.
무한시간대로 설정했지만, 시간대는 4분
의 기간으로 살펴본 결과, 28만여건
의 Study-group 엔티티가 등록, 이 시간동안 오류율은 0.78%
를 기록했습니다.
💥주의사항
무한시간대의 설정
은 해당 로컬 PC CPU에 무리를 줄 수 있습니다.
CPU 사용량은 제 CPU(amd-ryzen5 5500U)상 100% 사용량을 치고 나왔네요...
이번엔 user 회원가입 insert 작업을 추가해서 2개를 동시에 처리하면서 성능을 확인해봤습니다.
똑같이 시간대는 4분
을 기준으로 하였고
가장 중요한 TPS(Throughput)에서 평균치는 Saturation Point
로 300~400사이를 오갔고
JMeter의 Summay Report상 370
으로 나왔습니다. 2개의 작업을 동시에 하면, 1건 insert한 작업처리량의 절반으로 떨어진다는 걸 확인할 수 있었습니다.