ํŠธ๋žœ์žญ์…˜(Transaction)์ด๋ž€?

Pessimistic Lock(์„ ์  ์ž ๊ธˆ)

  • Thread1์ด ์‚ฌ์šฉํ•˜๋Š” Resource(์ž์›)์„ Lock(์ž ๊ธˆ)ํ•ฉ๋‹ˆ๋‹ค.
  • Thread2๋Š” Resource(์ž์›)์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด unLock์ด ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ ์  ์ž ๊ธˆ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์„๊นŒ์š”?

  • Thread1์ด Resource A๋ฅผ ์ž ๊ทธ๊ณ  Resource B๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์š”์ฒญํ•œ ์ƒํ™ฉ
  • Thread2์ด Resource B๋ฅผ ์ž ๊ทธ๊ณ  Resource A๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์š”์ฒญํ•œ ์ƒํ™ฉ

๋” ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด?

  • ์„œ๋กœ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋†“์ง€ ์•Š๊ณ  ์ƒ๋Œ€๊ฐ€ ๊ฐ€์ง„ ๊ฒƒ์„ ๋บ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜์ง€๋งŒ.
  • ๋๋‚˜์ง€ ์•Š๋Š” ์‹ธ์›€์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„ ?

  • Timeout๋ฅผ ํ†ตํ•ด ๋ฌดํ•œ ๋Œ€๊ธฐ ์ƒํƒœ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    • Lock Timeout
    • Query Timeout
    • Connection Timeout
  • ์‚ฌ์šฉํ•˜๋Š” DBMS์— ๋”ฐ๋ผ ์ „๋žต์ด ๋‹ค๋ฅด๊ธฐ์— DBMS๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ ์  ์ž ๊ธˆ์œผ๋กœ ํ’€ ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ

  • ์šด์˜์ž๊ฐ€ ์‹œ์Šคํ…œ์—์„œ ๋ฐฐ์†ก์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ์šด์˜์ž๊ฐ€ ์ƒํ’ˆ์„ ๋ฐฐ์†กํ•˜๋Ÿฌ ๊ฐ„ ์‚ฌ์ด์— ๊ณ ๊ฐ์€ ๋ฐฐ์†ก์ง€๋ฅผ ๋ณ€๊ฒฝํ•˜์ฃ .
  • ์šด์˜์ž๋Š” ์˜ˆ์ „์˜ ๋ฐฐ์†ก์ง€๋กœ ๋ฐฐ์†ก์„ ์ง„ํ–‰ํ•˜๊ณ  ๋ฐฐ์†ก ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์šด์˜์ž๋Š” ๊ณ ๊ฐ์˜ ์ตœ์‹  ๋ฐฐ์†ก์ง€๊ฐ€ ์•„๋‹Œ ์˜ˆ์ „์˜ ๋ฐฐ์†ก์ง€๋กœ ๋ฐฐ์†กํ•ด๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Optimistic Lock(๋น„์„ ์  ์ž ๊ธˆ)

  • ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ DBMS์— ๋ฐ˜์˜ํ•˜๋Š” ์‹œ์ ์— ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ version ์ˆซ์ž๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์š”์ฒญ version๋ฒˆํ˜ธ์™€ ์‹œ์Šคํ…œ version๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Passimistic Offline Lock(์˜คํ”„๋ผ์ธ ์„ ์  ์ž ๊ธˆ)

  • Application Level์—์„œ Lock์„ ๊ฑฐ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.
  • ํ•œ ์‚ฌ๋žŒ์ด ๋ธ”๋กœ๊ทธ์˜ ๊ธ€์„ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด.
    • ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ธ€ ์ˆ˜์ •์„ ์œ„ํ•ด ์ ‘๊ทผํ•œ๋‹ค๋ฉด Lock ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉฐ ์—๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์— ๊ฑธ์ณ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ๋ง‰์Šต๋‹ˆ๋‹ค.
  • ์ฒซ๋ฒˆ์งธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋” ์ด์ƒ ์•„๋ฌด ํ–‰๋™์„ ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž ๊ธˆ์˜ ์œ ํšจ ์‹œ๊ฐ„์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ .
    • ์ฝ”๋“œ ๋ณต์žก๋„ ๋†’์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌํ•˜๋ฉฐ

์„ ์  ์ž ๊ธˆ๊ณผ ๋น„์„ ์  ์ž ๊ธˆ์„ ์„ ํƒํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ์ค€์€ ์ถฉ๋Œ์˜ ๋นˆ๋„์™€ ์‹ฌ๊ฐ๋„๋‹ค. ์ถฉ๋Œ์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๊ทธ๋ฆฌ ์‹ฌ๊ฐํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋” ๋‚˜์€ ๋™์‹œ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ๊ธฐ๋„ ์‰ฌ์šด ๋น„์„ ์  ์ž ๊ธˆ์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ถฉ๋Œ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹ฌ๊ฐํ•œ ๊ฒฝ์šฐ์—๋Š” ์„ ์  ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. - ๋งˆํ‹ดํŒŒ์šธ๋Ÿฌ ์ €. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด

  • ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ  Lock ์ „๋žต์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ตœ์„ ์ž…๋‹ˆ๋‹ค.

Reference