1. 프로젝트 특성과 목표
현재 프로젝트의 개발 단계의 핵심은 N개의 한정된 재고를 가진 상품을, 대규모 트래픽 상황에서도 Over-selling(초과 판매) 없이 판매하는 것이다.
- 비즈니스 목표
- 기술적 목표
- 동시성 제어 : 수천-수만 명의 유저가 동시에 요청을 보내도 정확히 1명만 성공해야 함
- 고가용성 및 성능 : 락 대기로 인한 응답 지연 최소화 및 DB 리소스 보호
2. 현재 적용한 락 방식과 한계
현재는 데이터 정합성을 최우선으로 고려하여 RDBMS의 비관적 락(Pessimistic Lock, SELECT ... FOR UPDATE)을 적용했다.
2.1 현재 방식
- 구조
Transaction 시작
Stock 테이블 X-Lock 획득
- 재고 차감
- 주문 생성
- Commit & Unlock.
이와 같이 DB 레벨에서 순서를 보장하여 데이터 정합성은 완벽하게 달성하고 있다.
2.2 한계
- DB 커넥션 고갈
- 락을 획득하기 위해 대기하는 스레드들이 DB 커넥션을 점유한 채
WAITING 상태에 빠짐
- 이로 인해 이벤트와 무관한 다른 기능까지 장애가 전파될 가능성이 존재
- 확장성의 한계
- 병목 지점인 DB의 Row는 하나이기 때문에 전체 처리량은 개선되지 않음