Transaction ์ด๋?
Transaction ์ด๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ํ๋์ ๋จ์๋ก ๋ฌถ์ธ ์ฌ๋ฌ ๊ฐ์ SQL ์ฟผ๋ฆฌ ๋ชจ์์ด๋ค. ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๊ณ ์๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋ค๋ฅธ Transaction ๊ณผ ๋ ๋ฆฝ์ ์ด๊ณ ์ผ๊ด๋๊ณ ์ ๋ขฐํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด ์ก๊ธ Transaction ๊ฐ์ ๊ฒฝ์ฐ, SELECT, UPDATE, UPDATE ๋ฌธ์ด ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ๋จ์๋ก ์คํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด 3๊ฐ์ SQL ์ฟผ๋ฆฌ๋ฅผ ํ๋์ Transaction ์ผ๋ก ๋ฌถ์ด ์ฒ๋ฆฌํ๋ค.
Transaction ์ ๋ชฉ์
- ์ค๋ฅ๋ก๋ถํฐ ๋ณต๊ตฌ๋ฅผ ํ์ฉํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ผ๊ด์ฑ ์๊ฒ ์ ์งํ๋ ์์ ์ ์ธ ์์ ๋จ์๋ฅผ ์ ๊ณต
- ๋์์ ์ ๊ทผํ๋ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ ๊ฐ์ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณต
Transaction Lifespan
- Transaction BEGIN
- Transaction COMMIT
- Transaction ROLLBACK
ACID
ACID ๋ Transaction ์ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํด Transaction ์ด ๊ฐ์ ธ์ผ ํ๋ 4๊ฐ์ง ์์ฑ์ด๋ค.
- Atomicity
- Consistency
- Isolation
- Durability
Atomicity, ์์์ฑ
- ํธ๋์ญ์ ์ ํฌํจ๋ ๋ชจ๋ ์ฟผ๋ฆฌ๊ฐ ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ์คํจํด์ผ ํ๋ค.
- ํธ๋์ญ์ ์ ํฌํจ๋ ์ฟผ๋ฆฌ ์ค ํ๋๋ผ๋ ์คํจํ๊ฑฐ๋ DB ๊ฐ ํธ๋์ญ์ ๋์ค ์ข ๋ฃ๋ผ๋ ๋ชจ๋ Rollback ๋ผ์ผํ๋ค.
Consistency, ์ผ๊ด์ฑ
- ํธ๋์ญ์ ์ ์คํํ ์ ํ์๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ์์๋์ง ์์์ผ ํ๋ค.
- ์ฝ๊ธฐ ์ผ๊ด์ฑ ์ญ์ ๋ณด์ฅ๋์ด์ผ ํ๋๋ฐ, ํด๋ฌ์คํฐ๋ก ์ด๋ฃจ์ด์ง DB ์์คํ ์ ๊ฒฝ์ฐ Update ์งํ Read ๊ฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ์ง ์์ ์๋ ์๋ค.
Isolation, ๊ฒฉ๋ฆฌ์ฑ
- ๋์์ ์คํํ๋ ์ฌ๋ฌ ๊ฐ์ ํธ๋์ญ์ ์ด ์๋ก ์ํฅ์ ์ฃผ์ง ์์์ผ ํ๋ค.
- ๋์์ ํธ๋์ญ์
์ด ์คํ๋ ๋ ์ฌ๋ฌ Read Phenomena ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- Dirty Reads
- Lost Updates
- Non-repeatable Reads
- Phantom Reads
- ๋ค์ํ Isolation Level ๋ก ์ด๋ฐ Read Phenomena ๋ค์ ํด๊ฒฐํ ์ ์๋ค.
- Read Uncommitted
- Read Committed
- Repeatable Read
- Snapshot
- Serializable
- DBMS ๋ง๋ค ์ด๋ฅผ ๋ค๋ฅด๊ฒ ๊ตฌํํ๋ค.
- ๋น๊ด์ ๋ฝ: Row locks, Table locks, Page locks ๋ฑ์ ํ์ฉํ๋ค.
- ๋๊ด์ ๋ฝ: Lock ์ ์ฌ์ฉํ์ง ์๊ณ ๋ณ๊ฒฝ์ฌํญ์ ์ถ์ ํ๋ค.
- RR ์ ๋๋ถ๋ถ Row lock ์ ํ์ฉํ์ฌ ๊ตฌํํ๋๋ฐ, Postgres ์ ๊ฒฝ์ฐ RR ๋ฅผ Snapshot ์ผ๋ก ๊ตฌํํด์ Phantom Read ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- MySQL Transaction Isolation Level ์์ MySQL ์ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์์๋ณด์.
Durability, ์์์ฑ
- ์ปค๋ฐ์ด ์๋ฃ๋ ํธ๋์ญ์ ์ ์์๋์ง ์๋ ์ฑ์ง์ ๋งํ๋ค.
- Durability ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ธฐ์ ์ด ์กด์ฌํ๋ค.
- WAL, Write Ahead Log
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ Disk ์ ์์์ํค๋ ๊ฒ์ ๋น์ธ๊ธฐ ๋๋ฌธ์ WAL ๋ก ์์ถ๋ ๋ณ๊ฒฝ์ฌํญ๋ง ์ ์ฅํ๋ค.
- Asynchronous Snapshot
- AOF, Append Only File
- OS Cache
- WAL, Write Ahead Log