소프트웨어 개발 · SW-13

마지막 한 자리를 두 사람이 예약했다

가상 이야기 · 핵심노트 기반

핵심노트 개념: 동시성 — 여러 사용자가 함께 행동하는 상황을 다룬다

이 글에서 배우는 교훈

동시성 제어는 각각 정상인 요청이 겹쳐 실행될 때도 정원 같은 공통 규칙을 지키게 합니다.

핵심노트를 바탕으로 만든 가상 이야기입니다. 실제 사건이나 검증된 성과가 아닙니다.
근거: 동시성 — 여러 사용자가 함께 행동하는 상황을 다룬다 · 핵심노트 13

구체적으로는 잔여 좌석의 조건부 차감에 성공한 요청만 예약을 확정하고, 겹친 신청 중 한 건만 성공하는지 시험했습니다.

관련 교재 내용

데이터 이해와 활용 · XI. 동시성제어 · 직렬가능성과 일관성

여러 트랜잭션이 동시에 실행될 때 공유 데이터의 무결성과 일관성을 보장해야 합니다.

이 사례에 적용한 내용: 잔여 좌석의 조건부 차감에 성공한 요청만 예약을 확정하고, 겹친 신청 중 한 건만 성공하는지 시험했습니다.

교재 122쪽 확인 →

교재 원리의 실무 적용 · 교재 원문 인용이 아닌 자체 설명입니다.

본문

잔여 좌석이 한 개인 강좌에 두 사람이 동시에 신청했습니다. 두 요청은 각각 한 자리가 남았다고 읽은 뒤 신청을 저장해 정원을 넘겼습니다. 각 요청이 오류 없이 끝났다는 사실은 전체 정원을 지켰다는 뜻이 아니었습니다.

개발팀은 남은 수량이 1 이상일 때만 차감하고, 차감에 성공한 요청만 같은 트랜잭션에서 예약을 확정하도록 만들었습니다. 요청이 겹쳐도 같은 마지막 수량을 함께 차감하지 못하도록 데이터베이스의 동시성 제어를 적용했습니다. 동시 시험에서 한 건만 확정되고 나머지는 대기 안내를 받는지 확인했습니다.

결론

확인과 저장을 단순히 연달아 적는 것만으로는 충분하지 않았습니다. 공유 데이터를 바꾸는 조건이 동시에 실행돼도 지켜지도록 설계하고 시험해야 합니다.