쿠폰 중복 사용 버그, 비관적 락 한 줄로 해결하기
·
Loopers 2기
쿠폰 중복 사용 버그, 비관적 락 한 줄로 해결하기문제 상황주문 API를 만들고 테스트하던 중 이상한 현상을 발견했다.동시에 여러 요청이 들어오면 같은 쿠폰이 2번 사용되는 버그가 발생했다.분명히 쿠폰 사용 여부를 체크하는 로직이 있는데, 왜 이런 일이?원인 분석문제는 이랬다.시간 →스레드 A: 쿠폰 조회 (사용 가능!) → 사용 처리스레드 B: 쿠폰 조회 (사용 가능!) → 사용 처리두 스레드가 거의 동시에 조회하면 둘 다 "사용 가능"으로 판단한다. 그리고 둘 다 사용 처리를 해버린다.이게 바로 Lost Update 문제다.해결: 비관적 락해결은 간단했다. 조회할 때 락을 걸면 된다.@Lock(LockModeType.PESSIMISTIC_WRITE)@Query(""" SELECT mc ..