목표(요구사항): 동일한 좌석(슬롯)에 대해 먼저 들어온 요청이 먼저 처리되는 구조를 만들어야 한다.
선착순을 구현하려면 먼저 "선착순의 기준"을 명확하게 정의해야 한다.
Event Time 기준 선착순의 의미: 사용자가 실제로 버튼을 누른 시각을 기준으로 순차 처리
Processing Time 기준 선착순의 의미: 시스템이 해당 요청을 처리하기 시작한 시점을 기준으로 순차 처리
즉, Event Time 기준 선착순은 이론적으로 매우 이상적이지만 실제 시스템에서 일관되게 보장하기가 매우 어렵다. 반면 Processing Time 기준 선착순은, 설계적으로 정의 가능하고 내부적으로 완전히 통제(검증)가 가능하다.
→ Processing Time 기준 선착순을 목표로 설계한다.
락은 정합성 도구이지 순서 보장 도구가 아니다.
락 방식에서는 선착순의 기준이 DB 트랜잭션 내부 동작에 종속되어 외부에서 통제할 수 없다.
선착순을 보장하려면 입장 순서 자체를 시스템이 강제해야 한다.
모든 요청은 Queue에 적재된 순서대로 Consumer에게 전달된다.(FIFO)
Consumer는 한 번에 하나씩 순차 처리하므로, Queue 적재 순서 = 처리 순서 = 선착순이 성립한다.
즉 Processing Time 기준 선착순 = Queue에 적재된 순서로 정의할 수 있다.