문제 상황

image.png

좌석 선택 페이지에 입장할 수 있는 유저 수에 제한을 두고자, 대기 큐를 도입했다.

늦게 온 유저는 대기 큐에서, 좌석 선택 페이지인원이 빠지기를 기다리게 된다. (Waiting 상태)

그리고 유저 본인의 차례가 도래하면, 좌석 선택 페이지로 이동해 좌석을 예매할 수 있는 상태가 된다. (Selecting 상태)

근데 여기서 문제가 발생했다.

좌석 선택 페이지(Selecting 상태)들어와 있다고 생각한 인원 수와, 실제 인원 수가 자꾸 일치하지 않았다.

이는 대기 큐에 있는 유저는 더 오랜 시간을 기다리게 만들었으며, 최악의 경우 무한 대기 현상까지도 발생 시켰다.

문제 분석

문제 현상은 다음과 같다:

  1. Waiting 상태(대기 큐에 있는 상태)에 있는 클라이언트의 번호 순서가 도래했을 때, 서버는 해당 클라이언트를 Selecting 상태(SSE에 연결한 상태)로 옮긴다.
  2. 그러나 클라이언트가 SSE에 연결하지 못했거나, SSE에 연결하기 이전에 페이지를 이탈하는 경우가 예외적으로 생길 수 있었다.