콘서트 예약 서비스
를 구현해 봅니다.- 대기열 시스템을 구축하고, 예약 서비스는 작업가능한 유저만 수행할 수 있도록 해야합니다.
- 사용자는 좌석예약 시에 미리 충전한 잔액을 이용합니다.
- 좌석 예약 요청시에, 결제가 이루어지지 않더라도 일정 시간동안 다른 유저가 해당 좌석에 접근할 수 없도록 합니다.
- 콘서트는 특정 기간동안 예약이 가능하다.
- 콘서트는 특정 날짜에 1회에서 2회까지 공연한다.
- 하나의 공연에는 최대 50개의 좌석이 존재한다.
- 콘서트의 특정 공연의 좌석 예약은 플로우는 '임시예약'과 '예약완료(예약확정)' 단계로 나누어 진다.
- 현재는 유저당 1개의 좌석만 예약 가능하다.
- 임시 예약된 좌석은 8분안에 결제를 통해 '예약완료' 되지 않는다면 ‘예약취소’ 처리된다.
-
유저는 콘서트 리스트에서 특정 콘서트를 선택한다.
-
선택한 콘서트의 공연하는 날짜 리스트에서 특정 공연을 선택한다.
-
선택한 공연에서 특정 좌석을 선택한다.
- 선택한 좌석은 예약 상태가 되며 최대, 8분간 임시 예약 상태를 가진다. (선점하게 된다.)
- 8분이 지나갈 동안 최종 결제가 수행되지 않는다면 예약은 취소된다.
-
예약된 좌석에 대해 최종 결제를 수행한다.
- '특정 날짜의 공연 선택'과 '공연의 좌석 선택 작업'은 대기열을 통과한 사용자만 수행이 가능하다.
- 예약된 좌석에 대한 결제는 대기열 없이 자유롭게 가능하다.
- 대기열을 통과한 사용자는 8분간 서비스 이용이 가능하다.
- 서비스 이용 시간이 만료된 경우 다시 대기열을 통과해 서비스 이용 권한을 획득해야 한다.
- 예상 대기시간을 구한다.
- 다양한 대기열 구현 방식중 놀이공원(유량제어)방식을 사용하며, 서비스 이용자를 일정하게 유지 시킨다.