- 저희 프로젝트는 1만명의 동시 예매 요청을 안정적으로 수용할 수 있는 티켓 예매 시스템 구축을 목표로 합니다.
- 고객은 웹 사이트에서 VIP 선예매 와 일반 예매를 통해 티켓 예매를 할 수 있고, 쿠폰을 발급 받아 할인 된 가격으로 결제를 진행 할 수 있습니다.
- 기존 서비스(인터파크) 참고하여 MAU 100만명으로 설정하였습니다.
- 10,000석의 좌석 기준 5분 내 매진되며 오픈 직후 10초 이내의 전체 요청의 20% 몰린다고 가정했습니다.
- 트로트 콘서트 참고하여 경쟁률 10:1으로 예상했으며 인당 평균 20건의 재시도가 이루어진다고 가정했습니다.
| 항목 | 값 |
|---|---|
| 실제 예매 성공 수 | 10,000건 |
| 전체 요청 수 | 2,000,000건 |
| 평균 TPS | 6,667 TPS |
| 버스트 TPS | 40,000 TPS |
VIP 고객을 위한
선예매 기능을 제공합니다.원하는 좌석 선점에 실패했을 경우, 해당 좌석에
대기열에 등록하여 순번을 기다릴 수 있습니다.
Redis의Sorted Set을 활용해 고성능 대기열 시스템을 구현했으며, 예약 실패나 취소가 발생하면Kafka를 통해 좌석 반환 이벤트를 처리하고 다음 순번의 고객을 입장 시키는 방식의 서비스를 지원합니다.
일반 고객을 위한
일반 예매 기능을 제공합니다.좌석 맵에서 원하는 좌석을 선택한 뒤, 선점 가능 여부를 확인하고, 선점에 성공하면 결제를 진행할 수 있습니다.
수많은 요청이 동시에 몰리는 환경에서도 빠른 처리를 위해,
Redis를 사용해 좌석 선점 처리를 수행하고,Lua 스크립트를 통해원자성을 확보하여 안정적인 예매 서비스를 제공합니다.
고객에게 다양한
쿠폰서비스를 제공합니다.특히,
생일 기념 할인 쿠폰을 발급하여, 할인된 가격으로 결제할 수 있도록 지원하고 있습니다.
Spring Batch를 적용해 생일 쿠폰을 일괄 발급하고,기간이 지난 쿠폰은 자동으로 회수할 수 있도록 처리하고 있습니다.
토스페이(Toss Payments)를 PG사로 연동하여 결제 기능을 제공합니다.쿠폰을 적용해 할인된 가격으로 결제할 수 있으며, 선점한 좌석은
10분 이내에 결제를 완료해야 합니다.결제 시간 제한을 위해,
Redis의TTL기능을 활용해예매 타임아웃기능을 구현하여,시간 초과 시 좌석 선점이 취소되도록 처리하고 있습니다.
|
최용석 |
이선로 |
권수연 |
정균민 |
![]() 단일 파티션, 단일 컨슈머 -> 500명 결과 |
![]() 50 파티션, 50 컨슈머 -> 6500명 결과 |
![]() 1000명 |
![]() 3000명 |
![]() 6500명 |
![]() 1000명 |
![]() 3000명 |
![]() 6500명 |











