Transaction(ํธ๋์ญ์ )์ด๋?
transaction์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์์ ์ํ๋๋ ์์ (์ฝ์ , ๊ฐฑ์ , ์ญ์ )์ ์ต์ ๋จ์์ ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ฉฐ DB์ ์ํ๋ฅผ ๋ณํ์ํค๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
transaction์ ํ๋ ์ด์์ query๋ฅผ ํฌํจํด์ผ ํ๊ณ , ACID๋ผ๊ณ ์นญํด์ง๋ ์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ์ 4๊ฐ์ง ๊ท์น์ ๋ง์กฑํด์ผํฉ๋๋ค.
Transaction(ํธ๋์ญ์ ) ๊ตฌ์กฐ
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ผ์ด๋๋ ์์ ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ฌถ์ด์ ๊ด๋ฆฌํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ COMMIT๊ณผ ROLLBACK ๋ช ๋ น์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ์์ ํ๊ณ ์ ๋ขฐ์ฑ ์๋ ์์ ์ ์ํํ๊ธฐ ์ํ ์ค์ํ ๊ฐ๋ ์ ๋๋ค.
๋ณต์กํ ๋ค์ค ์ฌ์ฉ์ ํ๊ฒฝ์์์ ๋ฐ์ดํฐ ์กฐ์์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค.
์์(Begin)
ํธ๋์ญ์ ์ ์์์ ๋ํ๋ด๋ ๋ถ๋ถ์ ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (DBMS)์ ์ด ์ง์ ์์ ํธ๋์ญ์ ๊ธฐ๋ก์ ์์ํฉ๋๋ค.
์คํ(Execute)
์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํ๋๋ ์์ ๋ค์ด ์ด ๋ถ๋ถ์์ ์คํ๋ฉ๋๋ค.
SQL๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์์ ์ํํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๋ ๋ฑ์ ์์ ์ ์ํํฉ๋๋ค.
์ปค๋ฐ(Commit)
ํธ๋์ญ์ ์ ์ฑ๊ณต์ ์ธ ์๋ฃ๋ฅผ ๋ํ๋ด๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ ์ฌํญ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๋ ๋ถ๋ถ์ ๋๋ค.
ํธ๋์ญ์ ์ด ์ปค๋ฐ๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํด๋น ํธ๋์ญ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ ํ๊ณ ๋ค๋ฅธ ํธ๋์ญ์ ๋ค๋ ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ ๋ณผ ์ ์๊ฒ ๋ฉ๋๋ค.
๋กค๋ฐฑ(Rollback)
ํธ๋์ญ์ ์ด ์คํจํ๊ฑฐ๋ ์ทจ์๋์ด์ผ ํ ๋, ํธ๋์ญ์ ์ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ทจ์ํ๊ณ ์ด์ ์ ์ํ๋ก ๋๋๋ฆฌ๋ ๋ถ๋ถ์ ๋๋ค.
๋กค๋ฐฑ์ด ๋ฐ์ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํธ๋์ญ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฒ๋ฆฌ๊ณ ํธ๋์ญ์ ์ ์์ ์ ์ํ๋ก ๋ณต์๋ฉ๋๋ค.
ACID ๋?
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ ์ํด Atomicity(์์์ฑ), Consistency(์ผ๊ด์ฑ), Isolation(๊ณ ๋ฆฝ์ฑ), Durability (์ง์์ฑ)์ ์ฑ์ง์ ๊ฐ์ต๋๋ค.
Atomicity (์์์ฑ) |
transaction์ ํฌํจ๋ ์์
์ ์ ๋ถ ์ํ๋๊ฑฐ๋ ์์๋ฉด ์ ๋ถ ์ํ๋์ง ๋ง์์ผํฉ๋๋ค.(all or nothing) ์ฆ, ํธ๋์ญ์ ์ด ์คํจํ๋ฉด ์ด๋ ํ ์์ ๋ ์๊ตฌ์ ์ผ๋ก ์ ์ฉ๋์ง ์์์ผ ํฉ๋๋ค. |
Consistency (์ผ๊ด์ฑ) |
transaction์ด ์คํ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๋ฉด ์ธ์ ๋ ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ก ์ ์งํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ก๊ธ ์ ํ ๋ชจ๋ ์์ก์ data type์ integer์ด์ฌ์ผ ํ๋ค๋ ๊ฒ์ด ์ผ๊ด์ฑ์ ํ ์๊ฐ ๋ ์ ์์ต๋๋ค. ํธ๋์ญ์ ์ด ์ผ๊ด์ฑ์ ์ ์งํ์ง ๋ชปํ๋ฉด ํธ๋์ญ์ ์ด ๋กค๋ฐฑ(์ ์ฒด ์ทจ์)๋์ด์ผ ํฉ๋๋ค. |
Isolation (๊ฒฉ๋ฆฝ์ฑ) |
์ฌ๋ฌ transaction์ ๋์์ ์ํ๋ ๋, ๊ฐ transaction์ ๋ค๋ฅธ transaction์ ์ฐ์ฐ ์์ ์ ๋ผ์ด๋ค์ง ๋ชปํ๋๋ก ๋ณด์ฅํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ์ ์ํํฉ๋๋ค. ์ด๋ ๋์์ฑ ์ ์ด(concurrency control) ๋ฅผ ํตํด ๋ณด์ฅ๋๋ค. |
Durability (์ง์์ฑ) |
์ฑ๊ณต์ ์ผ๋ก ์ํ๋ transaction์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ํ ๋ฐ์๋์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. transaction์ด ์๋ฃ๋์ด ์ ์ฅ์ด ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ์ฅ ํ์ ์๊ธฐ๋ ์ ์ , ์ฅ์ , ์ค๋ฅ ๋ฑ์ ์ํฅ์ ๋ฐ์ง ์์์ผ ํฉ๋๋ค. |
๋์์ฑ ์ ์ด(concurrency control)
๋์์ฑ ์ ์ด(Concurrency Control)๋ ๋ค์ค ์ฌ์ฉ์๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ณ ์กฐ์ํ ๋ ๋ฐ์ํ ์ ์๋ ๊ฐ์ข ๋ฌธ์ ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ์ดํ๋ ๊ธฐ์ ๋ฐ ๊ธฐ๋ฒ์ ๋๋ค.
๋์์ฑ ์ ์ด ๋ฐฉ๋ฒ
๋์์ฑ ์ ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ๋์์ ์ ์งํ๊ธฐ ์ํด ์ค์ํ๋ฉฐ, ํจ๊ณผ์ ์ธ ๊ด๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
๋ฝ(Lock) ๊ธฐ๋ฐ ์ ์ด
ํธ๋์ญ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๊ธฐ ์ ์ ํด๋น ๋ฐ์ดํฐ์ ๋ฝ์ ์ค์ ํ๊ณ , ํธ๋์ญ์ ์ด ์๋ฃ๋๋ฉด ๋ฝ์ ํด์ ํฉ๋๋ค.
๋ค๋ฅธ ํธ๋์ญ์ ์ ๋ฝ์ด ํด์ ๋ ๋๊น์ง ๋๊ธฐํ๊ฒ ๋ฉ๋๋ค.
ํธ๋์ญ์ ์ผ์ (Schedule) ์กฐ์
ํธ๋์ญ์ ๋ค์ ์คํ ์์๋ฅผ ์กฐ์ ํ์ฌ ์ถฉ๋์ ํผํ๋๋ก ์ผ์ ์ ์กฐ์ ํฉ๋๋ค.
์ด๋ฅผ ํตํด ๊ฒฉ๋ฆฌ์ฑ์ ์ ์งํ๋ฉด์๋ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๊ฒฉ๋ฆฌ ์์ค(Isolation Level) ์ค์
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ํธ๋์ญ์ ๊ฐ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ค์ ํ์ฌ ์ผ๋ง๋ ๋ง์ ํธ๋์ญ์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
๊ฒฉ๋ฆฌ ์์ค์ 'Read Uncommitted', 'Read Committed', 'Repeatable Read', 'Serializable' ๋ฑ์ผ๋ก ๋๋ฉ๋๋ค.
๋ฒ์ ๊ด๋ฆฌ(Versioning)
ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋๋ง๋ค ๋ฐ์ดํฐ์ ๋ฒ์ ์ ๊ธฐ๋กํ๊ณ , ํธ๋์ญ์ ์ด ์ปค๋ฐ๋ ๋ ํด๋น ๋ฒ์ ์ ํ์ธํ์ฌ ์ถฉ๋์ ๋ฐฉ์งํ๋ ๋ฐฉ์์ ๋๋ค.
๋์์ฑ ์ ์ด ์๊ณ ๋ฆฌ์ฆ
๋ค์ํ ๋์์ฑ ์ ์ด ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํ๋ฉฐ, ์ด ์ค์๋ ํน์ ์ํฉ์์ ํจ๊ณผ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ์ฌ ์ฌ์ฉํฉ๋๋ค.
๋ํ์ ์ธ ์๋ก๋ ํธ๋์ญ์ ์ ์ค์ผ์ฅด๋ง์ ์กฐ์ ํ๋ Two-Phase Locking(2PL) ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค.
Transaction(ํธ๋์ญ์ ) ์์
์ํ ์์คํ ์์ A๊ฐ 100๋ง์์ ์ถ๊ธํด์ B์๊ฒ ์ ๊ธํ๋ ์ํฉ์ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
A์ ์๊ณ ์์ 100๋ง์์ ์ถ๊ธํ์๋๋ฐ, ์ด ๋ ์ ์ฐ์ค๋ฅ๊ฐ ์๊ฒจ์ B์ ๊ณ์ข์๋ 100๋ง์์ด ์ ๊ธ ๋์ง ์์์ต๋๋ค.
์ด๋ฐ ์ํฉ์ ์ ์ฐ์์คํ ์ ์น๋ช ์ ์ธ ์ค๋ฅ์ ๋๋ค.
์ด๋ ๊ฒ ์์์น ๋ชปํ๊ฒ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ์ ๋ถ์ ํฉ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ, ๋ค์ ์์๋ณต๊ท ํด์ผํฉ๋๋ค.
๋ฐ๋ผ์ ๋ชจ๋ ์ ์ถ๊ธ์ ํ๋์ ๋ฌถ์ ํํ๋ก ์๋ํด์ผ ํฉ๋๋ค.
์ถ๊ธ์ ํ์ผ๋ฉด ์ ๊ธ์ ๋ง์น๋์ง ์๋๋ฉด ์์ ์๋ ์ผ์ด ๋์ด์ผ ํฉ๋๋ค.
์ด๋ฐ ์์ผ๋ก ๋ ํ์๋ ๋ถ๋ฆฌ ๋ ์ ์๋ ํ๋์ ๊ฑฐ๋๋ก ์ฒ๋ฆฌ๋ผ์ผ ํ๋ ๋จ์ผ ์ ๋ฌด์ ๋๋ค.
์ด๋ฌํ ์ ๋ฌด ์ฒ๋ฆฌ์ ์ต์ ๋จ์๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ transaction์ด๋ผ๊ณ ํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ Transaction์ด ํ์ํ ์ด์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฅ์ ๊ฐ ์ผ์ด๋๋ ๊ฒฝ์ฐ Transaction์ ์ฅ์ ๋ฐ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ์์ ์ ๋จ์๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ๋ฌ ์์ ์ด ๋์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋๊ฐ ์์ต๋๋ค.
transaction์ ํตํด ์ด ์์ ์ ์๋ก ๋ถ๋ฆฌํ๊ณ , ์ด๋ฅผ ํตํด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ฒ ํฉ๋๋ค.
DBMS๋ transaction์ด ์ด๋ฌํ ๊ท์น์ ์ ์งํ๋๋ก ์ง์ํฉ๋๋ค.
START TRANSACTION
// (1) A ๊ณ์ข ์์ก ๊ฐ์ ธ์ด A = 1000
// (2) B ๊ณ์ข ์์ก ๊ฐ์ ธ์ด B = 1000
// (3) A ์ถ๊ธ A = A - 100
// (4) B ์
๊ธ B = B + 100
UPDATE Customer SET balance = balance - 100 WHERE name='A';
UPDATE Customer SET balance = balance + 100 WHERE name='B';
//COMMIT
// (5) A ๊ณ์ข ์์ก ์ ์ฅ A = 900
// (6) B ๊ณ์ข ์์ก ์ ์ฅ B = 1100
COMMIT
์ฐธ๊ณ