어제 고민해보았던 내용 정리
튜터님께 여쭤보니 동시성 제어를 하는 방법을 몇가지 알려주셨다.
쿠폰 발급 과정
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를 사용해 해결하는 방법이 좋아보인다.
관련 내용을 조금 찾아봐야겠다.
'내일배움캠프 프로젝트' 카테고리의 다른 글
BuySell - S3 이미지 업로드 (1) | 2024.03.28 |
---|---|
BuySell - 선착순 쿠폰 발급기능 (3) (0) | 2024.03.24 |
BuySell - 선착순 쿠폰발급 (0) | 2024.03.20 |
Buysell - 별점기능 구현(2) (0) | 2024.03.20 |
BuySell - 별점기능 구현 (0) | 2024.03.13 |