โ Transaction ?
์ํค๋ฐฑ๊ณผ์ ์ ์๋์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ (Database transaction)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ๋๋ ์ ์ฌํ ์์คํ (ํธ๋์ญ์ ์ด ์ฑ๊ณต๊ณผ ์คํจ๊ฐ ๋ถ๋ช ํ๊ณ ์ํธ ๋ ๋ฆฝ์ ์ด๋ฉฐ, ์ผ๊ด๋๊ณ ๋ฏฟ์ ์ ์๋ ์์คํ )์์ ์ํธ์์ฉ์ ๋จ์์ด๋ค.
์ฝ๊ฒ ๋งํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค๊ธฐ ์ํด ์ํํ๋ ์์ ๋จ์์ด๋ค.
๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณ๊ฒฝ ์ํจ๋ค๋ ๊ฒ์ ์ง์์ด(SQL : SELECT, INSERT, UPDATE, DELETE)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๊ฒ์ ๋งํ๋ค.
์) A์ ๊ณ์ข์์ B์ ๊ณ์ข๋ก 10๋ง์์ ์ด์ฒดํ๋ ์์ ์, A ๊ณ์ข 10๋ง์ ์ธ์ถ + B ๊ณ์ข 10๋ง์ ์ ๊ธ → 2๊ฐ์ง ์์ ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
๋ ์์ ์ค ํ๋์ ์์ ์ด๋ผ๋ ์คํจํ๋ ๊ฒฝ์ฐ, ์๋ฌด ๊ฒ๋ ์คํ๋์ง ์์ ์ฒ์ ์ํ๋ก ๋ณต๊ตฌ๋์ด์ผ ํ๋ค.
์ฌ๊ธฐ์ ์์์ผ ํ๋ ๊ฒ์ด Commit๊ณผ Rollback์ด๋ค.
โ Commit ?
ํ๋์ ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์ข ๋ฃ๋๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ผ๊ด์ฑ์๋ ์ํ์ ์์์ ๋งํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ํธ๋์ญ์ ์ข ๋ฃ์ ํด๋น ์ ๋ฐ์ดํธ๋ฅผ ํ์ ํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
โ Rollback ?
ํ๋์ ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์์ ๋, ์ด์ ์ํ๋ก ๋๋๋ฆฌ๋ ๊ฒ์ ๋งํ๋ค.
Transaction์ ์ํ

