낙관적 락을 적용한 예약 동시성 처리

💣 문제 상황


두 명 이상의 사용자가 동시에 하나 남은 객실을 예약할 경우, 객실은 하나만 예약 가능해야 하지만, 중복 예약이 발생하는 문제가 존재했다.

🧐 원인 분석


호텔 객실 별 여유 객실 정보를 담고 있는  테이블

호텔 객실 별 여유 객실 정보를 담고 있는 room_type_inventory 테이블

image.png

중복 예약이 발생하는 문제는 동시성 제어 미흡으로 인해 발생했다.

데이터베이스에서 트랜잭션 처리나 락(Lock) 메커니즘이 제대로 구현되지 않았거나, 예약 상태를 실시간으로 갱신하지 못하는 로직이 원인일 가능성이 높다.

🛠️ 해결 방법


<aside> 📈

JMeter를 활용해 비관적 락 vs 낙관적 락 vs DB 제약조건 처리 성능 테스트

쓰레드 15, Ramp-up 시간 1, 루프 카운트 1, 각 경우마다 5번 테스트

image.png

image.png

image.png

image.png

</aside>

비관적 락 낙관적 락
장점 데이터의 일관성과 무결성을 강력하게 보장 접근 차단하지 않기에 비관적 락보다 성능적 이점
단점 • 락을 얻지 못하면 접근이 차단되기 때문에
성능 저하 문제 발생
• 데드락 발생 위험이 존재 충돌이 발생하면 롤백 처리가 되기 때문에 충돌이 많은 상황에서 비효율