๋์์ ์งํ๋๋ ์ฌ๋ฌ๊ฐ์ ํธ๋์ญ์ ์ด ์์ ์ ์ฑ๊ณต์ ์ผ๋ก ๋ง์น ์ ์๋๋ก ํธ๋์ญ์ ์ ์คํ ์์๋ฅผ ์ ์ด ํ๋ ๊ธฐ๋ฒ
- ๋ค์ค clientํ๊ฒฝ์ ์ง์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ์ฌ๋ฌ ํธ๋์ญ์ ๋ค์ด ์ฑ๊ณต์ ์ผ๋ก ๋์์ ์คํ๋ ์ ์๋๋ก ์ง์ํ๋ ๊ธฐ๋ฅ
์ฌ๊ธฐ์ ๋ค์ค clientํ๊ฒฝ์ ์ฌ๋ฌ๋ช ์ ์ฌ์ฉ์๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํด ๋ฐ์ดํฐ๋ฅผ ์กฐํ ๋ฐ ์กฐ์ํ๋ ํ๊ฒฝ์ ๋งํ๋ค. (ex. ์ํ, ์ฆ๊ถ์ฌ)
- ๋ค์ค client(๋ง์ ์ฌ์ฉ์)๊ฐ ์์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์๋ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ์ ์ด๋ฅผ ์ ํํ๊ฒ ํ์ง ์์ผ๋ฉด, ๋ถ์ ํํ ๋ฐ์ดํฐ๊ฐ ๋๋ฒ๋ฆฐ๋ค.
- ํ์์ ์ผ๋ก ์ง์ํด์ผ ํ๋ ๊ธฐ๋ฅ
- ๋ณํ์ ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
- ๋๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ๋์์ ๋๊ฐ์ ํ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ ์์ ๋ฐ์ํ๋ ๋ฌธ์
- ํ ํธ๋์ญ์
์ด ๊ฐฑ์ ํ ๋ด์ฉ์ ๋ค๋ฅธ ํธ๋์ญ์
์ด ๋ฎ์ด์์ผ๋ก์จ ๊ฐฑ์ ์ด ๋ฌดํจํ ๋๋์ผ์ด ๋ฐ์
- ํธ๋์ญ์ 1์ด ์ฐ์ฐ(X=X-100000)์ ํ๊ณ ์๋์ค์ (๋ณ์ X์ ์ ์ฅ๋์ด ์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉ์ด ์๋จ)
- ํธ๋์ญ์ 2๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ฉด ๊ธฐ์กด์ ์๋ X=300000์ ์ฝ์ด์จ๋ค. ๊ทธ๋ฆฌ๊ณ X์ ๊ฐ์ X = X+50000์ผ๋ก ๊ณ์ฐ์ ํ๋ค.(๋ณ์ X์ ์ ์ฅ๋์ด ์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉ์ด ์๋จ)
- ๊ทธ ํ write_item(X)๋ฅผ ํธ๋์ญ์ 1์ด ์ํํ๋ฉด X์ ๊ฐ์ด 1์์ ๊ณ์ฐํ ๊ฐ X=200000์ผ๋ก ๋ณํ๋ค.(๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉ)
- ํธ๋์ญ์
2๊ฐ write_item(X)๋ฅผ ์ํํด X์ ๊ฐ์ด X=35000์ผ๋ก ๋ณํ๋ค.(๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉ)
=> ์ฌ๊ธฐ์ ํธ๋์ญ์ 1์ด ์ํํ ๋ด์ฉ์ ํธ๋์ญ์ 2๊ฐ ์ํํ ๋ด์ฉ์ผ๋ก ๋ฎ์ด์ฐ๊ฒ ๋์ด์ ํธ๋์ญ์ 1์ ๊ฐฑ์ ์ด ์ฌ์ค์ ๋ฌดํจํ๊ฐ ๋์๋ค.
- ํ ํธ๋์ญ์ ์ด ์์ ์ ํ๊ณ ๊ทธ ์์ ์ฌํญ์ ์ปค๋ฐํ์ง ์์์๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ๋ ๋ฐ์ํ๋ ๋ฌธ์
์ฌ์ฉ์ A์ ํธ๋์ญ์
์์ X,Y๊ฐ์ ์ฝ๊ณ X๊ฐ์ 100์ ๋ํ๋ค. ์ด๊ณผ์ ๋ค์ ์ฌ์ฉ์ B์ ํธ๋์ญ์
์ด X๋ฅผ ์ฝ์ํ X์ ๊ฐ์ *2๋ฅผ ํด์ค๋ค.(๊ทธ๋ฌ๋ฉด X=2200์ด ๋จ). Y์ ๊ฐ์ ์ฌ์ฉ์ A์ ํธ๋์ญ์
์ด ์ฝ์ ํ ๋ณ๊ฒฝํ๋ค(Y+100).
A์ ์ฌ์ฉ์๊ฐ ํธ๋์ญ์
์์ ์๋ ํ๊ฐ์ X=1100, Y=1100์ธ๊ณ
B์ ์ฌ์ฉ์๊ฐ ํธ๋์ญ์
์์ ์๋ ํ๊ฐ์ X=2200, Y=1000์ด๋ค.
ํ์ง๋ง, ์ต์ข
๊ฒฐ๊ณผ๋ X=2200, Y=1100์ด ๋๊ฒ.
์ด๋ ๊ฒ ๋ ํธ๋์ญ์ ์ด ๋์์ ํ ๋ฐ์ดํฐ์ ์ ๊ทผํด์ ์๋ํ๊ฒ๊ณผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๊ฒ.
- Non Repeatable read
ํ ํธ๋์ญ์ ์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋๋ฒ์ด์ ์ฝ๋๋ฐ ๊ทธ ํ ํธ๋์ญ์ ์์ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ๊ฐ์ ์ฝ์ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ด๋ค.
ํธ๋์ญ์
2๊ฐ X๋ฅผ ์ฝ์ ํ ํธ๋์ญ์
1์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พผ๋ค. ์ดํ ๋ ํธ๋์ญ์
2๊ฐ X๋ฅผ ์ฝ์ผ๋ฉด ํธ๋์ญ์
1์ด ๋ฐ๊พผ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๊ฐ์ ํธ๋์ญ์
์์๋ ๋ค๋ฅธ ๊ฐ์ ์ฝ๊ฒ ๋๋ค.
-
Phantom Read
ํ ํธ๋์ญ์ ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ ์ฝ๊ณ ์ดํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์์๋ ๊ทธ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์๋๊ฒ
-
Incorrect Summary
ํ ํธ๋์ญ์ ์ด ์ผ๋ถ ๋ ์ฝ๋์ ์ง๊ณ ํจ์๋ฅผ ์ ์ฉํ๋ ๋์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ํฉ์ ์๊ฐํด ๋ณด์. ์ ๋ฐ์ดํธํ๋ ํธ๋์ญ์ ์ ๋ช๊ฐ์ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ์ ํ๊ณ ์์ง ๋ค๋ฅธ ๋ช๊ฐ์ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝํ์ง ๋ชปํ์ํฉ์์ ์ง๊ณ ํจ์๋ ๊ฐ์ด ์ ๋ฐ์ดํธ๋๊ธฐ ์ ์ ๊ฐ์ ๊ณ์ฐํ๊ณ ์ ๋ฐ์ดํธ๋ ํ์ ๊ฐ์ ๊ณ์ฐํ ์ ์์ต๋๋ค.
ํธ๋์ญ์ 2๊ฐ ์ง๊ณ๋ฅผ ํ๊ณ ์๋ ์์ค์ ํธ๋์ญ์ 1์ด X์ ๊ฐ์ ๋ฐ๊พผ๋ค. ๊ทธ ํ ์ง๊ณ๊ฐ ๋๊ณ ํธ๋์ญ์ 1์ด ๋ง์ Y๋ฅผ ๋ฐ๊พผ๋ค. ์ง๊ณ์ X์ Y์ ๊ฐ์ด ๋๋ค ํ๋ฒ์ ์ ์ฉ๋๊ฐ์ด์ฌ์ผ ํ์ง๋ง ๋ฐ๋ก ์ ์ฉ์ด ๋์ด๋ฒ๋ฆฐ๋ค.
ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ์ ์ ๊ธ(lock)์ ์ค์ ํ๋ฉด ๋ค๋ฅธ ํธ๋์ญ์ ์ ํด๋น ๋ฐ์ดํฐ์ ๋ํด ์ ๊ธ์ด ํด์ (unlock)๋ ๋๊น์ง ์ ๊ทผ/์์ /์ญ์ ๊ฐ ๋ถ๊ฐํ๋ค.
Two-phase locking
lock์ ๋๋จ๊ณ๋ก ๊ตฌ๋ถํด์ ์งํํ๋ค.
์ด ๋ฐฉ๋ฒ์ ํ ํธ๋์ญ์ ์ 3๊ฐ์ง ๋ถ๋ถ์ผ๋ก ๋๋๋ค.
- ์ฒซ๋ฒ์งธ๋ ํธ๋์ญ์ ์ด ์์๋๋ฉด ๋ชจ๋ lock์ ๋ชจ์๋ค. (growing phase)
- ๋๋ฒ์งธ๋ ํด๋น ํธ๋์ญ์ ์ด ๋ชจ๋ lock์ ๋ชจ์ ์์ ์ด๋ค. ์ฒซ๋ฒ์งธ lock์ด ํด์ ๋ ๋ ๋ถํฐ ์ธ๋ฒ์งธ ๋ถ๋ถ์ด๋ค.
- ์ ์งธ๋ lock์ ํด์ ํ๋ ์์ ์ด๋ค. ์ด ์์ ์๋ ์๋ก์ด lock์ ๊ฑธ ์ ์๋ค. (shrinking phase)
two phase locking์ ๊ฐ ํธ๋์ญ์ ์ด ๋ ๋จ๊ณ๋ก ์ ๊ธ ๋๋ ์ ๊ธ ํด์ ๋ฅผ ์์ฒญํ ์ ์๋๋ก ํ๋ค.
- growing phase: ์ ๊ธ์ ์ป๋ ๋จ๊ณ์ด๋ค.(์ ๊ธ์ ํด์ ํ ์ ์๋ค.)
- shrinking phase: ์ ๊ธ์ ํด์ ํ๋ ๋จ๊ณ์ด๋ค. (์ ๊ธ์ ์ป์ ์ ์๋ค.)
T1 ํธ๋์ญ์
์ 1์์ 3๊น์ง lock์ ๊ฑธ๊ธฐ๋ง ํ๊ณ (growing phase) ์ดํ 5์์ 7๊น์ง๋ ์ ๊ธ์ ํ๊ธฐ๋ง ํ๋ค(release phase).-> 3์ด ์ ๊ธ์ ๋ค ๋ชจ์ ์์ ์ธ lock point
T2 ํธ๋์ญ์
์ 2์์ 6๊น์ง lock์ ๊ฑธ๊ธฐ๋ง ํ๊ณ (growing phase) ์ดํ์๋ 8๋ถํฐ๋ ์ ๊ธ์ ํ๊ธฐ๋ง ํ๋ค(release phase).-> 6์ด ์ ๊ธ์ ๋ค ๋ชจ์ ์์ ์ธ lock point
ํธ๋์ญ์ ์ง๋ ฌํ๋ฅผ ์์ผ์ฃผ์ง๋ง ๊ต์ฐฉ์ํ๋ ๊ธฐ์์ํ๊ฐ ์ผ์ด๋ ์ ์๋ค.
์ฝ๊ธฐ์ ์ฐ๊ธฐ์ฐ์ฐ์ ๋จผ์ ๋ค์ด์จ ํธ๋์ญ์ ์์๋ก ์ํ๋๋ค. ๋จผ์ ๋ค์ด์จ ํธ๋์ญ์ ์ด ํญ์ ๋ ๋นจ๋ฆฌ ์ํ๋จ.
ํธ๋์ญ์ ์ํ์์ ๋ฉ๋ชจ๋ฆฌ์์ ๋ณต์ฌ๋ณธ์์ ์ฐ์ฐ์ ์ํํ๊ณ ๊ฒ์ฆ ์๋ฃ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์
- ์ด ๊ณผ์ ์ 3๋จ๊ณ๋ก ์ด๋ค์ง๋ค.
- ์ฝ๊ธฐ ๋จ๊ณ: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฐ์ดํฐ๋ค์ ์ฝ๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง ์์ ์ด๋ ์ฐ๊ธฐ๋ ๋ณต์ฌ๋ณธ์๋ค๊ฐ ์ํํ๋ค.
- ๊ฒ์ฆ ๋จ๊ณ: ํด๋นํธ๋์ญ์ ์ ์ํํ๋ ๋์ ์ง๋ ฌํ๊ฐ ์ง์ผ์ก๋์ง ํ์ธํ๋ค.
- ์ฐ๊ธฐ ๋จ๊ณ: ๋ฐ๋์ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉํ๋ค.
์ง๋ ฌ์ฑ: ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋๋๋ผ๋ ๊ฐ ํธ๋์ญ์ ์ด ํ๋์ฉ ์ฐจ๋ก๋๋ก ์ํ๋๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ์ํํน์ฑ
์ฐธ๊ณ ์๋ฃ