내일배움캠프 프로젝트

BuySell - 선착순 쿠폰발급 (2)

공부처음하는사람 2024. 3. 20. 11:19

 

어제 고민해보았던 내용 정리

튜터님께 여쭤보니 동시성 제어를 하는 방법을 몇가지 알려주셨다.

 

쿠폰 발급 과정

 

1. 쿠폰을 미리 생성 -> 선착순 발급

2. 쿠폰 발급 요청 시 쿠폰생성 -> 선착순 발급

 

1번을 선택하기로 했다.

 

phantom write를 방지하기 위한 방법 isolation level을 설정하는 것인데

격리수준을 serializable을 사용할지, repeatable read를 사용할지에 대한 고민도 생긴다.

 

serializable을 사용하면 가용성의 저하가 발생하기에 잘 사용하지 않는다.

repeatable read를 사용하면 선착순 요구사항을 지키기 어렵다. (먼저 신청한 A는 실패했는데 B는 성공할 가능성이 있음)

 

그리고 Redis를 사용하는 방법

싱글쓰레드인 Redis를 사용하면 선착순 요구사항을 충족시킬 수 있다.

 

그리고 지금 프로젝트에서 postgreSQL을 사용하는데, default isolation이 read commit이라 repeatable read를 사용하려면

isolation level을 설정해야하는데, 지금 당장 이 부분 다루는 것 보다 Redis의 count를 사용해 해결하는 방법이 좋아보인다.

 

관련 내용을 조금 찾아봐야겠다.