Database Lock
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ (Database Lock)
์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ฐ์ดํฐ์ ์ ๊ทผ(์ฐ๊ธฐ/์ฝ๊ธฐ)ํ์ง ๋ชปํ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๊ทธ๋(Lock) ํ์๋ฅผ ๋งํ๋ค.
๋ฝ์ด ํ์ํ ์ด์
๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋์์ ํน์ ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ค๋ฉด ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ๊นจ์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๊ฐ๋จํ ์์๋ก, ์ผํ๋ชฐ์์ ์ฌ๊ณ ๊ฐ 1๊ฐ ๋จ์์ผ๋ฉฐ ์ํ ๊ตฌ๋งค ํธ๋์ญ์ ์์๋ ๋ค์์ ์์๋ก ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ค๊ณ ํ์.
๊ทธ๋ฆฌ๊ณ ๊ฑฐ์ ๋์์ ์์ฒญ๋ ์ฌ์ฉ์ 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
Last updated