모바일 예약 흐름
사용자는 날짜와 시간, 인원을 고른 뒤 가능한 회차를 확인합니다. 선택 직후와 최종 확정 직전에 남은 좌석을 다시 조회해 오래된 화면 상태로 진행하지 않게 했습니다. QR을 비롯한 여러 진입 경로와 비회원 세션에서도 선택 내용이 끊기지 않도록 정리했습니다.
좌석 홀드와 중복 예약 방지
선택한 좌석은 정해진 시간 동안 임시로 확보합니다. 타이머가 끝나면 확보 상태를 풀고 다시 선택할 수 있는 경로를 보여 줍니다. 확정과 취소 뒤에는 목록과 상세가 같은 상태를 보도록 query invalidation 범위를 나눴습니다.
예약 요청마다 새 멱등키를 만들던 탓에 네트워크 재시도에서 중복 예약이 생기는 문제를 수정했습니다. 좌석 홀드가 확정될 때 키를 저장하고 같은 예약을 재시도할 때는 유지합니다. 날짜·시간을 바꾸거나 새 홀드를 만들 때만 다시 발급하도록 바꾸고 회귀 테스트를 추가했습니다.
운영 화면과 권한
운영 화면에서는 프로그램, 회차, 상태를 관리합니다. 조회와 변경 권한을 역할에 맞춰 구분했고 사용자가 보는 가능 상태와 운영자가 바꾼 상태가 어긋나지 않도록 같은 규칙으로 검증했습니다.




