- ๐ Transaction์ด๋?
- ๐ Transaction์ ์์ฑ (ACID)
- ๐ Isolation-level
- ๐ Isolation-level์ ๋ฐ๋ฅธ ๋ฌธ์ ์
Transaction์ ์ฒ๋ฆฌ๋๋ ์์ ์ ๋จ์์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ Transaction ์ฒ๋ฆฌ๋ ๋ก์ง์ ๋งค์ฐ ์ค์ํ ๊ธฐ๋ฅ์ด๋ค. ๋ฐ๋ผ์, ์๋ก ๋ค๋ฅธ ํธ๋์ญ์ ๋ค์ ์ฒ๋ฆฌํ๋ ๋์ค ํ๋์ ๋จ์ ํธ๋์ญ์ ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์ด์ ์ ์ฑ๊ณตํ๋ ํธ๋์ญ์ ๋ค์ ๋ค์ rollback ์์ผ ๋ฐ์ดํฐ์ Consistency๊ฐ ๊นจ์ง์ง ์๋๋ก ํด์ฃผ๋ ๊ฒ์ด๋ค.
๋ชจ๋ ์ฑ๊ณตํ์ ๊ฒฝ์ฐ์๋ commit์ ํตํด ํ์ ์ง์ด์ฃผ๊ฒ ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ Transaction flow๋ฅผ ๋ณด๊ฒ ๋๋ฉด ์๋์ ๊ฐ๋ค.
- ์๋ก ๋ค๋ฅธ Transaction์ ๋ถ๋ถ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
- ๋ชจ๋ Transaction์ด ์ ์์ ์ผ๋ก ์๋ฃ๋๋ฉด Commit ํ๋ค.
- ๋ง์ฝ Transaction์ค ํ๋๋ผ๋ ๋น์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉด rollback์ ์ํํ๋ค.
ACID ๋ Transaction์ ์ ์ํ๋ 4๊ฐ์ง ์์ฑ์ ๊ฐ๋ฆฌํค๋ ์ฝ์ด์ด๋ค.
A(Atomicity) : ์์์ฑ
- ์์ ์ฑ ๋ณด์ฅ์ ์ํด ๊ฐ์ ธ์ผ ํ ์ฑ์ง ์ค์ ํ๋๋ก ํธ๋์ญ์ ๊ณผ ๊ด๋ จ๋ ์์ ๋ค์ด ๋ถ๋ถ์ ์ผ๋ก ์คํ๋๋ค๊ฐ ์ค๋จ๋์ง ์๋ ๊ฒ์ ๋ณด์ฅํ๋ ๋ฅ๋ ฅ์ด๋ค.
- ๋ชจ๋ ์ฑ๊ณตํ ๊ฒ ์๋๋ฉด ๋ชจ๋ ์คํจํ๊ฒ ๋ง๋๋ ๊ฒ(DB์ ์ค์ผ์ ๋ง๊ธฐ ์ํจ).
C(Consistency) : ์ผ๊ด์ฑ
- ํธ๋์ญ์ ์ด ์คํ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๋ฉด ์ธ์ ๋ ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ก ์ ์งํ๋ ๊ฒ์ด๋ค.
- ๋๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์กฐํํ ๋๋ง๋ค ๋์ผํ ๊ฒฐ๊ณผ๊ฐ์ด ๋ํ๋์ผํ๋ ๊ฒ์ด๋ค.
- ์์ ๊ณผ ์ญ์ ๋ก ์ธํด ๊ฒฐ๊ณผ๊ฐ์ด ๋ฌ๋ผ์ง๋ ๊ฒ์ ๋น์ฐํ๋ค.
I(Isolation) : ๊ฒฉ๋ฆฌ์ฑ
- ํธ๋์ญ์ ์ ์ํ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ฐ์ฐ ์์ ์ด ๋ผ์ด๋ค์ง ๋ชปํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ด๋ค.
- A ์ฌ๋์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ B์ฌ๋์ ์์ฒญ์ ์ ์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด๋ค.
D(Durability) : ์ง์์ฑ
- ์ฑ๊ณต์ ์ผ๋ก ์ํ๋ ํธ๋์ญ์ ์ ๋ํ ๋ก๊ทธ๊ฐ ๋จ์์ผํ๋ ์ฑ์ง๋ก ๋ฐํ์ ์ค๋ฅ๋ ์์คํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ผ๋, ํด๋น ๊ธฐ๋ก์ ์๊ตฌ์ ์ด์ด์ผ ํ๋ ๊ฒ์ด๋ค.
- ์ฑ๊ณตํ์ฌ commit์ด ๋์์ผ๋ฉด ์๋ฒ๋ฅผ ๋ค์ ์ผ๋ ๊ทธ ๋ฐ์ดํฐ๋ ๊ทธ๋๋ก ์ ์ง๊ฐ ๋์ด์ผ ๋๋ ๊ฒ์ด๋ค.
Isolation-level ์ด๋ Transaction์ ๊ฒฉ๋ฆฌ ์์ค์ด๋ผ๊ณ ํ๋ค.
์ฆ, ๋์์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ์ฒ๋ฆฌ๋ ๋ ํน์ ํธ๋์ญ์ ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์กฐํํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๋๋ก ํ์ฉํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด๋ค.
Isolation์ ์ด 4๋จ๊ณ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์๋ ๋จ๊ณ๋ก ๋ด๋ ค๊ฐ์๋ก ์์ ํด์ง๋ ๋ฐ๋ฉด ์ฑ๋ฅ์ด ๋๋ ค์ง๋ ๋จ์ ์ด ์๋ค.
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
๊ฐ ํธ๋์ญ์
์์์ ๋ณ๊ฒฝ ๋ด์ฉ์ดย COMMIT
์ด๋ย ROLLBACK
ย ์ฌ๋ถ์ ์๊ด ์์ด ๋ค๋ฅธ ํธ๋์ญ์
์์ ๊ฐ์ ์ฝ์ ์ ์๋ค.
์ฆ, commit ๋์ง ์๋ ๋ฐ์ดํฐ๋ค์ ์กฐํํ ์ ์์ผ๋, ์ ํฉ์ฑ์ ๋ฌธ์ ๊ฐ ๋ง์ ๊ฒฉ๋ฆฌ ์์ค์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๊ถ์ฅ๋๋ค.
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ดย Commit์ด ๋์ง ์๋ ์ํ์ง๋งย Update๋ ๊ฐ์ ๋ค๋ฅธ ํธ๋์ญ์
์์ ์ฝ์ ์ ์๋ค.
RDB(๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค)์์ ๋๋ถ๋ถ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค.
Dirty Read์ ๊ฐ์ ํ์์ ๋ฐ์ํ์ง ์๋๋ค.
์ค์ ํ ์ด๋ธ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋ผ Undo ์์ญ์ ๋ฐฑ์ ๋ ๋ ์ฝ๋์์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
ํธ๋์ญ์
-1
์ด Commit ํ ์ดํ ์์ง ๋๋์ง ์๋ย ํธ๋์ญ์
-2
๊ฐ ๋ค์ ํ
์ด๋ธ ๊ฐ์ ์ฝ์ผ๋ฉด ๊ฐ์ด ๋ณ๊ฒฝ๋จ์ ์ ์ ์๋ค.
ํ๋์ ํธ๋์ญ์
๋ด์์ ๋๊ฐ์ SELECT ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ ๋๋ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ย REPEATABLE READ
์ ์ ํฉ์ฑ์ ์ด๊ธ๋๊ฒ ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ ์ฃผ๋ก ์ ๊ธ, ์ถ๊ธ ์ฒ๋ฆฌ๊ฐ ์งํ๋๋ ๊ธ์ ์ ์ธ ์ฒ๋ฆฌ์์ ์ฃผ๋ก ๋ฐ์ํ๋ฉฐ ์ด๋ฐํ ํ์์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๊นจ์ง๊ณ , ๋ฒ๊ทธ๋ ์ฐพ๊ธฐ ์ด๋ ค์์ง๋ค.
RDB(๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค)์์ ๋๋ถ๋ถ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค.
MySQL์์๋ ํธ๋์ญ์ ๋ง๋ค ํธ๋์ญ์ ID๋ฅผ ๋ถ์ฌํ์ฌ ํธ๋์ญ์ ID๋ณด๋ค ์์ ํธ๋์ญ์ ๋ฒํธ์์ ๋ณ๊ฒฝํ ๊ฒ๋ง ์ฝ๊ฒ ๋๋ค.
Undo ๊ณต๊ฐ์ ๋ฐฑ์ ํด๋๊ณ ์ค์ ๋ ์ฝ๋ ๊ฐ์ ๋ณ๊ฒฝํ๋ค.
์ด๋ฌํ ๋ณ๊ฒฝ๋ฐฉ์์ย MVCC(Multi Version Concurrency Control)๋ผ๊ณ ๋ถ๋ค.
REPEATABLE READ์ ์ข ์ข ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ํํ ๋ณ๊ฒฝ ์์ ์ ์ํด ๋ ์ฝ๋๊ฐ ๋ณด์๋ค๊ฐ ์ ๋ณด์๋ค๊ฐ ํ๋ ํ์์ด ๋ฐ์ํฉ๋๋ค. ์ด๋ฐ ๋ฌธ์ ๋ฅผ PHANTOM READ๋ผ๊ณ ํ๋ค.
PHANTOM READ
๋ MySQL์์ ์๋์ผ๋ก ์ ๊ฑฐํด ์ฃผ๊ธฐ์ ์ ํฌ๊ฐ ์ถ๊ฐ์ ์ผ๋ก ์ ์ฉํ ๋ถ๋ถ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ PHANTOM READ
๊ฐ ๋ฐ์ํ์ง ์๊ธฐ ์ํด์ SERIALIZABLE
๋ฅผ ์ฌ์ฉํ๋ค.
์ฑ๋ฅ ์ธก๋ฉด์์๋ ๋์ ์ฒ๋ฆฌ์ฑ๋ฅ์ด ๊ฐ์ฅ ๋ฎ์ผ๋ฉฐ ๊ฐ์ฅ ๋จ์ํ ๊ฒฉ๋ฆฌ ์์ค์ด์ง๋ง ๊ฐ์ฅ ์๊ฒฉํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค.
SERIALIZABLE์ ๋ํด ์์๋ณด๊ธฐ ์ํด ์์๋ฅผ ํตํด ์์๋ณด๋๋ก ํ์!!
์ฒ ์ 3,000์, ํ์ด 2,000์, ์ํฌ 5,000์์ด ์กด์ฌํ๋ค.
์ฒ ์์ ํ์ด๊ฐ ๊ฐ์ง ๋์ ์ํฌ์๊ฒ ๋ชจ๋ ์ค๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
๊ทธ๋ผ ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๊ธฐ๋ก๋ ์ํฌ์ ๋์ 10,000์์ด ๋๊ณ ๋๋๋ ๊ฒ ๋น์ฐํ๋ค.
ํ์ง๋ง ์ปดํจํฐ์ ์ ์ฅ์์๋ ์์๋๋ก ์ผ์ ์งํํ๊ธฐ์, ์ํฌ์ ๋์ด 10,000์์ด ๋์ง ์์ ์๋ ์๋ค.
์ฒ ์๊ฐ ์ํฌ์๊ฒ 3,000์์ ์ฃผ๋ ๋์์ ํ์ด ๋ํ ์ํฌ์๊ฒ 2,000์์ ์ฃผ๊ฒ ๋๋ค๋ฉด ์ปดํจํฐ๋ ์ด๋ป๊ฒ ๋ฐ์๋ค์ผ๊น?
๋์์ ์ฃผ๋ ์ํฉ์ ์ปดํจํฐ ์ ์ฅ์์ ์๊ฐํด ๋ณด์.
์ฆ, ์์ ๊ฐ์ ์ํฉ์ ์ฒ ์๊ฐ ์ค ๋์ update ์๋ฃ ํ๊ธฐ ์ ์ ํ์ด๊ฐ ๋์ ๋๊ฒจ์ค์ผ๋ก์จ, ๋ฐ์ดํฐ์ ์ค์ผ์ด ์ผ์ด๋๊ฒ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฒ ์๊ฐ ๋์ ์ฃผ๊ณ update๊ฐ ์๋ฃ๋ ๋ ๊น์ง๋ ์ํฌ ๋ฐ์ดํฐ์ ํ์ด๋ ์ ๊ทผํ ์ ์๋๋ก lock
์ ๊ฑธ์ด ์ฃผ์ด์ผ ํ๋ค.