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์ด ์žˆ๋‹ค๋ฉด ์˜ˆ์ธก์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Reference