추가된 요구사항
1인 당 하나의 쿠폰만 발급 받을 수 있게 변경하기!
→ 2개 이상 N개 제한이 필요하다면, 유저의 id를 key로 잡고 분산락을 구현하여 정합성을 보장
시도
- UserId, CouponType으로 유니크 키 걸기 : 한 사용자가 여러 타입의 쿠폰을 가질 수 있으므로 활용 불가
- apply 메서드 시작할 때 락을 걸어 쿠폰 발급 여부 확인 : 컨슈머가 쿠폰 생성을 처리하기 전에 또다시 같은 유저가 쿠폰 발급을 요청한다면 그것이 허용되므로, 한명에게 두개의 쿠폰이 발급될 수 있음. 그리고 락이 너무 길어져서 성능 저하됨
- Set 컬렉션 활용하기! Redis의 Set 활용해서 여러 스레드에서 중복 체크할 수 있도록 하기
Redis Set
saad key value → 추가된 개수 출력
sadd test 1 // 1
sadd test 1 // 0 이미 존재함
Redis Set을 사용하는 Repository