๐ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์
๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์๋ ํ์ผ ์์คํ
์ ์ด์ฉํ์ฌ ๊ด๋ฆฌํ์๋๋ฐ ์ด ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ ์ข
์์ฑ, ์ค๋ณต์ฑ, ๋ฌด๊ฒฐ์ฑ ๋ฌธ์
๊ฐ ๋ฐ์ํ๋ค.
๐ํน์ง
- ๋ฐ์ดํฐ์ ๋
๋ฆฝ์ฑ
- ๋ฌผ๋ฆฌ์ ๋
๋ฆฝ์ฑ : ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฌ์ด์ฆ๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ผ ๋ ๊ด๋ จ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ ํ ํ์๊ฐ ์๋ค.
- ๋
ผ๋ฆฌ์ ๋
๋ฆฝ์ฑ : ๋
ผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ฏ๋ก ์์ฉ ํ๋ก๊ทธ๋จ์ ์๊ตฌ๋ฅผ ๋ง์กฑ์ํฌ ์ ์๋ค.
- ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ
- ์ฌ๋ฌ ๊ฒฝ๋ก๋ฅผ ํตํด ์๋ชป๋ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ๋ ๊ธฐ๋ฅ(๋ฐ์ดํฐ์ ์ ํจ์ฑ ๊ฒ์ฌ)
- ๋ฐ์ดํฐ์ ๋ณด์์ฑ
- ๊ถํ์ด ์๋ ์ฌ์ฉ์๋ค๋ง ์์์ ์ ๊ทผํ ์ ์๋๋ก ์ค์
- ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ
- ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ๋
ผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌํจ(์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ ๋ ๋๋จธ์ง ๋ฐ์ดํฐ์ ์ผ์นํ์ง ์๋ ๋ถ์ผ์น์ฑ์ ๋ฐฐ์ ํจ)
- ๋ฐ์ดํฐ ์ค๋ณต ์ต์ํ
- ๋ฐ์ดํฐ๋ฅผ ํตํฉ ๊ด๋ฆฌํจ์ผ๋ก์จ ์๋ฃ์ ์ค๋ณต๊ณผ ๋ฐ์ดํฐ์ ์ค๋ณต ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
โก ๋์คํฌ I/O๋ฅผ ์ค์ผ ์๋ก ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ฑ๋ฅ์ ์ข์์ง๋ค.
๐ Index
๐ ์ธ๋ฑ์ค๋?
- ์ธ๋ฑ์ค๋ ๋ง ๊ทธ๋๋ก ์์ธ์ด๋ค. ์๋ฅผ ๋ค์ด ์ค๋ช
ํ๋ฉด ๋ฐ์ดํฐ๋ ์ฑ
์ ๋ด์ฉ์ด๊ณ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ ์ฝ๋ ์ฃผ์๋ ์ธ๋ฑ์ค ๋ชฉ๋ก์ ์๋ ํ์ด์ง ๋ฒํธ์ด๋ค.
๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํด์ ์ฐพ์ผ๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋๊น ์ปฌ๋ผ์ ๊ฐ๊ณผ ํด๋น ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์ฃผ์๋ฅผ ํค์ ๊ฐ์ ์์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด๋๋ค.
- DBMS(๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
)์ ํญ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๋ค. (์ฆ, ํ์ํ๋๋ฐ๋ ๋น ๋ฅด์ง๋ง ๊ฐ์ ์ถ๊ฐ, ์ญ์ , ์์ ํ๋ ๊ฒฝ์ฐ์๋ ๋๋ฆฌ๋ค.)
๐ ์ธ๋ฑ์ค ์๋ฃ๊ตฌ์กฐ
- B-Tree
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ปฌ๋ผ์ ๊ฐ์ ๋ณํํ์ง ์๊ณ ์๋์ ๊ฐ์ ์ด์ฉํด ์ธ๋ฑ์ฑํ๋ค.
- Hash
- ์ปฌ๋ผ์ ๊ฐ์ผ๋ก ํด์ ๊ฐ์ ๊ณ์ฐํด์ ์ธ๋ฑ์คํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋งค์ฐ ๋น ๋ฅธ ๊ฒ์์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํ์ง๋ง ๊ฐ์ ๋ณํํด์ ์ธ๋ฑ์ฑํ๋ฏ๋ก ๊ฐ์ ์ผ๋ถ๋ง์ผ๋ก ๊ฒ์ ํ ๋๋ hash๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
โก B-tree๋ณด๋ค Hash๊ฐ ํจ์จ์ ์ผ ๊ฒ ๊ฐ์ง๋ง SELECT ์ง์์ ์กฐ๊ฑด์ ๋ถ๋ฑํธ(<>)๋ ํฌํจ๋๋ฏ๋ก hash์์ ๋ฑํธ(=) ์ฐ์ฐ์ด ์๋ ๋ถ๋ฑํธ ์ฐ์ฐ์ ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๐ ํด๋ฌ์คํฐ
์ธ๋ฑ์ค์์ ํด๋ฌ์คํฐ๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ธ์ ํ ์ฅ์์ ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ๋ค์ ๋ฌถ์ด์ ์ ์ฅํ๋ ํํ์ด๋ค. ํด๋ฌ์คํฐ ์ธ๋ฑ์ค๋ ํ๋ผ์ด๋จธ๋ฆฌ ํค์ ์ํด ๋ ์ฝ๋ ์ ์ฅ ์์น๊ฐ ๊ฒฐ์ ๋๋ค. ๋ฐ๋ผ์ ํค๋ฅผ ์ ์คํ๊ฒ ๊ฒฐ์ ํ๊ณ ์ฌ์ฉํด์ผํ๋ค.
๐ ์ฑ๋ฅ๊ณผ ๊ณ ๋ คํด์ผํ ์ฌํญ
์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด INSERT, DELETE, UPDATE ์ฟผ๋ฆฌ๋ฌธ์ ์คํํ ๋ ๋ณ๋์ ๊ณผ์ ์ด ์ถ๊ฐ๋๋ค.
INSERT๋ ์ธ๋ฑ์ค์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด์ผํ๊ณ DELETE๋ ์ธ๋ฑ์ค์ ์กด์ฌํ๋ ๊ฐ์ ์ญ์ ํ์ง ์๊ณ ์ฌ์ฉํ์ง ์๋๋ค๋ ํ์๋ก ๋จ๊ฒ ๋๋ค. ๋ฐ๋ผ์ row์ ์๋ ๊ทธ๋๋ก์ด๋ฏ๋ก ์ค์ ๋ฐ์ดํฐ์ ๋นํด ํ์ ๋ฐ์ดํฐ๊ฐ ๋ง์ด ์กด์ฌํ ์ ์๋ค.
๐ ์ ๊ทํ
๐ ์ ๊ทํ๋?
- ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ์ค๋ณต์ ์ต์ํํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๋ ์์
์ด๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ๋ฉด ์ด๋ ํ ํจ์์ ์ข
์์ฑ์ ๋ง์กฑํ๋์ง์ ๋ฐ๋ผ ์ ๊ทํ์ด ์ ์๋๊ณ ๊ทธ ์ ๊ทํ์ ๋ง์กฑํ์ง ๋ชปํ๋ ๋ฆด๋ ์ด์
์ ๋๋์ด์ ๋ง์กฑํ๋ ๋ฆด๋ ์ด์
์ผ๋ก ๋ถํดํ๋ ์์
์ด๋ค.
- ํจ์์ ์ข
์์ฑ : ์์ฑ๋ค ๊ฐ์ ์ํธ ๊ด๊ณ๋ก๋ถํฐ ์ ๋๋๋ ์ ์ฝ์กฐ๊ฑด์ ์ผ์ข
(X์ ๊ฐ์ด Y์ ๊ฐ์ ์ ์ผํ๊ฒ ๊ฒฐ์ ํ๋ฉด X๋ Y๋ฅผ ํจ์์ ์ผ๋ก ๊ฒฐ์ ํ๋ค.)
- ์ ๊ทํ์ ์กฐ๊ฑด
- ๋ถํด์ ๋์์ธ ๋ถํด ์งํฉ์ ๋ฌด์์ค ์กฐ์ธ์ ๋ณด์ฅํด์ผ ํ๋ค.
- ๋ถํด ์งํฉ์ ํจ์์ ์ข
์์ฑ์ ๋ณด์กดํด์ผ ํ๋ค.
๐ ์ ๊ทํ์ ์ข
๋ฅ
- ์ 1 ์ ๊ทํ
- ์์ฑ์ ๋๋ฉ์ธ์ด ์ค์ง ์์ ๊ฐ(ํ๋์ ๊ฐ)๋ง์ ํฌํจํ๊ณ , ํํ์ ๋ชจ๋ ์์ฑ์ด ๋๋ฉ์ธ์ ์ํ๋ ํ๋์ ๊ฐ์ ๊ฐ์ง๋ค.
- ์ 2 ์ ๊ทํ
- ์ 1 ์ ๊ทํ์ ์ํ๋ฉด์ ๋ชจ๋ ๋น์ฃผ์ ์์ฑ๋ค์ด ์ฃผ์ ์์ฑ์ ๋ํด์ ์์ ํจ์์ ์ข
์์ด๋ฉด ๋ง์กฑํ๋ค.(์์ ํจ์์ ์ข
์ : x -> y ๋ผ๊ณ ํ ๋, x์ ์ด๋ ํ ์์ฑ์ด๋ผ๋ ์ ๊ฑฐํ๋ฉด ๋ ์ด์ ํจ์์ ์ข
์์ฑ์ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ. ์ฆ, ํค๊ฐ ์๋ ์ด๋ค์ด ๊ฐ๊ฐ ํ๋ณดํค์ ๋ํด ๊ฒฐ์ ๋๋ ๋ฆด๋ ์ด์
ํํ)
- ์ 3 ์ ๊ทํ
- ์ 2 ์ ๊ทํ์ ์ํ๋ฉด์ ์ด๋ ํ ๋น์ฃผ์ ์์ฑ๋ ๊ธฐ๋ณธํค์ ๋ํด์ ์ดํ์ ์ผ๋ก ์ข
์๋์ง ์์ผ๋ฉด ๋ง์กฑํ๋ค.(์ดํ ํจ์์ ์ข
์ : x -> y , y -> z ์ ๊ฒฝ์ฐ์ x -> z๋ฅผ ์ถ๋ก ํ ์ ์๋ ๊ด๊ณ. ์ฆ, ๋น์ฃผ์ ์์ฑ์ด ๋น์ฃผ์ ์์ฑ์ ์ํด ์ข
์๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ ๋ฆด๋ ์ด์
ํํ)
- BCNF ์ ๊ทํ
- ์ 3 ์ ๊ทํ์ ์ํ๋ฉด์ 3 ์ ๊ทํ์ ๋ณด์ํ๋ ์ ๊ทํ์ผ๋ก, ํ๋ณดํค๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ์ 3 ์ ๊ทํ์ ๋ง์กฑ์ํค์ง๋ง ์ด์ ํ์์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋ชจ๋ ๊ฒฐ์ ์(์ฃผ์์์ฑ??)๊ฐ ํ๋ณดํค ์งํฉ์ ์ํ๋ฉด ๋ง์กฑํ๋ค.
๐ ์ ๊ทํ์ ์ฅ์
- ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋ณ๊ฒฝ ์ ๋ฐ์ํ๋ ์ด์ ํ์๋ค์ ํด๊ฒฐํ ์ ์๋ค.
- ์ด์ ํ์
- ์ฝ์
์ด์ : ์ํ์ง ์๋ ์๋ฃ๊ฐ ์ฝ์
, ์ฝ์
ํ๋๋ฐ ์๋ฃ๊ฐ ๋ถ์กฑํด ์ฝ์
x
- ์ญ์ ์ด์ : ํ๋์ ์๋ฃ๋ง ์ญ์ ํ์ ๋ ๊ทธ ์๋ฃ๊ฐ ํฌํจ๋ ํํ ์ ์ฒด๊ฐ ์ญ์ ๋จ(์ํ์ง ์๋ ์ ๋ณด ์์ค)
- ๊ฐฑ์ ์ด์ : ์ ํํ์ง ์๊ฑฐ๋ ์ผ๋ถ์ ํํ๋ง ๊ฐฑ์ ๋์ด ์ ๋ณด๊ฐ ์ผ๊ด์ฑ์ด ์์ด์ง
- ์ฐ๋๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ต์ํ์ ์ํฅ๋ง ๋ฏธ์น๊ฒ ๋ง๋ค์ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ช
์ ์ฐ์ฅ์ํจ๋ค.
๐ ๋จ์
-
๋ฆด๋ ์ด์
๊ฐ์ ์ฐ์ฐ(JOIN ์ฐ์ฐ)์ด ๋ง์์ง๋ค. ์ด๋ก ์ธํด์ ์๋ต ์๊ฐ์ด ๋๋ ค์ง ์ ์๋ค.(๋นจ๋ผ์ง ์๋, ๋๋ ค์ง ์๋ ์์)
โก ๋์์ฑ
: ๋ฐ์ ๊ทํ
- ์ ๊ทํ๋ ์์ฑ, ๊ด๊ณ๋ฅผ ์์คํ
์ ์ฑ๋ฅ ํฅ์ ๋ฐ ๊ฐ๋ฐ๊ณผ ๋จ์ํ๋ฅผ ์ํด ํตํฉ, ๋ถ๋ฆฌํ๋ ๊ธฐ๋ฒ์ด๋ค.
- ์ฑ๋ฅ์ด ์ ํ๋ ๊ฒ์ด ์์๋๋ ๊ฒฝ์ฐ ๋ฐ์ ๊ทํ๋ฅผ ์ํํ๋ค.(but, ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ด ๊นจ์ง ์ ์๋ค. ๋ํ ์๋ต ์๊ฐ์ด ๋ฆ์ด์ง๋ค.)
๐ ํธ๋์ญ์
๐ ํธ๋์ญ์
์ด๋?
์์
์ ์์ ์ฑ์ ๋ณด์ฅํด์ฃผ๋ ๊ฒ์ผ๋ก ๋
ผ๋ฆฌ์ ์ธ ์์
์
์ ๋ชจ๋ ์๋ฒฝํ๊ฒ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋๋ ์ฒ๋ฆฌํ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ ์ ์ํ๋ก ๋ณต๊ตฌํด์ ์์
์ ์ผ๋ถ๋ง ์ ์ฉ๋๋ ํ์์ด ๋ฐ์ํ์ง ์๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
โก ์ฌ์ฉ์์ ์
์ฅ์์๋ ์์
์ ๋
ผ๋ฆฌ์ ๋จ์๋ก ์ดํดํ ์ ์๊ณ ์์คํ
์ ์
์ฅ์์๋ ๋ฐ์ดํฐ๋ค์ ์ ๊ทผ ๋๋ ๋ณ๊ฒฝํ๋ ํ๋ก๊ทธ๋จ์ ๋จ์๊ฐ ๋๋ค.
๐ ํธ๋์ญ์
๊ณผ Lock
์ด ๋์ ์๋ก ๋น์ทํ ๊ฐ๋
๊ฐ์ง๋ง ์ฌ์ค ์ ๊ธ์ ๋์์ฑ์ ์ ์ดํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๊ณ ํธ๋์ญ์
์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๋ค.
- Lock : ์ฌ๋ฌ ์ปค๋ฅ์
์์ ๋์์ ๋์ผํ ์์์ ์์ฒญํ ๊ฒฝ์ฐ ์์๋๋ก ํ ์์ ์๋ ํ๋์ ์ปค๋ฅ์
๋ง ๋ณ๊ฒฝํ ์ ์๊ฒ ํด์ฃผ๋ ์ญํ
- ํธ๋์ญ์
: ๋
ผ๋ฆฌ์ ์ธ ์์
์
์์ฒด๊ฐ 100% ์ ์ฉ๋๊ฑฐ๋ ์๋ฌด๊ฒ๋ ์ ์ฉ๋์ง ์์์ผ ํจ์ ๋ณด์ฅํ๋ ๊ฒ
๐ ํธ๋์ญ์
์ ํน์ฑ
ํธ๋์ญ์
์ ACID๋ผ๋ 4๊ฐ์ง ํน์ฑ์ ๋ง์กฑํด์ผ ํ๋ค.
-
์์์ฑ(Atomicity) : ํธ๋์ญ์
์ค๊ฐ์ ์ด๋ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด ํธ๋์ญ์
์ ํด๋นํ๋ ์ด๋ ํ ์์
๋ด์ฉ๋ ์ํ๋์ด์๋ ์๋๋ฉฐ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์๋์ง ์์์ ๊ฒฝ์ฐ์๋ง ๋ชจ๋ ์์
์ด ์ํ๋์ด์ผ ํ๋ค.
-
์ผ๊ด์ฑ(Consistenct) : ํธ๋์ญ์
์ด ์๋ฃ๋ ๋ค์์ ์ํ์์๋ ํธ๋์ญ์
์ด ์ผ์ด๋๊ธฐ ์ ์ ์ํฉ๊ณผ ๋์ผํ๊ฒ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํด์ผ ํ๋ค.
-
๊ณ ๋ฆฝ์ฑ(Isolation) : ๊ฐ๊ฐ์ ํธ๋์ญ์
์ ์๋ก ๊ฐ์ญ์์ด ๋
๋ฆฝ์ ์ผ๋ก ์ํ๋์ด์ผ ํ๋ค.
-
์ง์์ฑ(Durability) : ํธ๋์ญ์
์ด ์ ์์ ์ผ๋ก ์ข
๋ฃ๋ ๋ค์์๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์์
์ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋์ด์ผ ํ๋ค.
๐ ํธ๋์ญ์
์ ์ํ
- Active
- ํธ๋์ญ์
์ ํ๋ ์ํ
- ํธ๋์ญ์
์ด ์คํ์ค์ด๋ฉฐ ๋์์ค์ธ ์ํ๋ฅผ ๋งํ๋ค.
- Failed
- ํธ๋์ญ์
์คํจ ์ํ
- ํธ๋์ญ์
์ด ๋ ์ด์ ์ ์์ ์ผ๋ก ์งํ ํ ์ ์๋ ์ํ๋ฅผ ๋งํ๋ค.
- Partially Committed
- ํธ๋์ญ์
์
Commit
๋ช
๋ น์ด ๋์ฐฉํ ์ํ
- ํธ๋์ญ์
์ด
commit
์ด์ sql
๋ฌธ์ด ์ํ๋๊ณ commit
๋ง ๋จ์ ์ํ๋ฅผ ๋งํ๋ค.
- Committed
- ํธ๋์ญ์
์๋ฃ ์ํ
- ํธ๋์ญ์
์ด ์ ์์ ์ผ๋ก ์๋ฃ๋ ์ํ๋ฅผ ๋งํ๋ค.
- Aborted
- ํธ๋์ญ์
์ทจ์ ์ํ
- ํธ๋์ญ์
์ด ์ทจ์๋๊ณ ํธ๋์ญ์
์คํ ์ด์ ๋ฐ์ดํฐ๋ก ๋์๊ฐ ์ํ๋ฅผ ๋งํ๋ค.
โก Partially Committed์ Committed์ ์ฐจ์ด์
Commit
์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ํ๋ Partial Committed
์ํ๊ฐ ๋๋ค. ์ดํ Commit
์ ๋ฌธ์ ์์ด ์ํํ ์ ์์ผ๋ฉด Committed
์ํ๋ก ์ ์ด๋๊ณ , ๋ง์ฝ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด Failed
์ํ๊ฐ ๋๋ค.
์ฆ, Partial Committed
๋ Commit
์์ฒญ์ด ๋ค์ด์์ ๋๋ฅผ ๋ปํ๊ณ
Committed
๋ Commit
์ ์ ์์ ์ผ๋ก ์๋ฃํ ์ํ๋ฅผ ๋ปํ๋ค.
๐ ํธ๋์ญ์
์ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์
๊ผญ ํ์ํ ์ต์์ ์ฝ๋์๋ง ์ ์ฉํ๋ ๊ฒ์ด ์ข๋ค.(ํธ๋์ญ์
์ ๋ฒ์๋ฅผ ์ต์ํ)
๊ทธ ์ด์ ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ปค๋ฅ์
์ ๊ฐ์๊ฐ ์ ํ์ ์ด๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ ๋จ์ ํ๋ก๊ทธ๋จ์ด ์ปค๋ฅ์
์ ์์ ํ๋ ์๊ฐ์ด ๊ธธ์ด์ง๋ค๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ์ฌ์ ์ปค๋ฅ์
์ ๊ฐ์๋ ์ค์ด๋ค๊ฒ ๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด ๊ฐ ํ๋ก๊ทธ๋จ์์ ์ปค๋ฅ์
์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด ๊ธฐ๋ค๋ ค์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ ์๋ ์๋ค.
๐ ๊ต์ฐฉ์ํ
๐ ๊ต์ฐฉ์ํ๋(deadlock)?
๋ ๊ฐ ์ด์์ ํธ๋์ญ์
์ด ํน์ ์์์ ์ ๊ธ(Lock)์ ํ๋ํ ์ฑ ๋ค๋ฅธ ํธ๋์ญ์
์ด ์์ ํ๊ณ ์๋ ์ ๊ธ์ ์๊ตฌํ๋ฉด ์๋ฌด๋ฆฌ ๊ธฐ๋ค๋ ค๋ ์ํฉ์ด ๋ฐ๋์ง ์๋ ์ํ๊ฐ ๋๋๋ฐ ์ด๋ฅผ ๋ปํ๋ค.
๊ฐฑ์ ์ฐ์ฐ(Insert, Update, Delete)๋ฅผ ์คํํ๋ฉด ์ ๊ธ์ ํ๋ํ๋ค.
โก ์์
ํธ๋์ญ์
1์ด ํ
์ด๋ธ B์ ์ฒซ ๋ฒ์งธ ํ์ ์ ๊ธ์ ์ป๊ณ ํธ๋์ญ์
2๋ ํ
์ด๋ธ A์ ์ฒซ ๋ฒ์งธ ํ์ ์ ๊ธ์ ์ป์๋ค๊ณ ํ์.
ํธ๋์ญ์
์ commitํ์ง ์์ ์ฑ ์๋ก์ ์ฒซ ๋ฒ์งธ ํ์ ๋ํ ์ ๊ธ์ ์์ฒญํ๋ฉด Deadlock์ด ๋ฐ์ํ๋ค.
๐ ๊ต์ฐฉ์ํ์ ๋น๋๋ฅผ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ
- ํธ๋์ญ์
์ ์์ฃผ ์ปค๋ฐํ๋ค.
- ์ ํด์ง ์์๋๋ก ํ
์ด๋ธ์ ์ ๊ทผํ๋ค.
- ์ฝ๊ธฐ ์ ๊ธ ํ๋(SELECT ~ FOR UPDATE)์ ์ฌ์ฉ์ ํผํ๋ค.
- ํ
์ด๋ธ ๋จ์์ ์ ๊ธ์ ํ๋ํด ๊ฐฑ์ ์ ์ง๋ ฌํ ํ๋ฉด ๋์์ฑ์ ๋จ์ด์ง์ง๋ง ๊ต์ฐฉ์ํ๋ฅผ ํผํ ์ ์๋ค.
๐ ๊ต์ฐฉ์ํ ๋ฐฉ์ง ํ๋กํ ์ฝ
- ํ์์์ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ
- ํธ๋์ญ์
Ti ์คํ ์, ํ์์์ ๊ธฐ๊ฐ(timeout interval)์ ์ค์
- Ti์ฌ lock ํ๋์ ์ํด ๋๊ธฐํ ๊ฒฝ์ฐ, ํ์์์ ๊ธฐ๊ฐ ๋์๋ง ๋๊ธฐ
- ํ์์์ ๊ธฐ๊ฐ์ด ์ง๋๋ฉด Ti๋ฅผ ์ฒ ํํ๊ณ ๋กค๋ฐฑ
- ์ฅ์
- ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ๋จํ๋ค.
- ์ผ์ ์๊ฐ ํ ๊ต์ฐฉ์ํ๋ฅผ ์ผ์ผํค๋ ํธ๋์ญ์
์ด ๋ฌด์กฐ๊ฑด ์ทจ์๋๋ฏ๋ก ๊ต์ฐฉ์ํ๊ฐ ํด๊ฒฐ๋๋ค.
- ๋จ์
- ์ต์ ์ ํ์์์ ๊ธฐ๊ฐ์ ์ค์ ํ๋ ๊ฒ์ด ์ด๋ ต๋ค.
- ๊ธฐ์ ํ์์ด ์์ฃผ ๋ฐ์ํ๋ค.
โก ๊ธฐ์(starvation) : ๋์ผํ ํธ๋์ญ์
์ด ๊ณ์ ๋กค๋ฐฑ๋๋ ํ์
- ํ์์คํฌํ(TimeStamp) TS๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
- ๋จผ์ ์์ํ ํธ๋์ญ์
์ด ์ด๋ค ๊ฒ์ธ์ง์ ๋ฐ๋ผ ๋๊ธฐํ๊ฑฐ๋ ๋กค๋ฐฑ์ํจ๋ค.
- ๊ธฐ์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ์ฌ์์๋๋ ํธ๋์ญ์
์ ์์ ํ์์คํฌํ๋ ์ค๋ฆฌ์ง๋ ํ์์คํฌํ๋ฅผ ์ฌ์ฉ
- Ti์ ์ค๋ฆฌ์ง๋ ์์ ํ์์คํฌํ๋ฅผ TS(Ti)๋ผ๊ณ ํ ๋, Ti๊ฐ ์ฌ์์๋๋ฉด ์์ ํ์์คํฌํ๋ฅผ TS(Ti)๋ก ๋ถ์ฌํ๋ ๋ฐฉ์
- Wait-Die ๋ฐฉ์
- ๋ค๋ฅธ ํธ๋์ญ์
์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ๊ณ ์์ ๋ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋(Wait) ํฌ๊ธฐ(Die)ํ๋ ๋ฐฉ์์ด๋ค.
- ํธ๋์ญ์
Ti๊ฐ Tj์ ์ํด ๋กํน๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋
- Ti๊ฐ ๋จผ์ ๋ค์ด์จ ํธ๋์ญ์
์ด๋ผ๋ฉด ๋๊ธฐ(Wait)
- Ti๊ฐ ๋์ค์ ๋ค์ด์จ ํธ๋์ญ์
์ด๋ผ๋ฉด ํฌ๊ธฐ(Die)ํ๊ณ , ๋์ค์ ์ฌ์์ํ์ฌ ๋ค์ ์์ฒญ
- ์ฌ์์ ๋ ๋, Ti์ ์์ ํ์์คํฌํ๋ ์ค๋ฆฌ์ง๋ ์์ ํ์์คํฌํ ๊ฐ์ธ TS(Ti)๋ก ๋ถ์ฌํ๋ค.
- Wound-Wait ๋ฐฉ์
- ๋ค๋ฅธ ํธ๋์ญ์
์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ๊ณ ์์ ๋, ๋นผ์๊ฑฐ๋(Wound) ๊ธฐ๋ค๋ฆฌ๋(Wait) ๋ฐฉ์์ด๋ค.
- ํธ๋์ญ์
Ti๊ฐ Tj์ ์ํด ๋กํน๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋
- Ti๊ฐ ๋จผ์ ๋ค์ด์จ ํธ๋์ญ์
์ด๋ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ์ (Wound)
- Tj๋ ์ฒ ํ์ํค๊ณ , ๋์ค์ ์ฌ์์
- ์ฌ์์ ๋ ๋, Ti์ ์์ ํ์์คํฌํ๋ ์ค๋ฆฌ์ง๋ ์์ ํ์์คํฌํ ๊ฐ์ธ TS(Ti)๋ก ๋ถ์ฌํ๋ค.
- Ti๊ฐ ๋์ค์ ๋ค์ด์จ ํธ๋์ญ์
์ด๋ผ๋ฉด ๋๊ธฐ(Wait)
โก Wound-Wait ๋ฐฉ์์ด Wait-Die ๋ฐฉ์์ ๋นํด ์ผ๋ฐ์ ์ผ๋ก roll-back ํ์๊ฐ ์ ๋ค.
๐ ๊ต์ฐฉ์ํ ํ์ง ํ๋กํ ์ฝ
- ๋๊ธฐ ๊ทธ๋ํ๋ฅผ ์์ฑํ์ฌ ๊ต์ฐฉ ๋ฐ์ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
- ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ธ์ ๋, ์ํ๊ตฌ์กฐ(cycle)์ด ์์ฑ๋๋ฉด ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๋ ๊ฒ
โก ํด๊ฒฐ๋ฐฉ์
- ํฌ์ํ ํธ๋์ญ์
์ ์ (victim) : ์งํ๋ฅ , ์์์๊ฐ, ์ฐ์ฐ๋ ๋ฑ์ ๊ณ ๋ คํ์ฌ ์ต์๋น์ฉ ํธ๋์ญ์
์ ์ ์ ํ๋ค.
- ํฌ์ํ ํธ๋์ญ์
์ ์์ ํ๊ฒ ๋กค๋ฐฑ : ์ด ๋, ๊ธฐ์๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๊ธฐ์ ๋ฐ์์ ์ค์ด๊ธฐ ์ํด, ๋กค๋ฐฑ ํ์๋ฅผ ๊ธฐ๋กํ์ฌ ํฌ์ ํธ๋์ญ์
์ ์ ์ ๋น์ฉ ๊ณ์ฐ์ ํฌํจ์ํจ๋ค.
์ฐธ๊ณ ์๋ฃ : Tech Interview