🎫 티켓팅 서비스 전제 정리


🔧 동시성 제어 방법별 장단점과 최종 선택 방안

1. 비관적 락

장점 : DB 차원에서 중복 예약을 원천 차단하기 때문에 안전성이 가장 높음

단점 : 트래픽 집중 시 대기 발생

<aside>

트래픽 집중 시나리오 예시

  1. 동일 좌석에 대해 100명의 사용자가 예매 요청
  2. 첫 번째 요청만 Row Lock을 획득 후, 좌석 상태를 TRUE → FALSE로 변경
  3. 나머지 요청들은 동일 Row에 대한 Lock 획득을 위해 DB 대기 큐에서 순차적으로 대기
  4. Lock을 획득한 요청들은 이미 FALSE인 좌석 상태를 확인한 후 즉시 실패 처리

⇒ 결과가 이미 정해진 요청들까지 DB 커넥션과 트랜잭션을 점유하게 됨

</aside>

2. 낙관적 락

장점 : 비관적 락과 달리 대기열이 없고, 즉시 성공 또는 즉시 실패 처리가 가능함

단점 : 인기 좌석의 경우 update 충돌이 빈번하게 발생하여, DB write 트래픽과 트랜잭션 비용 증가

<aside>

  1. 100명의 사용자가 한 자리에 대한 예매 요청
  2. 1번 사용자의 요청 처리 후 version 업데이트
  3. 나머지 99개의 요청은 update 시도 → version mismatch → rollback </aside>

3. 분산 락 (Redis 기반)

장점 :

단점 : Redis 장애 발생 시 락 기능이 영향을 받을 수 있으므로, 이중화 구성이나 장애 대응 전략 필요

최종 결론

Redis 분산 락은 DB 진입 전 트래픽을 컷하기 위한 1차 필터로 사용 + 최종 데이터 무결성은 DB row 단위 비관적 락으로 보장