[๋ฐ์ดํฐ๋ฒ ์ด์ค] ํธ๋์ญ์ (Transaction)
ํธ๋์ญ์ (Transaction)
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ฌ๋์ด ์ฌ์ฉํ์ง ์์ต๋๋ค. ์๋ง์ ์ฟผ๋ฆฌ๋ค์ด ๋์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฌ๋ฉ๋๋ค. ์ด๋ ๋ชจ๋ ์ฟผ๋ฆฌ๋ค์ ๋ณํ์ฒ๋ฆฌํ๊ฒ ๋๋ค๋ฉด, ํจ์จ์ฑ์ ์ข์ ์ ์์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ฌ์ง๊ฐ ์์ต๋๋ค. ๋ง์ฝ ์ด๋ค ์ฟผ๋ฆฌ๊ฐ ํ ์ด๋ธ์ ์ ๋ฐ์ดํธํ๊ฒ ๋๋ค๋ฉด, ์ฒ์ ์๋ํ๋ ๊ฒ๊ณผ๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์๊ฐ ๋ฐ๊ฒ ๋ ์๋ ์์ต๋๋ค. ํน์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ค๋ฉด ์ญ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๋ ค๊ณ ํ ์๋ ์์ฃ .
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์์ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ฐ์ฐ๋ค์ ๋ฌถ์ด์ ํ๋์ ๋จ์๋ก ๋ํ๋ ๋๋ค. ์ด ๋จ์๋ฅผ ํธ๋์ญ์ ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ํธ๋์ญ์ ์ ํฌํจ๋ ์ฐ์ฐ์ ๋ชจ๋ ํ๋ฒ์ ์๋ฃ๋์ด์ผ ํฉ๋๋ค. MySQL์์๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ ์ฟผ๋ฆฌ์ ๋ช ์์ ์ผ๋ก ํธ๋์ญ์ ์ด ๊ธฐ์ฌ๋์ด ์์ง ์๋ค๋ฉด ์ ์ฒด ์ฟผ๋ฆฌ๊ฐ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
ํธ๋์ญ์ ์ ํตํด ๋ฐ์ดํฐ์ ๋์์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ๋ ์ํฉ์ ๋ํด์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์๊ฒ ๋ฉ๋๋ค.
ํธ๋์ญ์ ์ ์ฑ์ง(ACID)
ํธ๋์ญ์ ์ ACID๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋ค ๊ฐ์ง ์ฑ์ง์ ๊ฐ์ ธ์ผํฉ๋๋ค.
- Atomicity(์์์ฑ) : ํธ๋์ญ์ ์ ๊ด๋ จ๋ ์์ ์ ๋ชจ๋ ์คํ๋๊ฑฐ๋ ํน์ ์คํ๋์ง ์๋๋ก ๋ณด์ฅ๋์ด์ผํฉ๋๋ค.
- Consistency(์ผ๊ด์ฑ) : ํธ๋์ญ์ ์ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์๋ค๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๊ด์ฑ์ ์ ์งํด์ผํฉ๋๋ค.
- Isolation(๋ ๋ฆฝ์ฑ) : ํ๋์ ํธ๋์ญ์ ์ด ์ํ๋๊ณ ์์ ๋๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ ๊ทผํ ์ ์์ต๋๋ค.
- Durability(์ง์์ฑ) : ํธ๋์ญ์ ์ด ์์๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ตฌ์ ์ผ๋ก ๋ฐ์๋์ด์ผ ํฉ๋๋ค.
Commit and Rollback
Commit : ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅ
Commit์ ํธ๋์ญ์ ์ ์์ ์ด ์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ค์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
START TRANSACTION;
SELECT * FROM student WHERE age=21;
COMMIT;
์์ฒ๋ผ ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์์ฑํ๋ ์ฟผ๋ฆฌ๋ ํธ๋์ญ์ ๊ณผ ์ปค๋ฐ์ผ๋ก ์์ฌ์ ธ์๋ ๊ฒ์ด ๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
Rollback : ํธ๋์ญ์ ์ทจ์
Rollback ์ ์งํ์ค์ด๋ ํธ๋์ญ์ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ์ง ์๊ณ ํธ๋์ญ์ ์ด ์์๋๊ธฐ ์ ์ผ๋ก ์์ ์ ์ทจ์ํ๋ ๊ฒ์ ๋งํ๋ค.
SELECT * FROM history;
START TRANSACTION;
DELETE * FROM history;
SELECT * FROM history;
ROLLBACK;
SELECT * FROM history;
์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ฉด ํธ๋์ญ์ ์ด ๋ช ์์ ์ผ๋ก ์์๋ ์ดํ์ ์ฐ์ฐ๋๋ DELETE์ SELECT๊ฐ ROLLBACK์ผ๋ก ์ธํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์๋์ง ์์ต๋๋ค. ์ผ๋ฐ ์ฟผ๋ฆฌ๋ฌธ์ ์งํฉ์ด์๋ค๋ฉด DELETE๊ฐ ๋์๊ธฐ ๋๋ฌธ์ ์ดํ ์ฐ์ฐ์ ์งํํ ์ ์์๊ฒ ์ง๋ง, ๋กค๋ฐฑ์ผ๋ก ์ธํด ์๋ ํ ์ด๋ธ๋ก ๋์๊ฐ๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง ์ฟผ๋ฆฌ๋ฅผ ์ ์ฉํ ์๊ฐ ์๊ฒ๋ฉ๋๋ค.
Read-Only Transactions
์ด๋ค ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ ์์ ์ ํ์ฉํ์ง ์๊ณ ์ฝ๊ธฐ ์์ ๋ง ํ์ฉํ๋ ๊ฒ์ Read-Only Transaction์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค. ์ฝ๊ธฐ๋ง ํ๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ ์ํ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ Read & Write ํธ๋์ญ์ ๋ณด๋ค ๋ณ๋ ฌ์ฑ์ ๋๋ฆฌ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
SET TRANSACTION READ ONLY;
START TRANSACTION;
...
COMMIT; or ROLLBACK;
Isolation Level
๋ฐ์ดํฐ๋ฒ ์ด์ค์๊ฒ ๋ง์ ํธ๋์ญ์ ์ด ๋ค์ด์์ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ์ด ์์ ๋ค์ ๊ด๋ฆฌํด์ฃผ์ด์ผ ํ ๊น? ๋ง์ฝ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์๋ค๋ฐ์ ์ผ๋ก ์ํ๋๋ค๋ฉด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ด ๊นจ์ง ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ํธ๋์ญ์ ์ ํ ๋ฒ์ ํ๋์ฉ๋ง ๋์๊ฐ๋ฉด์ ์ํํ๋ค๋ฉด ์์ฌ์๋ ํธ๋์ญ์ ์ ๋ชจ๋ ์ฒ๋ฆฌํ๊ธฐ์๋ ์๋ต์๋๊ฐ ํฌ๊ฒ ๋จ์ด์ง ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ํธ๋์ญ์ ๋ค ์ฌ์ด์ ๋ฐ์ํ๋ ์ฐ์ฐ์ ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด์ ํธ๋์ญ์ ๋ค์ ๊ฒฉ๋ฆฌํ๋ ์ ๋ต์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํธ๋์ญ์ ๋ค์ ๊ฒฉ๋ฆฌํ๊ธฐ ์ํ ๊ฒฉ๋ฆฌ ๋จ๊ณ ์์ค์ ์ค์ ํ ์ ์์ต๋๋ค.
SET TRANSACTION ISOLATION LEVEL <LEVEL>;
START TRANSACTION;
...
COMMIT; or ROLLBACK;
Issues in Isolation Level
ํธ๋์ญ์ ์ Isolation level ์ ๋ฐ๋ผ ๋ช๊ฐ์ง ์ด์๋ค์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- Phantom Read : ์ด๋ค ํธ๋์ญ์ T1์ด SELECT๋ฅผ ํตํด ๊ฒฐ๊ณผ๋ฅผ ์ป๊ณ ๋ฐ๋ก ์ดํ์ T2 ํธ๋์ญ์ ์ด INSERT ์ฟผ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ปค๋ฐํ๋ค๋ฉด, T1์ด ๋ค์ํ๋ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฒ์ํ์ ๋ T2์ ์ํด์ ์ฒซ ์กฐํ์๋ ์์๋ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ์ฑ๋ก ์กฐํ๋ฉ๋๋ค.
- Nonrepeatable Read : ์ด๋ค ํธ๋์ญ์ T1์ด SELECT๋ฅผ ํตํด ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ ์์ ๋, ์๋ก์ด ํธ๋์ญ์ T2๊ฐ ๋ฐ์ดํฐ๋ฅผ UPDATEํ๊ณ ์ปค๋ฐ์ ํ๋ค๋ฉด, T1์ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๊ฐ๊ณผ ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
- Dirty Read : ์ด๋ค ํธ๋์ญ์ T1์ด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์์ง ์ปค๋ฐํ์ง ์์์ ๋, ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฒ๋๋ฉด ์์ง ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ๊ฒ ๋๋๋ฐ, ์ด ๋ฐ์ดํฐ๋ ์ต์ข ์ ์ผ๋ก ์ปค๋ฐ๋๋ค๋ ๋ณด์ฅ์ด ์์ต๋๋ค.
Set Isolation Level
LEVEL 3 : SERIALIZABLE
Serializable ๋ ๋ฒจ์ ๊ฐ์ฅ ์๊ฒฉํ๊ฒ ํธ๋์ญ์ ๋ค์ ์๋ก ๊ฒฉ๋ฆฌ์ํค๋ ๋ฐฉ์นจ์ ๋๋ค. ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ํธ๋์ญ์ ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์๋ฒฝํ๊ฒ ๋ณด์ฅ๋ฉ๋๋ค. ํ์ง๋ง ํ ๋ฒ์ ํ๋์ ํธ๋์ญ์ ๋ง ์ฒ๋ฆฌํ๋ ๋ฐฉ์นจ์ด๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ์ข์ง ์๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ์ด ๋ฐฉ์นจ์์๋ Phantom Read, Nonrepeatable Read, Dirty Read ๊ฐ ๋ชจ๋ ๋ฐ์ํ์ง ์์ต๋๋ค.
LEVEL 2 : REPEATABLE READ
ํ ํธ๋์ญ์ ์์์ ํ๋ฒ ์กฐํํ ๋ด์ฉ์ ์ฌ๋ฌ๋ฒ ์กฐํํด๋ ๊ณ์ ๊ฐ์ ๊ฐ์์ ์งํ๋ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค. ์ด ๋ฐฉ์นจ์ ๋์ ํธ๋์ญ์ ์ด ์์๋๊ธฐ ์ ์ ์ด๋ฏธ ์ปค๋ฐ์ด ์๋ฃ๋ ๋ฐ์ดํฐ๋ง์ ์กฐํํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ UPDATE ์ฐ์ฐ์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ Dirty Read, Nonrepeatable Read ์ด์๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ํ์ง๋ง INSERT ์ฐ์ฐ์ ํตํด ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฒ๋๋ฉด ํ ์ด๋ธ์ ๊ตฌ์ฑํ๋ ๋ฐ์ดํฐ์ ์งํฉ์ด ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ Phantom Read ์ด์๋ ๋ฐ์ํ ์ ์์ต๋๋ค.
LEVEL 1 : READ COMMITTED
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค์ด ๊ฐ์ง๊ณ ์๋ ๋ฐฉ์นจ์ ๋๋ค. ์ด ๋ฐฉ์นจ์ ์ปค๋ฐ์ด ์๋ฃ๋ ๋ฐ์ดํฐ๋ง ์ฝ๋๋ก ํฉ๋๋ค. ๋ฐ๋ผ์ Dirty Read ๋ฌธ์ ๋ ๋ฐ์ํ์ง ์์ง๋ง Nonrepeatable Read ๋ Phantom Read๋ ๋ฐ์ํ ์ฌ์ง๊ฐ ์์ต๋๋ค.
LEVEL 0 : READ UNCOMMITED
๋ชจ๋ ํธ๋์ญ์ ์ด ์ ํ์์ด ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๋ ๋ฐฉ์นจ์ ๋๋ค. ์ปค๋ฐํ์ง ์์ ๋ฐ์ดํฐ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฝ์ ์ ์์ต๋๋ค. ๋ณ๋ ฌ์ ์ผ๋ก ํธ๋์ญ์ ์ด ์ํ๋๊ธฐ ๋๋ฏ์ ๊ฐ์ฅ ์ฑ๋ฅ์ด ์ข์ง๋ง ์์ ์ค๋ช ํ ์ธ ๋ฌธ์ ๋ค์ด ๋ชจ๋ ๋ฐ์ํ ์ฌ์ง๊ฐ ์์ต๋๋ค.
'๐ฎ ์จ-์์ค > ๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์กฐ์ธ์ฐ์ฐ(Join Operation) (0) | 2021.09.05 |
---|---|
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ํค(Keys) (0) | 2021.09.05 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์ ๊ทํ(Normalization) (0) | 2021.09.05 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์ด์ ํ์(Anomaly) (0) | 2021.09.05 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote