root layout

패스트캠퍼스

  1. 강의 질문
  2. 개발/데이터

동시성 관련 질문

2026.06.04 11:58 수정

안녕하세요 강의를 보는데 좀 이상한게 있어서 질문드립니다.


db로 쿠폰 발행하는 코드에 아래 같은 주석이 써있는데...


1번은 틀린거 아닌가요? policyId로 해당 policy에 락을 걸면 커밋되기 전까지는 동시성 문제 없는거 아닌가요?


3번도 데드락이 아니라 여러명이 락을 잡을려고 대기하다가 타임아웃나는 걸로 보이고


4번도 db로도 충분히 가능해보이는데 물론 성능적인 문제는 있겠으나


제가 잘못 알고 있는건가요?



* 1. Race Condition 발생 가능성

* findByIdWithLock으로 쿠폰 정책에 대해 락을 걸지만, countByCouponPolicyId와 실제 쿠폰 저장 사이에 갭이 존재

* 여러 트랜잭션이 동시에 카운트를 조회하고 조건을 통과한 후 쿠폰을 저장할 수 있음

* 결과적으로 totalQuantity보다 더 많은 쿠폰이 발급될 수 있음

*

* 2. 성능 이슈

* 매 요청마다 발급된 쿠폰 수를 카운트하는 쿼리 실행

* 쿠폰 수가 많아질수록 카운트 쿼리의 성능이 저하될 수 있음

* PESSIMISTIC_LOCK으로 인한 병목 현상 발생 가능

*

* 3. Dead Lock 가능성

* 여러 트랜잭션이 동시에 같은 쿠폰 정책에 대해 락을 획득하려 할 때

* 트랜잭션 타임아웃이 발생할 수 있음

*

* 4. 정확한 수량 보장의 어려움

* 분산 환경에서 여러 서버가 동시에 쿠폰을 발급할 경우

* DB 레벨의 락만으로는 정확한 수량 제어가 어려움

*/


답변 

연관 질문

커뮤니티 질문보기