Database Lock

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฝ (Database Lock)

์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ(์“ฐ๊ธฐ/์ฝ๊ธฐ)ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ฐ์ดํ„ฐ๋ฅผ ์ž ๊ทธ๋Š”(Lock) ํ–‰์œ„๋ฅผ ๋งํ•œ๋‹ค.

๋ฝ์ด ํ•„์š”ํ•œ ์ด์œ 

๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋™์‹œ์— ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์ด ๊นจ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋กœ, ์‡ผํ•‘๋ชฐ์—์„œ ์žฌ๊ณ ๊ฐ€ 1๊ฐœ ๋‚จ์•˜์œผ๋ฉฐ ์ƒํ’ˆ ๊ตฌ๋งค ํŠธ๋žœ์žญ์…˜์—์„œ๋Š” ๋‹ค์Œ์˜ ์ˆœ์„œ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ํ•˜์ž.

SELECT ์žฌ๊ณ  ์ˆ˜ FROM ์žฌ๊ณ ; -- 1. ์žฌ๊ณ  ๊ฐœ์ˆ˜ ํ™•์ธ
UPDATE ์‚ฌ์šฉ์ž SET ์ž”์•ก = ์ž”์•ก-์ƒํ’ˆ๊ฐ€๊ฒฉ; -- 2. ๊ฒฐ์ œ
UPDATE ์žฌ๊ณ  SET ์žฌ๊ณ  ์ˆ˜ = 0; -- 3. ์žฌ๊ณ  ์—…๋ฐ์ดํŠธ
INSERT INTO ์ฃผ๋ฌธ VALUES ์ฃผ๋ฌธ์ž, ์ƒํ’ˆ, ...; -- 4. ์ฃผ๋ฌธ ์ƒ์„ฑ

๊ทธ๋ฆฌ๊ณ  ๊ฑฐ์˜ ๋™์‹œ์— ์š”์ฒญ๋œ ์‚ฌ์šฉ์ž A, B์˜ ์ฃผ๋ฌธ์— ์˜ํ•ด ๋‹ค์Œ์˜ ์ˆœ์„œ๋กœ ์ฟผ๋ฆฌ๊ฐ€ ์ฒ˜๋ฆฌ๋œ๋‹ค๊ณ  ํ•˜์ž.

A๊ฐ€ ์žฌ๊ณ  ๊ฐœ์ˆ˜ ํ™•์ธ (1)
B๊ฐ€ ์žฌ๊ณ  ๊ฐœ์ˆ˜ ํ™•์ธ (1)
A๊ฐ€ ๊ฒฐ์ œ
B๊ฐ€ ๊ฒฐ์ œ
A๊ฐ€ ์žฌ๊ณ  ์—…๋ฐ์ดํŠธ (0)
B๋„ ์žฌ๊ณ  ์—…๋ฐ์ดํŠธ (0์ด ๋ฎ์–ด์”Œ์›Œ์ง)
A์˜ ์ฃผ๋ฌธ ์ƒ์„ฑ
B์˜ ์ฃผ๋ฌธ ์ƒ์„ฑ

์žฌ๊ณ ๋Š” 1๊ฐœ์ธ๋ฐ ๋‘ ์‚ฌ๋žŒ ๋ชจ๋‘ ๊ตฌ๋งค์— ์„ฑ๊ณตํ•˜๊ณ  ๋ง์•˜๋‹ค. ์ด๋Š” ํ•˜๋‚˜์˜ ์žฌ๊ณ ์— ๋Œ€ํ•ด ์ค‘๋ณต๋œ ์ฃผ๋ฌธ์ด ์ƒ์„ฑ๋œ ๊ฒƒ์œผ๋กœ ๋ช…๋ฐฑํžˆ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์ด ์นจํ•ด๋œ ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ ์ƒํ™ฉ์˜ ์˜ˆ๋ฐฉ์„ ์œ„ํ•ด ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ํ•ด์•ผ ํ•˜๊ณ , ์ด๋ฅผ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฝ(Lock)์„ ๊ฑฐ๋Š” ๊ฒƒ์ด๋‹ค.

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

๋ฝ์˜ ์ข…๋ฅ˜๋กœ๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

