두 트랜잭션이 같은 자리 1개를 보고 둘 다 예약합니다.
좌석 하나가 두 명에게 팔렸습니다 — 중복 예약(오버부킹).
DB 동시성 미니랩
남은 자리는 하나. 두 사람이 같은 순간에 예약 버튼을 누릅니다. 잠금이 없으면 좌석 하나가 두 명에게 팔려요. 트랜잭션과 잠금이 어떻게 “한 명만 성공”을 만드는지 한 단계씩 따라가 보세요.
방식을 고르고 버튼을 누르세요
두 트랜잭션이 같은 자리 1개를 보고 둘 다 예약합니다.
‘예약 경쟁 시작’을 누르면 두 사용자가 동시에 마지막 좌석을 예약하는 과정을 한 단계씩 보여드려요.
아직 시작 전
공연 좌석 (DB 행)
아직 시작 전
한눈에 비교
두 트랜잭션이 같은 자리 1개를 보고 둘 다 예약합니다.
좌석 하나가 두 명에게 팔렸습니다 — 중복 예약(오버부킹).
SELECT … FOR UPDATE로 먼저 잠그고 한 명씩 순서대로 처리합니다.
A만 성공, B는 잠금이 풀린 뒤 '자리 없음'을 보고 거절됩니다.
일단 진행하고, 커밋할 때 버전 번호로 충돌을 감지합니다.
A만 성공, B는 버전이 바뀌어 0행 갱신 → 충돌로 거절됩니다.
실험을 마쳤다면