장바구니 조회 - ekdan38/HotDealService GitHub Wiki
테스트를 위해 4만개의 장바구니 더미 데이터를 생성하였다.
개선 전 k6 테스트
k6 테스트 결과
-
VU 100
-
VU 200
-
VU 300
장바구니 조회 (3분) | 총 처리량 | Latency(mean) | Latency(P95) | TPS |
---|---|---|---|---|
VU 100 | 14220 | 1.26s | 1.55s | 78 |
VU 200 | 14014 | 2.58s | 2.9s | 76 |
VU 300 | 13477 | 4s | 7s | 73 |
테스트 결과 분석
- VU 100 에서 Latency(mean) 가 1.26s, Latency(P95)의 경우도 1.55s 로 큰 Latency 발생
- VU 200 이후 Latency는 크게 증가
- TPS 증가 없음
- 단순 조회임에도 성능이 매우 나쁨
성능 개선 계획
- Dto Projection : 단건 Row 조회이며, 필드가 4개로 많지 않아 생략
- 인덱싱 : 장바구니 추가에서 진행한 커버링 인덱스를 통해 성능 향상 기대
- 캐싱 : 적용할 수 있지만, 사용자가 핫딜 조회, 상품 조회, 상품 주문, 결제 흐름에서 장바구니 조회를 여러번 하지 않는다 판단하여 캐싱은 생략(필요시 추후 적용) 장바구니 추가에서 생성한 커버링 인덱스를 통해 성능 개선 확인
인덱싱 과정은 장바구니 추가와 같이 커버링 인덱스를 적용, 조회 쿼리 또한 같기 때문에 내용은 생략
인덱싱 적용 후 k6 테스트
k6 테스트 결과
-
VU 100
-
VU 200
-
VU 300
장바구니 조회 (3분) | 총 처리량 | Latency(mean) | Latency(P95) | TPS |
---|---|---|---|---|
VU 100 | 45698 | 392ms | 696ms | 253 |
VU 200 | 46214 | 778ms | 1.45s | 255 |
VU 300 | 45497 | 1.18s | 2.27s | 251 |
테스트 결과 분석
Latency
-
Latency(mean)
- VU 100: 1.26s → 392ms (약 68.9% 개선)
- VU 200: 2.58s → 778ms (약 69.8% 개선)
- VU 300: 4.00s → 1.18s (약 70.5% 개선
Latency(mean) : 전 구간 약 70% 개선
-
Latency(P95)
- VU 100: 1.55s → 696ms (약 55.1% 개선)
- VU 200: 2.90s → 1.45s (약 50.0% 개선)
- VU 300: 7.00s → 2.27s (약 67.6% 개선)
Latency(P95) : 전 구간 50% 이상 개선, 특히 VU 300 에서 7s 에서 2.27s로 크게 감소
TPS
- VU 100: 78 → 253 (약 224.4% 증가)
- VU 200: 76 → 255 (약 235.5% 증가)
- VU 300: 73 → 251 (약 243.8% 증가)
TPS :전 구간 220% 이상 개선, 이전 대비 3배 이상 향상
개선 전에는 인덱스를 타고 있지 않아 단순 조회 API 임에도 성능이 매우 낮았음 커버링 인덱스를 통해 눈에 띄는 성능 개선을 보임
항목(각 개선 단계는 이전 단계 포함) | 인덱싱 |
---|---|
평균 Latency 감소율 | 약 70% |
TPS 증가율 | 약 224 ~ 243% |
- 커버링 인덱스 적용을 통해 Latency(mean) 는 약 70% 개선 효과를 보임
- TPS 는 224 ~ 243% 라는 높은 수치의 개선 효과를 보임
- 캐싱은 적용하지 않았지만 추후 필요시 캐싱 적용