- Problem
- 같이 구매 상품의 경우, 선착순으로 인원을 받아 모집인원이 다 찰 경우 마감한다.
- Reason
- 단순히 모집인원이 다 찼을 경우의 로직만 구현한다면, 동시에 요청이 들어왔을 때 동시성 이슈가 발생한다.
- Try to solve
- 같이 구매 신청의 경우, 개인이 모집을 진행하는 구매 단이기 때문에, 현재 모집인원이 적은 서비스에서 Redis를 사용하면 오버 엔지니어링이라고 판단됐다.
- 우선 Persimistic lock을 이용하고, 기획이 확장되면 Redis(Redisson 및 Lettuce)를 이용한 추가 설계를 통해 확장시킬 수 있을 것이라 생각된다.
- Database를 이용한 Lock
- [Persimistic Lock]
- [Optimisitic Lock]
- 싱글 스레드 기반의 Redis를 사용하여 동시성 문제 해결
- ( Option ) Alternative
- 프레임워크 혹은 언어 단에서의 Synchronized 사용