๋‚™๊ด€์  ๋ฝ (Optimistic Lock)

  • ๋‚™๊ด€์  ๋ฝ์€ ๋ง ๊ทธ๋Œ€๋กœ ๋‚™๊ด€์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ์ž ๊ธˆ ๊ธฐ๋ฒ•์ด๋‹ค.

  • ๋‚™๊ด€์  ๋ฝ์—์„œ๋Š” ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ์‹œ ๊ฒฝํ•ฉ(์ถฉ๋Œ)์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

  • ๋”ฐ๋ผ์„œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ž ๊ทธ๋Š” ๋Œ€์‹  ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ์‹œ ์ž์‹ ์ด ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ์™€ ๋ฒ„์ „ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ , ์ผ์น˜ํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ๊ณผ ํ•จ๊ป˜ ๋ฒ„์ „ ์ •๋ณด๋„ ๊ฐฑ์‹ ํ•œ๋‹ค. ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ๋‚ด์—ญ์€ ๋กค๋ฐฑ(RollBack)ํ•œ๋‹ค.

  • ๋‚™๊ด€์  ๋ฝ์€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐฑ์‹ ๋  ์ผ์ด ๊ฑฐ์˜ ์—†๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

๋น„๊ด€์  ๋ฝ (Pessimistic Lock)

  • ๋น„๊ด€์  ๋ฝ์€ ๋ง ๊ทธ๋Œ€๋กœ ๋น„๊ด€์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ์ž ๊ธˆ ๊ธฐ๋ฒ•์ด๋‹ค.

  • ๋น„๊ด€์  ๋ฝ์—์„œ๋Š” ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ์‹œ ๊ฒฝํ•ฉ(์ถฉ๋Œ)์ด ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ๋†’๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

  • ๋”ฐ๋ผ์„œ, ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•  ๋•Œ ํ•ด๋‹น DB/ํ…Œ์ด๋ธ”/๋ ˆ์ฝ”๋“œ/ํ•„๋“œ๋ฅผ ์ž ๊ทผ๋‹ค.

  • ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•˜๋ ค๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ์ž ๊ธˆ์ด ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.

  • ๋น„๊ด€์  ๋ฝ์€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐฑ์‹ ๋  ์ผ์ด ์žฆ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ฃผ๋กœ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋™์‹œ์— ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ์„ ์š”์ฒญํ•˜๋Š” ์ผ์ด ๋งŽ๋‹ค. ๋”ฐ๋ผ์„œ, ๋น„๊ด€์  ๋ฝ์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  • ๋น„๊ด€์  ๋ฝ์€ ๋‹ค์‹œ ๊ณต์œ  ๋ฝ(Shared Lock)๊ณผ ๋ฐฐํƒ€ ๋ฝ(Exclusive Lock)์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

๋ฐฐํƒ€ ๋ฝ ์—ฐ์‚ฐ์˜ ์ข…๋ฅ˜

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

  • ๊ณต์œ  ๋ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฝ๊ธฐ ์œ„ํ•œ ๋ฝ์ด๋‹ค.

  • ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ(SELECT)๋งŒ ํ—ˆ์šฉํ•˜๊ณ , ์“ฐ๋Š” ๊ฒƒ(INSERT/UPDATE/DELETE)์€ ๋ง‰๋Š”๋‹ค.

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

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

  • ๋ฐฐํƒ€ ๋ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์“ฐ๊ธฐ ์œ„ํ•œ ๋ฝ์ด๋‹ค.

  • ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ, ์“ฐ๋Š” ๊ฒƒ์„ ๋ชจ๋‘ ๋ง‰๋Š” ๋ฝ์ด๋‹ค.

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

๋ฝ์˜ ์ ์šฉ ๊ฐ€๋Šฅ ๋ฒ”์œ„

  • ๋ฝ์€ DB, ํŒŒ์ผ, ํ•˜๋‚˜์˜ ํ–‰(๋ ˆ์ฝ”๋“œ), ํ•˜๋‚˜์˜ ํ•„๋“œ ๋‹จ์œ„๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํฐ ๋ฒ”์œ„์— ์ ์šฉํ•  ์ˆ˜๋ก ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•ด์ง€์ง€๋งŒ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค. (๋ณ‘ํ–‰ ๊ฐ€๋Šฅ์„ฑ ๋‚ฎ์•„์ง)

  • ๋ฐ˜๋Œ€๋กœ ์ž‘์€ ๋ฒ”์œ„์— ์ ์šฉํ•  ์ˆ˜๋ก ๊ตฌํ˜„์ด ๋ณต์žกํ•ด์ง€์ง€๋งŒ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง„๋‹ค. (๋ณ‘ํ–‰ ๊ฐ€๋Šฅ์„ฑ ๋†’์•„์ง)

