Projects
쿠폰 발급 프로젝트 (2)
어플리케이션 단에서 Lock 개념으로 언급되는 것은 크게 낙관적 락(Optimistic Lock) 과 비관적 락(Pessimistic Lock)이 있다. 각각의 방식을 적용해서 동시성 문제를 해결해보도록 하자! 비관적 락 비관적 락은 말 그대로 트랜잭션 끼리의 충돌은 무조건 발생(비관적으로 생각) 한다고 보고 트렌잭션이 접근하는 데이터에 미리 락을 거는 방식을 뜻한다. public interface CouponRepository extends JpaRepository { @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("SELECT count(c) FROM Coupon c") long countWithPessimisticLock(); } 기존의 CouponRepositor..
쿠폰 발급 프로젝트 (1)
평소 동시성 관련된 문제에 대해 관심이 많았기에 토이 프로젝트를 통해 학습하고자 해당 프로젝트를 시작했다! 또한 서비스를 운영하면서 특정 이벤트를 진행할 경우가 많은데 (쿠폰, 할인 이벤트) 이럴 경우 일시적으로 트래픽이 폭발적으로 증가하게 되는 현상이 발생한다. 단순히 스케일아웃을 통해 트래픽을 해결하는 것이 아닌, 작업 큐를 활용하여 일시적인 트래픽을 제어하는 방법 또한 이번 프로젝트를 통해 학습하고자 한다. 위 코드는 쿠폰을 발급과 관련된 정말 간단한 로직을 담고있다. 쿠폰 발급 수량이 100개가 넘어가거나, 동일 회원이 쿠폰을 중복으로 발급받으려 할 때 체크하는 유효성 검증 로직과 UUID를 바탕으로한 쿠폰 발급 로직이다. 아무런 동기화 처리를 해주지 않은 상태인데, 이 상태에서 테스트를 해보면 ..