2021.08.11 재고 개념의 트랜잭션 처리 (쿠폰 다운로드)
반응형
현재 운영중인 서비스의 쿠폰 기능은 시스템/관리자 -> 특정 사용자들
에게 쿠폰을 발급해주는 기능이었다.
이번에 쿠폰 기능을 고도화하여, 상품 페이지에서 사용자들이 직접 쿠폰을 다운로드 받을 수 있도록 개선하였다. 관리자에서 쿠폰을 등록할 때 다운로드 가능한 수를 기재하고 상품에 매핑해두면 사용자들이 특정 상품 페이지에 접속했을 때 등록된 쿠폰이 노출된다.
이번 TF에서 기술적으로 제일 흥미로웠던 점은 재고 개념의 트랜잭션을 처리하는 것이었다. 그 전에는 이런 류의 로직을 다룰 일 없었는데 이번에 TF를 진행하면서 이 주제로 시니어 개발자분들과 대화를 나눴는데, 모든 의견이 인상적이었고 그 과정 자체가 즐거웠다.
그 대화 과정을 요약하면 아래와 같다.
예시 : 1개만 발급할 수 있는 쿠폰이 있을 때, 사용자 A와 사용자 B가 동시에! 0.000001초 이내에 쿠폰 다운로드 버튼을 누름
- Auto-commit
가장 빠르고 간단한데, 쿠폰이 예상보다 몇 개 더 발급될 수 있음 - Transaction and Rollback
쿠폰이 몇 개 더 발급된 경우, 발급된 쿠폰을 다시 취소할 수 있음. 하지만 완벽하제 제어할 수 없으며, row에 lock을 걸기 때문에 (어떻게 거냐에 따라 다르지만) 성능 저하가 발생할 수 있고, 영향도가 있을 수 있기 때문에 해당 테이블에 쿼리하는 다른 쿼리들도 살펴봐야함. (하지만 1번 방법 보다는 쿠폰 발급이 덜 함) - Redis
Redis에는 Java의 AtomicInteger처럼 동시성을 제어하기 위한 기능을 제공해줌 - Queue or Pub/Sub
나는 이런 처리를 위해 Redis, Queue, Pub/Sub을 사용해보지 않았기 때문에 '만약 이걸 도입한다면...'이라는 가정으로 이런저런 궁금한 점이 추가로 생겨났는데, 댓글로 물어볼 때 마다 동료 개발자분들께서 시원하게 대답도 해주셨고, 서로 토론도 하시는 걸 구경하니까 재미있었다.
회사 업무 중에 나누었던 대화를 상의없이 공유할 수는 없기 때문에 첫 업무일지는 여기서 정리!
반응형
'업무일지' 카테고리의 다른 글
2021.10.06 첫 사내 세미나 (Master/Slave DB) (0) | 2021.12.24 |
---|---|
2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방향 (0) | 2021.12.09 |
2021.09.02 로그인 세션을 Redis로 이관 (무상태 웹 아키텍쳐, CAP 이론) (1) | 2021.10.16 |
2021.08.31 Github Actions으로 배포 자동화하기 (0) | 2021.10.10 |
2021.08.15 AWS CloudWatch로 로그 취합 (0) | 2021.10.10 |
댓글
이 글 공유하기
다른 글
-
2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방향
2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방향
2021.12.09 -
2021.09.02 로그인 세션을 Redis로 이관 (무상태 웹 아키텍쳐, CAP 이론)
2021.09.02 로그인 세션을 Redis로 이관 (무상태 웹 아키텍쳐, CAP 이론)
2021.10.16 -
2021.08.31 Github Actions으로 배포 자동화하기
2021.08.31 Github Actions으로 배포 자동화하기
2021.10.10 -
2021.08.15 AWS CloudWatch로 로그 취합
2021.08.15 AWS CloudWatch로 로그 취합
2021.10.10