결제 (1) 썸네일형 리스트형 유료 크레딧 차감을 안전하게 — SELECT FOR UPDATE와 단일 트랜잭션 유료 크레딧이나 포인트처럼 잔액을 깎는 기능은 동시성에서 사고가 나기 쉬워요. 두 요청이 거의 동시에 들어와 같은 잔액을 읽으면, 둘 다 "잔액 충분"이라고 판단하고 각자 차감해서 이중 차감이나 음수 잔액이 생길 수 있어요. 혼자 운영하다 보면 이런 건 사용자가 늘기 시작할 때 갑자기 터지더라고요.읽고 쓰는 사이의 틈문제는 "잔액을 읽는 시점"과 "차감해서 쓰는 시점" 사이의 틈이에요. 그 틈에 다른 요청이 끼어들면 둘 다 옛날 잔액을 기준으로 판단해요.요청 A: 잔액 10 읽음 → (틈) → 10 - 3 = 7로 씀요청 B: 잔액 10 읽음 → (틈) → 10 - 3 = 7로 씀결과: 두 번 차감했으니 4가 남아야 하는데 7이 남음 (한 번의 차감이 사라짐) 행을 잠그고 한 트랜잭션에서해결은 그 행을 .. 이전 1 다음