환경
GCP
- 모든 테스트가 같은 환경에서 진행되도록 성능테스트 용도로 GCP서버를 개설하고 그 위에서 진행
CPU
: 4Core
MEM
: 16GB
Tool
- JMeter
예상
- 동적 예약계산은 매번 예약완료를 가져와서 예약가능한 시간에서 제외한 시간을 보여주기 때문에 예약완료의 정도에 따라 성능이 달라질 것입니다.
- 정적 예약계산은 매번 예약상태를 저장 해놓은 테이블만 조회하기 때문에 예약완료의 정도에 관계없이 어느정도 일정한 성능을 보일 것 입니다.
- 따라서 일정 수준 이상의 예약이 차면 정적예약계산이 동적예약계산보다 성능이 더 좋게 나올 것입니다.
결과
- 한달치 예약 (7200개) 기준으로 진행
ㅤ | 예약 0% | 예약 25% | 예약 50% | 예약 75% | 예약 100% |
동적 예약계산 | 500 / 60 / 150 | 500 / 60 / 120 | 500 / 60 / 90 | 500 / 60 / 80 | 500 / 60 / 60 |
TPS | 1092 | 780 | 586 | 484 | 400 |
정적 예약계산 | 500 / 60 / 90 | 500 / 60 / 100 | 500 / 60 / 110 | 500 / 60 / 150 | 500 / 60 / 210 |
TPS | 546 | 656 | 779 | 985 | 1369 |
동적 예약계산 vs 정적 예약계산
결론
1) 예상과 달랐던 점
- 정적성능이 예약률에 따라 향상되었다.
→ 예약이 되어있지 않은 컬럼들만 가져와서 조인을 하기때문에 그 규모가 점점 줄어들은 것으로 예측
2) 예상과 같았던 점
- 정적성능이 예약률 50%부터 동적을 역전했다.
→ 예약이 많아질 수록 동적으로 계산할 양이 늘어나기 때문에
3) 동적은 유지보수가 더 편함
- 계산할 날짜에 제한없다.
- 추가 테이블 필요하지않다.
4) 정적은 추가테이블 관리가 필요함
@Scheduled
로 하루에 한번씩 레코드 추가가 필요하다.
Reservation
Table과ReservationTime
Table의 data의 동일성(Sync)에 주의가 필요하다.
5) 예약정도에따라서 동적 정적의 성능이 다르기 때문에 서비스의 특성에 따라서 고려해볼 필요가 있음
- 예약률이 높고 비즈니스 규모가 작다면 정적이 적합할 수 있다.
- 카카오헤어샵처럼 여러 샵을 관리하는 경우 규모가 크기 때문에 테이블 관리를 할 필요가 없는 동적이 더 적합할 수 있다.