๐Ÿ’ป [Theory] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฝ(lock)

๐Ÿ’ป [Theory] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฝ(lock)

์ด๋ฒˆ์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฝ(lock)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์‚ฌ์‹ค locking ๊ธฐ๋ฒ•์€ ์ง์ ‘์ ์œผ๋กœ db์— lock ์„ ๊ฑธ์ง€ ์•Š๊ณ  Version์„ ํ™•์ธํ•˜์—ฌ ๋™์‹œ์„ฑ์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ์‹์ธ
Optimistic Lock(๋‚™๊ด€์  ๋ฝ) ๊ธฐ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค. (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์—์„œ์˜ lock)

ํ•˜์ง€๋งŒ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฃจ๋Š” lokc์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‹จ์—์„œ lock ํ•˜๋Š” Pessimistic Lock(๋น„๊ด€์  ๋ฝ)์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถ”ํ›„ ํฌ์ŠคํŠธ์—์„œ Optimistic Lock ๊ณผ Pessimistic Lock์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ์ž์„ธํžˆ ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฝ(lock)์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Record locking is the technique of preventing simultaneous access to data in a database, to prevent inconsistent results.

๋ ˆ์ฝ”๋“œ ์ž ๊ธˆ์€ ์ผ๊ด€์„ฑ์—†๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋™์‹œ ์•ก์„ธ์Šค๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฝ์€ ๊ฐ™์€ ์ž์›์„ ์•ก์„ธ์Šคํ•˜๋Š” ๋‹ค์ค‘ ํŠธ๋žœ์žญ์…˜ ํ™˜๊ฒฝ์—์„œ DB์˜ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜์˜ ์ˆœ์ฐจ์  ์ง„ํ–‰์„ ๋ณด์žฅํ•˜๋Š” ์ง๋ ฌํ™” ๊ธฐ๋ฒ•์ด๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฝ(lock)์˜ ์ข…๋ฅ˜

Lock์˜ ์ข…๋ฅ˜๋Š” ํฌ๊ฒŒ Shared Lock, Exclusive Lock๋กœ ๋‚˜๋‰œ๋‹ค.

Shared Lock (๊ณต์œ  ๋ฝ)

  • Read Lock ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ๊ณต์œ  Lock์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” Lock์ด๋‹ค.
  • ๊ณต์œ  Lock ์€ ๊ฐ™์€ ๊ณต์œ  Lock ๋ผ๋ฆฌ๋Š” ๋™์‹œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ํ•ด์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๊ฐˆ ๋ฟ, ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฒ ํƒ€ Lock์„ ๊ฑธ ์ˆ˜๋Š” ์—†๋‹ค.

Exclusive Lock (๋ฒ ํƒ€ ๋ฝ)

  • Write Lock์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ๋ฒ ํƒ€ Lock์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋œ๋‹ค.
  • ๋ฒ ํƒ€ Lock์€ Lock์ด ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜(์ฝ๊ธฐ ํฌํ•จ)์€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋ฒ ํƒ€ Lock๊ฐ€ ๋˜์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ์–ด๋– ํ•œ Lock๋„ ์„ค์ •ํ•  ์ˆ˜ ์—†๋‹ค.

Lock์˜ ์„ค์ • ๋ฒ”์œ„(Level)

  • โ€ป ํ–‰(Row)
    • ํ–‰ ์ˆ˜์ค€์˜ Lock์€ 1๊ฐœ์˜ ํ–‰(Row)๋ฅผ ๊ธฐ์ค€์œผ๋กœ Lock ์„ค์ •์„ ํ•œ๋‹ค.
    • DML์— ๋Œ€ํ•œ Lock์œผ๋กœ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Lock์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ”์œ„์˜ lock์€ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ lock ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    • ์ฆ‰, 1๊ฐœ์˜ ์„ธ์…˜๋งŒ์ด DB์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ์‚ฌ์šฉํ•˜๋Š” ๋•Œ๊ฐ€ ์žˆ๋‹ค๋ฉด DB์˜ ์†Œํ”„ํŠธ์›จ์–ด ๋ฒ„์ „์„ ์˜ฌ๋ฆฐ๋‹ค๋˜์ง€ ์ฃผ์š”ํ•œ DB์˜ ์—…๋ฐ์ดํŠธ์— ์‚ฌ์šฉํ•œ๋‹ค.
  • ํŒŒ์ผ
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ lock์„ ์„ค์ •ํ•œ๋‹ค.
    • ํŒŒ์ผ ์ด๋ž€ ํ…Œ์ด๋ธ”, row ๋“ฑ๊ณผ ๊ฐ™์€ ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์“ฐ์—ฌ์ง€๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ์†Œ์ด๋‹ค.
    • ํ•ด๋‹น ๋ฒ”์œ„์˜ Lock์€ ์ž˜ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.
  • ํ…Œ์ด๋ธ”
    • ํ…Œ์ด๋ธ” ์ˆ˜์ค€์˜ Lock์€ ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ Lock์„ ์„ค์ •ํ•œ๋‹ค.
    • ์ด๋Š” ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋“ฑ์˜ ์ „์ฒด ํ…Œ์ด๋ธ”์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
    • ์ฆ‰, DDL(create, alter, drop ๋“ฑ) ๊ตฌ๋ฌธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ DDL Lock์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ํŽ˜์ด์ง€์™€ ๋ธ”๋Ÿญ
    • ํŒŒ์ผ์˜ ์ผ๋ถ€์ธ ํŽ˜์ด์ง€์™€ ๋ธ”๋ก์„ ๊ธฐ์ค€์œผ๋กœ Lock์„ ์„ค์ •ํ•œ๋‹ค. ์ž˜ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.
  • ์ปฌ๋Ÿผ
    • ์ปฌ๋Ÿผ ๊ธฐ์ค€์˜ Lock์€ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ Lock์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ์ด ํ˜•์‹์€ Lock ์„ค์ • ๋ฐ ํ•ด์ œ์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.
    • ์ง€์›ํ•˜๋Š” DBMS๋„ ๋งŽ์ง€ ์•Š๋‹ค.

