- 대상 API:
POST /api/v2/me/coupons/{couponId}/issue
선착순 이벤트는 1초 사이에 수천 건의 요청이 몰립니다. 적절한 잠금이나 원자적 연산이 동작하지 않으면, 준비된 수량(1,000개)보다 더 많은 쿠폰(1,005개)이 발급되는 초과 발급사고가 발생하여 금전적
손실과
애플리케이션 신뢰도 하락으로 이어집니다.
이벤트 오픈 시각(14:00)에 트래픽이 수직 상승하는 스파이크 트래픽을 시스템이 견딜 수 있는지 확인 해야 합니다.
작년 선착순 쿠폰 발급 이벤트 시점에, 약 1초 안에 500명의 요청이 유입되며 시스템 장애가 발생한 이력이 있습니다. 이번 선착순 쿠폰 이벤트에는 동일한 장애가 발생하지 않도록 사전 부하 테스트를 통해 병목을 제거하고자 합니다.
일반적인 점진적 부하가 아닌, 특정 시점에 부하를 집중시키는 시나리오를 적용합니다.
- 상황: 쿠폰 1,000장 배포, 이벤트 시작 시간: 14:00.
- 부하 패턴:
- Ready: VUser(가상 유저) 2,000명, 수량 1,000개를 가지고 있는 쿠폰 데이터을 사전에 세팅합니다.
- Fire: 14:00:00 정각에 2,000명이 동시에 발급 버튼을 클릭합니다.
- Check
- 준비된 1,000장이 정확히 소진되었는가?
- 나머지 1,000명은 재고 소진 응답을 정상적으로 받았는가?
- 정합성: 발급된 쿠폰의 총 개수가 정확히 1,000개인가? (1,001이상일 경우 실패)
- 가용성: 시스템 장애가 발생하지 않고, 실패 요청에 대해 정상적인 예외 처리를 반환하는가?
- 성능
- 목표 TPS: 1,000 TPS 이상
- 응답 시간: 평균 500ms 이내, p99(상위 99%) 2초 이내
- App Container:
CPU: 4.0,Memory: 2GB(Resource Limit 설정) - DB Container: MySQL 8.0
- Redis Container: 선착순 쿠폰 발급을 위한 캐시 서버
- Day 1. 환경 구성 및 스크립트 작성
- Docker Compose 기반 테스트 환경 구축
- 더미 데이터 생성(User 3,000건, Coupon 1건)
- K6 스크립트 작성
- Day 2. 수행 및 결과 보고서 작성
- 시나리오별 테스트 수행
- 결과 보고서 작성