1๏ธโฃ Active
ํธ๋์ญ์ ์ ํ๋ ์ํ, ํธ๋์ญ์ ์ด ํ์ฌ ์คํ์ค์์ ์๋ฏธํ๋ค.
2๏ธโฃ Failed
ํธ๋์ญ์ ์คํจ ์ํ, ํธ๋์ญ์ ์ด ๋ ์ด์ ์ ์์ ์ผ๋ก ์งํํ ์ ์์์ ์๋ฏธํ๋ค.
3๏ธโฃ Partially Committed
ํธ๋์ญ์ ์ Commit ๋ช ๋ น์ด ๋์ฐฉํ ์ํ
ํธ๋์ญ์ ์ ์ฐ์ฐ์ด ๋ง์ง๋ง๊น์ง ์คํ๋๊ณ Commit๋ง ๋จ์ ์ํ๋ฅผ ์๋ฏธํ๋ค.
4๏ธโฃ Committed
ํธ๋์ญ์ ์๋ฃ ์ํ, ํธ๋์ญ์ ์ด ์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด Commit ์ฐ์ฐ์ด ์ํ๋์์์ ์๋ฏธํ๋ค.
5๏ธโฃ Aborted
ํธ๋์ญ์ ์ทจ์ ์ํ, ํธ๋์ญ์ ์ด ์ทจ์๋๊ณ Rollback์ด ์ํ๋ ์ํ๋ฅผ ์๋ฏธํ๋ค.
Transaction์ ํน์ง
1๏ธโฃ ์์์ฑ Atomicity
transaction์ DB ์ฐ์ฐ์ ์ ๋ถ๊ฐ ์คํ๋๊ฑฐ๋ ์คํ๋์ง ์์์ผ ํ๋ค. (All or Nothing)
์ฆ, ํธ๋์ญ์ ์ ์ฒ๋ฆฌ๊ฐ ์์ ํ ๋๋์ง ์์์ ๊ฒฝ์ฐ์๋ ์คํ๋์ง ์์ ์ํ์ ๋์ผํด์ผํ๋ค.
2๏ธโฃ ์ผ๊ด์ฑ Consistency
ํธ๋์ญ์ ์คํ ๊ฒฐ๊ณผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ชจ์ ์์ด ์ผ๊ด๋ ๋ฐ์ดํฐ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ค.
→ ์ฆ, ์ฑ๊ณต์ ์ผ๋ก ์ํ๋ ํธ๋์ญ์ ์ ์ ๋นํ ๋ฐ์ดํฐ๋ค๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํด์ผ ํ๋ค!!
3๏ธโฃ ๊ฒฉ๋ฆฌ์ฑ Isolation
์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์ํ๋๋๋ผ๋ ๊ฐ๊ฐ์ ํธ๋์ญ์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํ์ ์ํฅ์ ๋ฐ์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๋์ด์ผ ํ๋ค.
์ฆ, ๋ถ๋ถ์ ์ธ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ณผ ์ ์๋ค. (์ ๋ น ์ฝ๊ธฐ ํ์ ๋ฐฉ์ง)
4๏ธโฃ ์์์ฑ Durability
ํธ๋์ญ์ ์ด ์คํ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ ์๊ตฌ์ ์ผ๋ก ๋ณด์ฅ์ด ๋์ด์ผ ํ๋ค.
Transaction Isolation Level : ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
๋์์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ์ฒ๋ฆฌ๋ ๋, ํธ๋์ญ์ ์ด ์ผ๋ง๋ ๊ฒฉ๋ฆฌ, ๊ณ ๋ฆฝ๋์ด ์๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฒ์ด๋ค.
ํน์ ํธ๋์ญ์ ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์์ ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๋๋ก ํ์ฉํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
๐ Transaction-Level Read Consistency(ํธ๋์ญ์ ์์ค ์ฝ๊ธฐ ์ผ๊ด์ฑ)์ ์งํค๊ธฐ ์ํด์๋ผ๊ณ ๋งํ ์ ์๋ค!
๊ฒฉ๋ฆฌ ์์ค์ 4๊ฐ์ง๋ก ๊ตฌ๋ถ๋๋ค.
โ Read Uncommitted : ์ปค๋ฐ๋์ง ์์ ์ฝ๊ธฐ
โก Read Committed : ์ปค๋ฐ๋ ์ฝ๊ธฐ
โข Repeatable Read : ๋ฐ๋ณต ๊ฐ๋ฅํ ์ฝ๊ธฐ
โฃ Serializable : ์ง๋ ฌํ ๊ฐ๋ฅ
์์์ ์๋๋ก ๋ด๋ ค์ฌ์๋ก ํธ๋์ญ์ ๊ฐ ๊ณ ๋ฆฝ๋๊ฐ ๋์์ง๊ณ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
1๏ธโฃ READ UNCOMMITTED
๊ฐ ํธ๋์ญ์ ์์์ ๋ณ๊ฒฝ ๋ด์ฉ์ด COMMIT์ด๋ ROLLBACK ์ฌ๋ถ์ ์๊ด์์ด ๋ค๋ฅธ ํธ๋์ญ์ ์์ ๋ณด์ฌ์ง๋ค.
๐ Dirty Read (Uncommitted Dependency)
: ๋ณ๊ฒฝ ํ ์์ง commit ๋์ง ์์ ๊ฐ ์ฝ๊ณ , rollback ํ์ ๊ฐ์ ๋ค์ ์ฝ๋ ํ์
2๏ธโฃ READ COMMITTED
์ค๋ผํฐ DBMS์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ ์จ๋ผ์ธ ์๋น์ค์์ ๊ฐ์ฅ ๋ง์ด ์ ํ๋๋ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค.
์ด๋ ํ ํธ๋์ญ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋ commit์ด ์๋ฃ๋ ๋ฐ์ดํฐ๋ง ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์กฐํํ ์ ์๋ค.
์ค์ ํ ์ด๋ธ ๊ฐ์ ๊ฐ์ง๊ณ ์ค๋ ๊ฒ์ด ์๋ Undo ์์ญ์ ๋ฐฑ์ ๋ ๋ ์ฝ๋์์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
๐ Non-Repeatable Read (Inconsistence Analysis)
: ํ ํธ๋์ญ์ ๋ด์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋๋ฒ ์ํํ ๋, ๊ทธ ์ฌ์ด์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐ์ ์์ ๋๋ ์ญ์ ํจ์ผ๋ก์จ ๋ ์ฟผ๋ฆฌ๊ฐ ์์ดํ๊ฒ ๋ํ๋๋ ๋น ์ผ๊ด์ฑ์ด ๋ฐ์ํ๋ ํ์
(ํ๋์ ํธ๋์ญ์ ๋ด์์ ๋์ผํ select๋ฅผ ์ํํ์ ๊ฒฝ์ฐ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ผํ๋ Repeatable Read ์ ํฉ์ฑ์ ์ด๊ธ๋๋ค.)
3๏ธโฃ REPEATABLE READ
MySQL์ InnoDB ์คํ ๋ฆฌ์ง ์์ง์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค.
MySQL์์๋ ํธ๋์ญ์ ๋ง๋ค ํธ๋์ญ์ ID๋ฅผ ๋ถ์ฌํ์ฌ ํธ๋์ญ์ ID๋ณด๋ค ์์ ํธ๋์ญ์ ๋ฒํธ์์ ๋ณ๊ฒฝํ ๊ฒ๋ง ์ฝ๊ฒ ๋๋ค.
InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ํธ๋์ญ์ ์ด Rollback๋ ๊ฐ๋ฅ์ฑ์ ๋๋นํด ๋ณ๊ฒฝ๋๊ธฐ ์ ๋ ์ฝ๋๋ฅผ Undo ์์ญ์ ๋ฐฑ์ ํด๋๊ณ ์ค์ ๋ ์ฝ๋ ๊ฐ์ ๋ณ๊ฒฝํ๋ค.
์ด๋ฌํ ๋ณ๊ฒฝ ๋ฐฉ์์ MVCC : Multi Version Concurrency Control ์ด๋ผ๊ณ ํ๋ค.
Repeatable Read๋ ์ด MVCC๋ฅผ ์ํด Undo ์์ญ์ ๋ฐฑ์ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ํตํด ๋์ผํ ํธ๋์ญ์ ๋ด์์๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค ์ ์๋๋ก ๋ณด์ฅํ๋ค.
* Read Committed ๊ฒฉ๋ฆฌ ์์ค ๋ํ MVCC๋ฅผ ์ด์ฉํด commit ๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ์ง๋ง Repeatable Read์์ ์ฐจ์ด๋ Undo ์์ญ์ ๋ฐฑ์ ๋ ๋ ์ฝ๋์ ์ฌ๋ฌ ๋ฒ์ ๊ฐ์ด๋ฐ ๋ช ๋ฒ์งธ ์ด์ ์ ๋ฒ์ ๊น์ง ์ฐพ์ ๋ค์ด๊ฐ์ผ ํ๋์ง์ ์๋ค.
๋ง์ฝ ํ ์ฌ์ฉ์๊ฐ ํธ๋์ญ์ ์ ์์ํ ํ ์ฅ์๊ฐ๋์ ํธ๋์ญ์ ์ ์ข ๋ฃํ์ง ์์ผ๋ฉด Undo ์์ญ์ด ๋ฐฑ์ ๋ ๋ฐ์ดํฐ๋ก ๋ฌดํ์ ์ปค์ง๊ฒ ๋๋ค. Undo ์์ญ์ ๋ฐฑ์ ๋ ๋ ์ฝ๋๊ฐ ๋ง์์ง์๋ก MySQL ์๋ฒ์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค.
๐ Phantom Read(Phantom Row)
: ํ ํธ๋์ญ์ ๋ด์์ ๋์ผํ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์ํํ๋ ๋ฐ,
์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ์กด์ฌํ์ง ์๋ ์ ๋ น(phantom) ๋ ์ฝ๋๊ฐ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ๋ํ๋๋ ํ์
4๏ธโฃ SERIALIZABLE
๊ฐ์ฅ ๋จ์ํ๋ฉด์ ๊ฐ์ฅ ์๊ฒฉํ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค.
ํ ํธ๋์ญ์ ์์ ์ฝ๊ณ ์ฐ๋ ๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์์๋ ์ ๋ ์ ๊ทผํ ์ ์๋ค.
์๋ฒฝํ ์ฝ๊ธฐ ์ผ๊ด์ฑ ๋ชจ๋๋ฅผ ์ ๊ณตํ์ง๋ง ๋์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ด ๋ค๋ฅธ ๊ฒฉ๋ฆฌ ์์ค๋ณด๋ค ๋จ์ด์ง๊ณ ์ฑ๋ฅ์ ํ๊ฐ ๋ฐ์ํ์ฌ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค.
'๐ฉ๐ปโ๐ป > database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [MySQL] localhost ๋น๋ฐ๋ฒํธ ๊น๋จน์๋ค (0) | 2025.02.14 |
|---|---|
| ํฌ๋กค๋ง ๋ฐ์ดํฐ ์ ์ฌ SQL vs NoSQL (1) | 2025.02.06 |
| [MongoDB] ๊ฐ๋จํ ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.01.10 |
| [MySQL] ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ค์๊ฐ ํ์ธ ์งํ (3) | 2024.10.20 |
| [MySQL] ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ค์๊ฐ ํ์ธ (2) | 2024.10.02 |