You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
서버는 좌석 선택 중 SSE가 끊기면 RECONNECTING_SELECTING으로 표시해 정원 자리와 in-booking 세션(매수·선택 좌석·구독 섹션)을 유지함.
재연결하면 SELECTING_SEAT로 복원하고 저장된 섹션을 자동 재구독하며, 사용자가 고른 좌석 목록을 복원 메시지로 전송함(booking.controller.ts:143-157, booking-seats.service.ts:272-275).
새로고침 복구에 필요한 서버 쪽 장치는 이미 갖춰져 있음.
문제
진행 단계와 매수가 컴포넌트 상태임(front/src/pages/ReservationPage/index.tsx:35-37). 새로고침하면 캡차 단계부터 다시 시작하고 매수도 기본값으로 돌아감.
사용자가 매수를 다시 확정하면 POST /booking/count가 flushAndSetBookingAmount를 호출하는데(booking.service.ts:368), 매수가 바뀌었는지와 무관하게 선택 좌석을 전부 반납함. 서버가 보관하던 좌석이 이 시점에 사라짐. 실질적으로 새로고침이 좌석 선택 초기화가 됨.
좌석 SSE는 SectionAndSeat에서만 열리므로(SectionAndSeat.tsx:75), 캡차·매수 화면에 머무는 동안에는 좌석 복원 메시지를 받을 화면 자체가 없음.
reconnecting GC 타임아웃이 5초(SEATS_SSE_RETRY_TIMEOUT)라, 캡차를 5초 안에 통과하지 못하면 세션이 회수되어 좌석 화면으로 돌아가지 못하고 예매 흐름에서 이탈함.
해결 방향
진행 중인 예매 세션이면 캡차·매수 단계를 건너뛰고 좌석 선택 단계로 복원함
매수와 선택 좌석을 서버 상태에서 받아 화면에 되살림
POST /booking/count가 매수가 실제로 바뀔 때만 좌석을 반납하도록 조건을 좁힘
새로고침 직후 좌석 SSE 재연결이 캡차 통과를 기다리지 않도록 연결 시점을 앞당기거나, 재연결 유예 5초가 현실적인지 재검토함
특이사항
대기실 새로고침(대기실 새로고침 시 순번 유실로 화면이 깨지는 문제 해결 #427)과 증상은 비슷하나 원인이 다름. #427은 서버에 있는 순번을 재조회하지 않는 것이고, 이 이슈는 서버 복원 기능이 갖춰져 있는데 프론트 단계 상태가 휘발되어 그 복원을 무효화하는 것임.
매수 재확정 시 좌석을 반납하는 동작 자체는 의도된 것임. 조건 없이 실행되는 부분만 좁히면 됨.
배경
RECONNECTING_SELECTING으로 표시해 정원 자리와 in-booking 세션(매수·선택 좌석·구독 섹션)을 유지함.SELECTING_SEAT로 복원하고 저장된 섹션을 자동 재구독하며, 사용자가 고른 좌석 목록을 복원 메시지로 전송함(booking.controller.ts:143-157,booking-seats.service.ts:272-275).문제
front/src/pages/ReservationPage/index.tsx:35-37). 새로고침하면 캡차 단계부터 다시 시작하고 매수도 기본값으로 돌아감.POST /booking/count가flushAndSetBookingAmount를 호출하는데(booking.service.ts:368), 매수가 바뀌었는지와 무관하게 선택 좌석을 전부 반납함. 서버가 보관하던 좌석이 이 시점에 사라짐. 실질적으로 새로고침이 좌석 선택 초기화가 됨.SectionAndSeat에서만 열리므로(SectionAndSeat.tsx:75), 캡차·매수 화면에 머무는 동안에는 좌석 복원 메시지를 받을 화면 자체가 없음.SEATS_SSE_RETRY_TIMEOUT)라, 캡차를 5초 안에 통과하지 못하면 세션이 회수되어 좌석 화면으로 돌아가지 못하고 예매 흐름에서 이탈함.해결 방향
POST /booking/count가 매수가 실제로 바뀔 때만 좌석을 반납하도록 조건을 좁힘특이사항