Transaction(ํธ๋์ญ์ )
Concurrency Control(๋์์ฑ ์ ์ด)
Dead Lock(๊ต์ฐฉ ์ํ)
ํธ๋์ญ์ ์ ์์ ์ ์์ ์ฑ์ ๋ณด์ฅํด์ฃผ๋ ๊ฒ์ด๋ค. ์ฌ๋ฌ ๊ฐ์ ์์ ์ ํ๋์ ๋ ผ๋ฆฌ์ ๋จ์๋ก ๋ฌถ์ด ๋ฐ์๊ณผ ์์๋ณต๊ท๋ฅผ ์กฐ์ ํ ์ ์๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
๋ ผ๋ฆฌ์ ์ธ ์์ ์ ์ ๋ชจ๋ ์๋ฒฝํ๊ฒ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋๋ ์ฒ๋ฆฌํ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ ์ ์ํ๋ก ๋ณต๊ตฌํ์ฌ ์์ ์ ์ผ๋ถ๋ง ์ ์ฉ๋๋ ํ์์ด ๋ฐ์ํ์ง ์๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
์ฌ์ฉ์์ ์ ์ฅ์์๋ ์์ ์ ๋ ผ๋ฆฌ์ ๋จ์๋ก ์ดํดํ ์ ์๊ณ , ์์คํ ์ ์ ์ฅ์์๋ ๋ฐ์ดํฐ๋ค์ ์ ๊ทผ ๋๋ ๋ณ๊ฒฝํ๋ ํ๋ก๊ทธ๋จ์ ๋จ์๊ฐ ๋๋ค.
ํ๋(Active)ย :ย ํธ๋์ญ์ ์ด ์คํ ์ค์ธ ์ํ
์คํจ(Failed)ย : ํธ๋์ญ์ ์คํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์ค๋จ๋ ์ํ
์ฒ ํ(Aborted)ย :ย ํธ๋์ญ์ ์ด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด Rollback ์ฐ์ฐ์ ์ํํ ์ํ
๋ถ๋ถ ์๋ฃ(Partially Committed)ย : ํธ๋์ญ์ ์ ๋ง์ง๋ง ์ฐ์ฐ๊น์ง ์คํํ์ง๋ง, Commit ์ฐ์ฐ์ด ์คํ๋๊ธฐ ์ง์ ์ ์ํ
์๋ฃ(Committed)ย : ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ข ๋ฃ๋์ด Commit ์ฐ์ฐ์ ์คํํ ํ์ ์ํ
Commit
Commit ์ฐ์ฐ์ ํ ๊ฐ์ ๋ ผ๋ฆฌ์ ๋จ์(ํธ๋์ญ์ )์ ๋ํ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ๋๋ฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ค์ ์ผ๊ด๋ ์ํ์ ์์ ๋, ์ด ํธ๋์ญ์ ์ด ํํ ๊ฐฑ์ ์ฐ์ฐ์ด ์๋ฃ๋ ๊ฒ์ ํธ๋์ญ์ ๊ด๋ฆฌ์์๊ฒ ์๋ ค์ฃผ๋ ์ฐ์ฐ์ด๋ค.
Rollback
ํ๋์ ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ์ ๊นจ๋จ๋ ธ์ ๋, ์ด ํธ๋์ญ์ ์ ์ผ๋ถ๊ฐ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋์๋๋ผ๋ ํธ๋์ญ์ ์ ์์์ฑ์ ๊ตฌํํ๊ธฐ ์ํด ์ด ํธ๋์ญ์ ์ด ํํ ๋ชจ๋ ์ฐ์ฐ์ ์ทจ์(Undo)ํ๋ ์ฐ์ฐ์ผ๋ก Rollback์์๋ ํด๋น ํธ๋์ญ์ ์ ์ฌ์์ํ๊ฑฐ๋ ํ๊ธฐํ๋ค.
๋์์ ์คํ๋๋ ์ฌ๋ฌ ๊ฐ์ ํธ๋์ญ์ ์ด ์์ ์ ์ฑ๊ณต์ ์ผ๋ก ๋ง์น ์ ์๋๋ก ํธ๋์ญ์ ์ ์คํ ์์๋ฅผ ์ ์ดํ๋ ๊ธฐ๋ฒ
-
๋ค์ค ์ฌ์ฉ์ ํ๊ฒฝ์ ์ง์ํ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์์คํ ์์ ์ฌ๋ฌ ํธ๋์ญ์ ๋ค์ด ์ฑ๊ณต์ ์ผ๋ก ๋์์ ์คํ๋ ์ ์๋๋ก ์ง์ํ๋ ๊ธฐ๋ฅ
-
๋ค์ค ์ฌ์ฉ์ ํ๊ฒฝ์ ์ง์ํ๋ DB system์ ๊ฒฝ์ฐ ํ์์ ์ผ๋ก ์ง์ํด์ผ ํ๋ ๊ธฐ๋ฅ์ผ๋ก ๋ณํ์ ์ด๋ผ๊ณ ๋ ํ๋ค.
-
ํธ๋์ญ์ ์ ์ง๋ ฌํ ์ํ ๋ณด์ฅ
-
ํธ๋์ญ์ ์ ์ง๋ ฌ์ฑ ๋ณด์ฅ
-
๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ ๋ฐ ์ผ๊ด์ฑ ๋ณด์ฅ
-
์ผ๊ด์ฑ์ ์ ์งํ๋ฉด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณต์ ์ต๋ํ, ์์คํ ํ์ฉ๋ ์ต๋ํ, ์ฌ์ฉ์ ์๋ต์๊ฐ ์ต์ํ
-
Locking
- ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ์ ์ ๊ธ(lock)์ ์ค์ ํ๋ฉด ๋ค๋ฅธ ํธ๋์ญ์ ์ ํด๋น ๋ฐ์ดํฐ์ ๋ํด ์ ๊ธ์ด ํด์ (unlock)๋ ๋๊น์ง ์ ๊ทผ/์์ /์ญ์ ๊ฐ ๋ถ๊ฐํ๋ค.
- ๋กํน ๋จ์๊ฐ ํฌ๋ฉด ๊ด๋ฆฌํ๊ธฐ ์ฉ์ด(๋กํน ์ค๋ฒํค๋ ๊ฐ์)ํ์ง๋ง ๋ณํ์ฑ ์์ค(๋์์ฑ ์์ค)์ด ๋ฎ์์ง๋ค.
- ํธ๋์ญ์ ์ด ์ฌ์ฉํ๋ ์์์ ๋ํ์ฌ ์ํธ ๋ฐฐ์ (Mutual Exclusive) ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ธฐ๋ฒ
- ์ํธ๋ฐฐ์ ๋ ํน์ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํ์ฌ ์ ๊ธ (Lock)์ ์ค์ ํ ํธ๋์ญ์ ์ด ํด์ (unlock) ํ ๋ ๊น์ง ๋ฐ์ดํฐ๋ฅผ ๋ ์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
- ๋กํน ๋จ์๊ฐ ์์ผ๋ฉด ๋ณํ์ฑ(๋์์ฑ ์์ค)์ด ๋์์ง์ง๋ง ๊ด๋ฆฌ๊ฐ ๊น๋ค๋กญ๋ค.(๋กํน ์ค๋ฒํค๋ ์ฆ๊ฐ)
- ๋ฐ๋ผ์ ์ ๊ธ ๋จ์๋ฅผ ์ฌ๋ฌ ๋จ๊ณ๋ก ์ ํด ๋๊ณ ํ์์ ๋ฐ๋ผ ํผ์ฉํ๋ ๋ฐฉ์์ด ๋ง์ด ์ฌ์ฉ๋๋ค.
์ ๊ธ ์ฐ์ฐ์ ๋ฐ์ดํฐ์ ๋ํ ์ฐ์ฐ์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ์ ๊ณต์ ์ ๊ธ(Shared lock: S-lock)๊ณผ ๋ฐฐํ์ ๊ธ(Exclusive lock: X-lock)์ผ๋ก ๋๋ ์ ์๋ค.
-
S-lock(๊ณต์ ์ ๊ธ)
- ๊ณต์ ์ ๊ธ์ ์ค์ ํ ํธ๋์ญ์ ์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด ์ฝ๊ธฐ ์ฐ์ฐ(read)๋ง ๊ฐ๋ฅํ๋ค.
- ํ๋์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ๊ณต์ ์ ๊ธ์ด ๊ฐ๋ฅํ๋ค.
- ๋ค๋ฅธ ํธ๋์ญ์ ๋ ์ฝ๊ธฐ ์ฐ์ฐ๋ง์ ์คํํ ์ ์๋ค.
-
X-lock(๋ฐฐํ์ ๊ธ)
- ๋ฐฐํ์ ๊ธ์ ์ค์ ํ ํธ๋์ญ์ ์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด์ ์ฝ๊ธฐ ์ฐ์ฐ(read)๊ณผ ์ฐ๊ธฐ ์ฐ์ฐ(write) ๋ชจ๋ ๊ฐ๋ฅํ๋ค.
- ํ๋์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด์๋ ํ๋์ ๋ฐฐํ์ ๊ธ(X-lock)๋ง ๊ฐ๋ฅํ๋ค.
- ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ฝ๊ธฐ ์ฐ์ฐ๊ณผ ์ฐ๊ธฐ ์ฐ์ฐ ๋ชจ๋ ๋ถ๊ฐ๋ฅํ๋ค.
-
Two-Phase Locking Protocol(2๋จ๊ฒ ๋กํน ๊ท์ฝ)
- Lock๊ณผ Unlock์ด ๋์์ ์ด๋ฃจ์ด์ง๋ฉด ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋์ง ์์ผ๋ฏ๋ก Lock๋ง ๊ฐ๋ฅํ ๋จ๊ณ์ Unlock๋ง ๊ฐ๋ฅํ ๋จ๊ณ๋ฅผ ๊ตฌ๋ถํ๋ค.
- ํ์ฅ๋จ๊ณ: ์๋ก์ด Lock์ ๊ฐ๋ฅํ๊ณ Unlock์ ๋ถ๊ฐ๋ฅํ๋ค.
- ์ถ์๋จ๊ณ: Unlock์ ๊ฐ๋ฅํ๊ณ ์๋ก์ด Lock์ ๋ถ๊ฐ๋ฅํ๋ค.
- ์ง๋ ฌ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฅํ์ง๋ง ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
-
Timestamp(ํ์์คํฌํ)
- ์์คํ ์์ ์์ฑํ๋ ๊ณ ์ ๋ฒํธ์ธ ํ์์คํฌํ๋ฅผ ํธ๋์ญ์ ์ ๋ถ์ฌํจ์ผ๋ก์จ ํธ๋์ญ์ ๊ฐ์ ์ ๊ทผ ์์๋ฅผ ๋ฏธ๋ฆฌ ์ ํ๋ค.
-
Validation(์ ํฉ์ฑ ๊ฒ์ฆ)
-
๋จผ์ ํธ๋์ญ์ ์ ์ํํ๊ณ ํธ๋์ญ์ ์ ์ข ๋ฃํ ๋ ์ ํฉ์ฑ์ ๊ฒ์ฆํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ต์ข ๋ฐ์ํ๋ค.
-
ํธ๋์ญ์ ์ํ์์ ๋ฉ๋ชจ๋ฆฌ์์ ๋ณต์ฌ๋ณธ์์ ์ฐ์ฐ์ ์ํํ๊ณ ๊ฒ์ฆ ์๋ฃ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์
- ์ด ๊ณผ์ ์ 3๋จ๊ณ๋ก ์ด๋ค์ง๋ค.
- ์ฝ๊ธฐ ๋จ๊ณ: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฐ์ดํฐ๋ค์ ์ฝ๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง ์์ ์ด๋ ์ฐ๊ธฐ๋ ๋ณต์ฌ๋ณธ์๋ค๊ฐ ์ํํ๋ค.
- ๊ฒ์ฆ ๋จ๊ณ: ํด๋นํธ๋์ญ์ ์ ์ํํ๋ ๋์ ์ง๋ ฌํ๊ฐ ์ง์ผ์ก๋์ง ํ์ธํ๋ค.
- ์ฐ๊ธฐ ๋จ๊ณ: ๋ฐ๋์ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉํ๋ค.
-
-
Lost Update(๊ฐฑ์ ์์ค)
- ํ๋์ ํธ๋์ญ์ ์ด ๊ฐฑ์ ํ ๋ด์ฉ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ฎ์ด์์ผ๋ก์จ ๊ฐฑ์ ์ด ๋ฌดํจํ๊ฐ ๋๋ ๊ฒ์ ์๋ฏธ
- ๋ ๊ฐ์ด์ ํธ๋์ญ์ ์ด ํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋์์ ๊ฐฑ์ (Update)ํ ๋ ๋ฐ์
-
Dirty Read(ํํฉํ์ ์ค๋ฅ)
- ์ฝ๊ธฐ ์์ ์ ํ๋ ํธ๋์ญ์ 1์ด ์ฐ๊ธฐ ์์ ์ ํ๋ ํธ๋์ญ์ 2๊ฐ ์์ ํ ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋ฌธ์
- ์์ ์ค์ธ ํธ๋์ญ์ 2๊ฐ ์์ ์ Rollbackํ ๊ฒฝ์ฐ ํธ๋์ญ์ 1์ ๋ฌดํจ๊ฐ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋๊ณ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ค.
-
Inconsistency(๋ชจ์์ฑ)
- ๋ค๋ฅธ ํธ๋์ญ์ ๋ค์ด ํด๋น ํญ๋ชฉ ๊ฐ์ ๊ฐฑ์ ํ๋ ๋์ ํ ํธ๋์ญ์ ์ด ๋ ๊ฐ์ ํญ๋ชฉ ๊ฐ ์ค ์ด๋ค ๊ฒ์ ๊ฐฑ์ ๋๊ธฐ ์ ์ ๊ฐ์ ์ฝ๊ณ ๋ค๋ฅธ ๊ฒ์ ๊ฐฑ์ ๋ ํ์ ๊ฐ์ ์ฝ๊ฒ ๋์ด ๋ฐ์ดํฐ์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ ์ํฉ
-
Cascading Rollback(์ฐ์๋ณต๊ท)
- ๋ ํธ๋์ญ์ ์ด ๋์ผํ ๋ฐ์ดํฐ ๋ด์ฉ์ ์ ๊ทผํ ๋ ๋ฐ์
- ํ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ ๋ค์ ์คํจํ์ฌ Rollback ์ฐ์ฐ์ ์ํํ๋ ๊ณผ์ ์์ ๊ฐฑ์ ๊ณผ Rollback ์ฐ์ฐ์ ์คํํ๊ณ ์๋ ์ฌ์ด์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ์ฌ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ต์ฐฉ ์ํ(Dead Lock)๋ ์ฌ๋ฌ ๊ฐ์ ํธ๋์ญ์ ๋ค์ด ์คํ์ ํ์ง ๋ชปํ๊ณ ์๋ก ๋ฌดํ์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค.
์๋ฅผ ๋ค์ด TRANSACTION A๋ ์ฌ์ ํ ์ด๋ธ์ 1๋ฒ ์ฌ์์ ๋ํ UPDATE๋ฅผ ํ๊ณ , TRANSACTION B๋ 2๋ฒ ์ฌ์์ ๋ํ UPDATE ์์ ์ ํ๊ณ ์๋ค๊ณ ๊ฐ์ ํ์. 1๋ฒ ์ฌ์์ row๋ TRANSACTION A๊ฐ, 2๋ฒ ์ฌ์์ row๋ TRANSACTION B๊ฐ LOCK์ ํ๊ณ ์๋ ์ํ์ด๋ค. ๋ ํธ๋์ญ์ ๋ชจ๋ ๋๋์ง ์์ ์ํ์์ TRANSACTION A๊ฐ 2๋ฒ ์ฌ์์ UPDATE ์๋ํ๊ณ TRANSACTION B๊ฐ 1๋ฒ ์ฌ์์ UPDATEํ๋ ค๊ณ ํ๋ฉด ๋๊ฐ์ TRANSACTION ๋ชจ๋ WAITING์ ๋ค์ด๊ฐ๊ณ Dead Lock (๊ต์ฐฉ์ํ) ์ ๋น ์ง๊ฒ ๋๋ค.
-
์๋ฐฉ ๊ธฐ๋ฒ
- ๊ฐ ํธ๋์ญ์ ์ด ์คํ๋๊ธฐ ์ ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ locking ํด์ฃผ๋ ๊ฒ
- ๋ค๋ง ์๋ฐฉ ๊ธฐ๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๋ง์ด ํ์ํ๋ฉด ์ฌ์ค์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ locking ํด์ฃผ์ด์ผ ํ๋ฏ๋ก ํธ๋์ญ์ ์ ๋ณํ์ฑ์ ๋ณด์ฅํ์ง ๋ชปํ ๋ฟ ์๋๋ผ ๋ช๋ช ํธ๋์ญ์ ์ ๊ณ์ํด์ ์ฒ๋ฆฌ๋ฅผ ๋ชปํ๊ฒ ๋๋ค.
-
ํํผ ๊ธฐ๋ฒ
- ์์์ ํ ๋นํ ๋ timestamp๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฐฉ์ํ๊ฐ ์ผ์ด๋์ง ์๋๋ก ํํผํ๋ ๋ฐฉ๋ฒ
- Wait-Die ๋ฐฉ์๊ณผ Wound-Wait ๋ฐฉ์์ด ์๋ค.
- Wait-Die: ํธ๋์ญ์ Ti๊ฐ Tj์ ์ํด locking๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋ Ti๊ฐ ๋จผ์ ๋ค์ด์จ ํธ๋์ญ์ ์ด๋ผ๋ฉด ๊ธฐ๋ค๋ฆฐ๋ค. ๋ฐ๋ฉด Ti๊ฐ ๋์ค์ ๋ค์ด์จ ํธ๋์ญ์ ์ด๋ผ๋ฉด ํฌ๊ธฐ(Die)ํ๊ณ ๋์ค์ ๋ค์ ์์ฒญํ๋ค. ์ฆ, ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ๊ณ ์์ ๋ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋(Wait) ํฌ๊ธฐ(Die)ํ๋ ๋ฐฉ์์ด๋ค.
- Wound-Wait: ํธ๋์ญ์ Ti๊ฐ Tj์ ์ํด locking๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋ Ti๊ฐ ๋จผ์ ๋ค์ด์จ ํธ๋์ญ์ ์ด๋ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ์ (Wound)ํ๋ค. ๋ฐ๋ฉด์ Ti๊ฐ ๋์ค์ ๋ค์ด์จ ํธ๋์ญ์ ์ด๋ผ๋ฉด ๊ธฐ๋ค๋ฆฐ๋ค(Wait). ์ฆ, ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ๊ณ ์์ ๋ ๋นผ์๊ฑฐ๋(Wound) ๊ธฐ๋ค๋ฆฌ๋(Wait) ๋ฐฉ์์ด๋ค.
- ์ ๊ธ๊ธฐ๋ฒ(Locking)์ ๋ํด ์ค๋ช ํ์์ค. -> ์ ๊ธ ๊ธฐ๋ฒ์ ๋ฌธ์ ์ ์ด ๋ญ๊ฐ์?
- ๊ต์ฐฉ์ํ(DeadLock)๋ ๋ฌด์์ธ๊ฐ์? -> ๊ต์ฐฉ์ํ์ ๋น๋๋ฅผ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ์๋ ๋ฌด์์ด ์๋์?


