CAS(Check & Set) ๊ฐ์ด๋?
Optimistic Concurrency Control
- ๋ฌธ์์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํ ํ๋์ ๋๋ค.
- ํ๋์ ๋ฌธ์์ CAS์ ๊ฐ์ด ์ค์ ์ด ๋์ด ์๊ณ , ๋ฌธ์์ ๊ฐ(VALUE)๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ง๋ค ์ด CAS์ ๊ฐ๋ ๋ณ๊ฒฝ๋ฉ๋๋ค.
Example
- Step 1 : ํด๋ผ์ด์ธํธ A๊ฐ ๋ฌธ์๋ฅผ ์ฝ์ต๋๋ค.
- Step 2 : ํด๋ผ์ด์ธํธ A๋ ๋ฌธ์์ ๊ฐ์ 1 ์ฆ๊ฐ ์ํต๋๋ค.
- Step 3 : ํด๋ผ์ด์ธํธ B๋ ํด๋ผ์ด์ธํธ A๊ฐ ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ ์ ๋ฌธ์๋ฅผ ์ฝ์ต๋๋ค.
- Step 4 : ํด๋ผ์ด์ธํธ A๋ ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธ๋ฅผ ์งํํฉ๋๋ค.
- Step 5 : ํด๋ผ์ด์ธํธ B๋ ๋ฌธ์์ ๊ฐ์ 1 ์ฆ๊ฐ ์ํต๋๋ค.
- Step 6 : ํด๋ผ์ด์ธํธ B๋ ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธ๋ฅผ ์งํํฉ๋๋ค.
Example ๊ฒฐ๊ณผ๋ ์ด๋ ํ ๊น?
- ๋ ๋ฒ์ ๋ฌธ์์ ๊ฐ์ด ์ฆ๊ฐํ์ฌ ๋ฌธ์์ ๊ฐ์
12
๊ฐ ๋์ด์ผ ํ์ง๋ง ์ค์ 11
์ด ๋ฌธ์์ ์ ๋ฐ์ดํธ๊ฐ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. - ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ๋ฌธ์ ๋ฅผ ์๋ฐฉ ์ํด์ ๋ณดํต RDBMS์ ๊ฒฝ์ฐ lock์ ๊ฑฐ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง๋ง,
- ๋ถ์ฐ DB์ ๊ฒฝ์ฐ์๋ ์ ์ฒด ๋ถ์ฐ ๋ ธ๋ ๊ฐ์ lock์ ๊ฑฐ๋ ๊ฒ์ด ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์, CAS๋ผ๋ ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
How to work CAS?
- ๋ฌธ์์ ๊ฐ์ด 10์ผ ๋ CAS๊ฐ์ด 1์ธ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ๋ ๋ฌธ์ ๊ฐ 10๋ฟ๋ง ์๋๋ผ CAS๊ฐ๋ ๊ฐ์ด ์ฝ์ต๋๋ค.
- ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ํด๋น
๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธ๋ฅผ ์งํํ๋ฉด CAS๊ฐ๋ ๊ฐ์ด ๋ณ๊ฒฝ
๋ฉ๋๋ค.
์ ๋ฐ์ดํธ ์ด์ ์ CAS๊ฐ์ ๊ฐ์ง ํด๋ผ์ด์ธํธ๊ฐ ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธ๋ฅผ ์งํํ๋ค๋ฉด?
์๋ฒ์ ์ ์ฅ๋ ๋ฌธ์์ CAS๊ฐ
๊ณผํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ง๊ณ ์๋ CAS ๊ฐ
์ด ๋ถ์ผ์นํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์ ๋ฐ์ดํธ๋ ์คํจํ๊ฒ ๋ฉ๋๋ค.- ์คํจํ ํด๋ผ์ด์ธํธ๋ ๋ค์ ๋ฌธ์๋ฅผ ์ฝ์ด CAS๊ฐ์ ์กฐ์ ํ ๋ค ๋ฌธ์ ์ ๋ฐ์ดํธ๋ฅผ ์งํํด์ผ ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด CAS๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋ฌธ์ ๊ฐ ์์๊น?
- ์๋ก ์ ์ฅํ๊ธฐ ์ํด ๊ฒฝ์ํ๋ Race Condition์ธ ๊ฒฝ์ฐ์๋ ๊ธ๊ฒฉํ๊ฒ ์ฑ๋ฅ์ด ๋ฎ์์ง๋๋ค.
- ๋ฌธ์ ์ ์ฅ์ ์คํจํ๊ฒ ๋๋ค๋ฉด ๋ค์ ์ฌ์๋ํด์ผํ๋ Cost๊ฐ ํ์ํฉ๋๋ค.
- ๋ค์ ๋ฌธ์๋ฅผ ์ฝ์ด ๋ฌธ์๋ฅผ ์ ์ฅํ๋ Loop์์์ Side Effect๊ฐ ์์ด์ผ ํฉ๋๋ค.
- Loop์์ Message Queue๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ Logic์ด ์๋ค๋ฉด ์์ธก์ด ๋ถ๊ฐ๋ฅํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.