Time of Check, Time of Use ๊ฐ์ ์๊ฐ์ฐจ๋ก ์ฟ ํฐ ์ค๋ณต ์ฌ์ฉ ๊ฐ๋ฅ
๐ก ์ฌ์ฉ ๊ฐ๋ฅํ ์ฟ ํฐ:
โข COUPON20 (20,000์)
โข COUPON50 (50,000์)
๐จ Race Condition: ์ฌ๋ฌ ํญ/์ฐฝ์์ ๋์์ ๊ฐ์ ์ฟ ํฐ์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๋ฒ ์ ์ฉ๋ ์ ์์
์๋๋ฆฌ์ค: ๋์์ ๊ฐ์ ์ฟ ํฐ์ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ
๐ก ์๋ฆฌ:
1. Thread A: ์ฟ ํฐ ํ์ธ (์ฌ์ฉ์๋จ) โ
2. Thread B: ์ฟ ํฐ ํ์ธ (์์ง ์ฐ์ง ์์) โ โ ๋์์ฑ ๋ฌธ์
3. Thread A: ์ฟ ํฐ ์ ์ฉ & ๋งํฌ โ
4. Thread B: ์ฟ ํฐ ์ ์ฉ & ๋งํฌ โ โ ๊ฐ์ ์ฟ ํฐ ๋ ๋ฒ ์ ์ฉ๋จ!
๊ฒฐ๊ณผ: 50,000์ ์ฟ ํฐ์ด ๋ ๋ฒ ์ ์ฉ๋์ด 100,000์ ํ ์ธ
๐ฏ ๋ค๋ฅธ Race Condition ์์:
โข ๊ณ์ข ์ถ๊ธ (A๊ฐ 100๋ง์ ์ถ๊ธ ์ค์ผ ๋ B๋ ๋์์ 100๋ง์ ์ถ๊ธ)
โข ์ฃผ์ ๋งค์ (์๋ ์ฒดํฌ ํ ๋งค์ ์ฌ์ด์ ์๊ฐ์ฐจ ์ด์ฉ)
โข ์ฌ๊ณ ๊ด๋ฆฌ (์ฌ๊ณ -1 ํ ์ฃผ๋ฌธ ์ฌ์ด์ ์๊ฐ์ฐจ)
1. ํธ๋์ญ์ & ์ ๊ธ (Transaction with Locking):
2. ์์์ ์ฐ์ฐ (Atomic Operation):
3. ๋๊ด์ ์ ๊ธ (Optimistic Locking):
4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ค์ UNIQUE ์ ์ฝ:
5. ๋ถ์ฐ ์ ๊ธ (Distributed Lock):