์„ฑ๋Šฅ ์ €ํ•˜ ์š”์†Œ

Blocking

  • ์ ‘๊ทผํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ์— ๋ฝ์ด ๊ฑธ๋ ค ์žˆ์–ด ๋Œ€๊ธฐํ•˜๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

  • ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ๋ฝ์ด ํ•ด์ œ๋˜๋ฉด(์ง„ํ–‰ ์ค‘์ด๋˜ ํŠธ๋žœ์žญ์…˜์ด commit๋˜๋ฉด ๋ณดํ†ต ํ•ด์ œ๋จ) ๋ธ”๋กœํ‚น๋„ ํ•ด์ œ๋œ๋‹ค.

Deadlock

  • ์„œ๋กœ ๋‹ค๋ฅธ ๋ฝ์ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์ œ์–ด๊ถŒ์„ ์„ ์ ํ•œ ์ƒํƒœ์—์„œ ์ƒ๋Œ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•˜๋ ค ํ•  ๋•Œ, ๋ˆ„๊ตฌ๋„ ์ œ์–ด๊ถŒ์„ ์–ป์ง€ ๋ชปํ•ด ์˜์›ํžˆ ๋ธ”๋กœํ‚น ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค.

  • A๊ฐ€ ๋ฐ์ดํ„ฐ1์— ๋ฝ์„ ๊ฑธ๊ณ , B๊ฐ€ ๋ฐ์ดํ„ฐ2์— ๋ฝ์„ ๊ฑธ๊ณ , A๋Š” ๋ฐ์ดํ„ฐ2๋ฅผ ์š”๊ตฌํ•˜๊ณ , B๋Š” ๋ฐ์ดํ„ฐ1์„ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ๊ฒฐ๊ตญ A์™€ B ๋ชจ๋‘ ์ž์‹ ์˜ ๋ฝ์„ ํ•ด์ œํ•˜์ง€ ์•Š๊ณ  ์ƒ๋Œ€์˜ ๋ฝ์ด ํ•ด์ œ๋˜๊ธธ ๊ธฐ๋‹ค๋ฆฌ๋ฏ€๋กœ ๋ˆ„๊ตฌ๋„ ํŠธ๋žœ์žญ์…˜์„ ์™„๋ฃŒํ•  ์ˆ˜ ์—†๋‹ค.

  • ๋ฐ๋“œ๋ฝ์€ ๊ทน์‹ฌํ•œ ์„ฑ๋Šฅ ์ €ํ•˜(์‹ฌํ•˜๋ฉด ์„œ๋ฒ„ ์žฅ์• )๋กœ ์ด์–ด์ง€๋ฏ€๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด ์ตœ๋Œ€ํ•œ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

    • ํŠธ๋žœ์žญ์…˜์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ์ง€์†๋˜๋ฉด ํƒ€์ž„์•„์›ƒ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋„๋ก ํ•˜์—ฌ ๊ต์ฐฉ์ƒํƒœ๋ฅผ ๊ฐ•์ œ์ข…๋ฃŒํ•œ๋‹ค.

    • ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ ์ˆœ์„œ๋ฅผ ์ตœ๋Œ€ํ•œ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•œ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” A์™€ B ๋ชจ๋‘ ๋ฐ์ดํ„ฐ1, 2๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๋‘˜ ๋‹ค 1โ†’2 ์ˆœ์„œ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ฉด ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•  ์ผ์ด ์—†๋‹ค.

๊ฒฐ๋ก 

  • Lock์€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ์„ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๊ฐ๋‚ดํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŠธ๋žœ์žญ์…˜์„ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฟ์ด๋‹ค.

  • ์ž์‹ ์ด ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” DBMS์—์„œ ์–ด๋–ค Lock์„ ์ง€์›ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Reference

[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๋งˆ๋ฃจ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Lock

Last updated