##๋ธ”๋กœํ‚น(Blocking)

  • ๋ธ”๋กœํ‚น์€ Lock๊ฐ„(๋ฒ ํƒ€ - ๋ฒ ํƒ€, ๋ฒ ํƒ€ - ๊ณต์œ )์˜ ๊ฒฝํ•ฉ์ด ๋ฐœ์ƒํ•˜์—ฌ ํŠน์ • Transaction์ด ์ž‘์—…์„ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ฉˆ์ถฐ์„  ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.
  • ๊ณต์œ Lock ๋ผ๋ฆฌ๋Š” ๋ธ”๋กœํ‚น์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฒ ํƒ€Lock์€ ๋ธ”๋กœํ‚น์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค(์ ‘๊ทผ์ด ๋ถˆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ).
  • ๋ธ”๋กœํ‚น์„ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด์ „์˜ ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ(์ปค๋ฐ‹ OR ๋กค๋ฐฑ)๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ๋’ค์— ๋“ค์–ด์˜จ ํŠธ๋žœ์žญ์…˜์€ ์ด์ „ ํŠธ๋žœ์žญ์…˜์ด ๋งˆ๋ฌด๋ฆฌ๋˜์–ด์•ผ ์ดํ›„ ์ง„ํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ด๋Ÿฐ ๊ฒฝํ•ฉ์€ ์„ฑ๋Šฅ์— ์ข‹์ง€ ์•Š์€ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๊ฒฝํ•ฉ์„ ์ตœ์†Œํ™” ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

blocking

Blocking ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

  • ํ•œ ํŠธ๋žœ์žญ์…˜์˜ ๊ธธ์ด๋ฅผ ๋„ˆ๋ฌด ๊ธธ๊ฒŒํ•˜๋Š” ๊ฒƒ์€ ๊ฒฝํ•ฉ์˜ ํ™•๋ฅ ์„ ๋†’์ธ๋‹ค.
  • ๋™์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์„ ๋ฐฐ์ œํ•œ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ๋งŽ์„ ์‹œ๊ฐ„์—๋Š” ๋Œ€์šฉ๋Ÿ‰ ๊ฐฑ์‹  ์ž‘์—…์„ ์ž์ œํ•ด์•ผ ํ•œ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ƒํ–ฅ ์กฐ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ฟผ๋ฆฌ๋ฅผ ์˜ค๋žœ์‹œ๊ฐ„ ์žก์•„๋‘์ง€ ์•Š๋„๋ก ์ ์ ˆํ•œ ํŠœ๋‹์„ ์ง„ํ–‰ํ•œ๋‹ค.
  • lock timeout์„ ํ†ตํ•ด Lock์˜ ์ตœ๋Œ€ ์‹œ๊ฐ„์„ ์ง€์ •ํ•  ์ˆ˜ ๋„ ์žˆ๋”ฐ.

##๊ต์ฐฉ ์ƒํƒœ(Dead Lock)

  • ๊ต์ฐฉ์ƒํƒœ๋Š” ๋‘ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ๊ฐ Lock์„ ์„ค์ •ํ•˜๊ณ  ๋‹ค์Œ ์„œ๋กœ์˜ Lock์— ์ ‘๊ทผํ•˜์—ฌ ๊ฐ’์„ ์–ป์–ด์˜ค๋ ค๊ณ  ํ•  ๋•Œ ์ด๋ฏธ ๊ฐ๊ฐ์˜ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด Lock์ด ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–‘์ชฝ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋‘ ์˜์›ํžˆ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€์•Š๊ฒŒ ๋˜๋Š” ์ƒํƒœ์ด๋‹ค.

deadlock

์œ„์™€ ๊ฐ™์ด ๊ฐ๊ฐ์˜ ํŠธ๋žœ์žญ์…˜์— Lock์„ ๊ฑธ๊ณ  ์ƒ๋Œ€๋ฐฉ Lock์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ˜ํ™˜ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์—์„œ Dead Lock์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

Dead Lock ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

  • Dead Lock ์ƒํ™ฉ์ด ๊ฐ์ง€๋˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜๋ฅผ ๊ฐ•์ œ๋กœ ์ค‘์ง€์‹œ์ผœ ํ•œ ํŠธ๋žœ์žญ์…˜์€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ ์ค‘์ง€๋œ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋Š” ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ ค ๋†“์Šต๋‹ˆ๋‹ค.
  • Dead Lock ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ ‘๊ทผ ์ˆœ์„œ๋ฅผ ๋™์ผํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ ‘๊ทผ ์ˆœ์„œ ๊ทœ์น™์„ ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • SET LOCK_TIMEOUT๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์ž ๊ธˆํ•ด์ œ ์‹œ๊ฐ„์„ ์กฐ์ ˆ

๋

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฝ(lock)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ™

Reference

http://wiki.gurubee.net/display/STUDY/1.Lock

https://sabarada.tistory.com/121

https://centbin-dev.tistory.com/40

Written on June 15, 2021