ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์์ค(DB Isolation Level)
by JiwonDev
# ๋ฌด๊ฒฐ์ฑ๊ณผ ์ ํฉ์ฑ
๋ฌด๊ฒฐ์ฑ(Integrity) : ํ ์ด ์์ด ์จ์ ํจ. ๋ฐ์ดํฐ ๊ฐ์ด ์ ํํ ์ํ์ธ๊ฐ? ์ด์ํ ๊ฐ์ด ์๋๊ฐ?
์ ํฉ์ฑ(Consistency) : ๋ชจ๋ ํธ๋์ญ์ ์์ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ์ด ๋ชจ์ ์์ด ์ผ์นํ๊ฐ?
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ ํฉ์ฑ์ ์งํค๊ธฐ์ํด ํ์ ๋ง๋ค ๋ค๋ฅธ '์ ์ฝ์กฐ๊ฑด'์ ๊ฑธ์ด ์ฌ์ฉํ๋ค.
# ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ์์ค (Isolation Level)์ด๋?
ํธ๋์ญ์ ์์ ์ผ๊ด์ฑ์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ ์์ค. ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ์๋ฉด ๋์์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ์ฒ๋ฆฌ ๋ ๋, A ํธ๋์ญ์ ์ด Bํธ๋์ญ์ ์์ [๋ณ๊ฒฝ&์กฐํํ๋ ๋ฐ์ดํฐ]๋ฅผ ์ฝ์ ์ ์๋๋ก ํ์ฉํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ๋ ์์ค์ ์๋ฏธํ๋ค.
ํธ๋์ญ์ ์ ์์์ ์ด๋ฉด์ ๋ ๋ฆฝ์ ์ธ ์ํ์ ํด์ผํ๋ค.(ACID) ๊ทธ๋์ ํธ๋์ญ์ ์ด DB๋ฅผ ๋ค๋ฃจ๋ ๋์, ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ด์ฌ ๋ชปํ๊ฒ Locking์ ํด์ผํ๋๋ฐ, ๋ฌด์์ ๋ค ์ ๊ทธ๊ฒ๋๋ฉด DB์ ์ฑ๋ฅ์ด ํฌ๊ฒ ๋จ์ด์ง๋ค. ์ด๋๊น์ง ์ ๊ธ ๊ฒ์ธ๊ฐ ์ ํ๋ ๊ฒ์ด ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ์์ค์ด๋ค.
# Shared Lock ๊ณผ Exclusive Lock
- ์ด ๋๊ฐ์ง๋ฅผ ํ ์ด๋ธ์ row(๋ฐ์ดํฐ)๋ง๋ค ๊ฑธ๋ฆฌ๋ row-level lock์ด๋ผ๊ณ ํ๋ค.
- Shared Lock(S lock): ์ฝ๊ธฐ, ๊ณต์ ์ ๋ํ lock
- Exclusive Lock(X lock): ์ํธ๋ฒ ํ์ ์ธ lock, ์ฆ ์ฐ๊ธฐ์ ๋ํ lock
์ฝ๊ฒ๋งํด Shared lock์ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ผ๋ฆฌ๋ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง Exclusive lock์ด ๊ฑธ๋ฆฐ ๋ฐ์ดํฐ๋ ๋ค๋ฅธ ์ด๋ ํ ์ฟผ๋ฆฌ๋ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ๋ค.
# ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์์ค 4๋จ๊ณ
๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๋ฒจ์ด ์ฆ๊ฐํ ์๋ก lock์ ๋ฒ์๊ฐ ์ปค์ ธ ๋์ ์ฒ๋ฆฌ์ฑ๋ฅ์ ๋จ์ด์ง๊ณ ๋ฌด๊ฒฐ์ฑ์ ์๊ฒฉํ๊ฒ ์ ์งํ๋ค.
- READ UNCOMMITTED (์ปค๋ฐ ๋ฌด์ํ๊ณ ์ค๊ฐ์ ๋ง ์ฝ๊ธฐ)
- READ COMMITTED (์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ฝ๊ธฐ)
- REPEATABLE READ (ํ ํธ๋์ญ์ ์์ ์ฌ๋ฌ๋ฒ ์ฝ์ด๋ ๋์ผํจ ๋ณด์ฅ)
- SERIALIZABLE
# LV 0. Read uncommitted
- ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค. ์ฆ Lock๋ฐ์ ๊ฑธ์ง ์๋๋ค.
- ํธ๋์ญ์ Commit, Rollback ์ฌ๋ถ์ ์๊ด์์ด ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐ์ ์ฝ์ ์ ์๋ค.
- ๋น์ฐํ๊ฑฐ์ง๋ง ์ ํฉ์ฑ(๋ชจ๋ ํธ๋์ญ์ ์์ ์ผ์นํจ) ๋ฌธ์ ๊ฐ ๋ง์ด ๋ฐ์ํ๋ค.
- Dirty Read(ํธ๋์ญ์ ์์ ์ด ์๋ฃ๋์ง ์์ ๋ฏธ์์ฑ ๋ฐ์ดํฐ๋ฅผ ์ฝ์) ํ์์ด ๋ฐ์ํ๋ค.
# LV 1. Read committed
- ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค. (๋น์ฐํ Rollback๋ ๋ฐ์ดํฐ๋ ์ฝ์ง ๋ชปํ๋ค.)
- ์ค์ ํ ์ด๋ธ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋ผ, ๋ฐฑ์ ๋์ด ๋ณต๊ตฌ ๊ฐ๋ฅํ Undo ์์ญ ๊ฐ์ ๊ฐ์ ธ์ค๊ฒ ๋๋ค.
- ๋๋ถ๋ถ์ RDB์์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค.
- Dirty Read๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
@ Read Committed์ ๋ฌธ์ ์
- ํ ํธ๋์ญ์ ๋ด์์ ๊ฐ์ ๊ฐ์ ์ฌ๋ฌ๋ฒ ์ฝ์์ ๋, ๋์ผํจ์ ๋ณด์ฅํ ์ ์๋ค. (Repeatable READ ์ ํฉ์ฑ)
- ํธ๋์ญ์ A๊ฐ ๊ฐ์ ๊ฐ์ ๋ค์ ์ฝ๊ธฐ์ ์ ํธ๋์ญ์ B ์์ ์ปค๋ฐ์ด ์ผ์ด๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ํ์ ์ ์ถ๊ธ ๊ฐ์ด ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ด ์ค์ํ ์๋น์ค์์ ์ฐพ๊ธฐํ๋ ์น๋ช ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ง๋ค ์ ์๋ค.
# LV 3 Repeatable Read
- ํ ํธ๋์ญ์ ๋ด์์ ๊ฐ์ ๊ฐ์ ์ฌ๋ฌ๋ฒ ์ฝ์ด๋ ์ ํฉ์ฑ์ ๋ณด์ฅํ๋ ์ฝ๊ธฐ์ด๋ค.
- DB๋ง๋ค ๊ตฌํ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค. ๋ณดํต ๋ฐ์ดํฐ๋ฅผ ์ฒ์์ฝ์ ๋ snapshot์ ์ฐ์ด ์ ํฉ์ฑ์ ๋ณด์ฅํ๋ค.
- ์ค๋ ์ท์ ์ฐ์ด์ ์ฌ์ฉํ๊ฒ๋๋ฉด Phantom Read๊ฐ ๋ฐ์ํ ์ ์๋ค. (์๋์ ์ค๋ช )
@Repeatable Read์ ๋ฌธ์ ์
- Phantom Read (ํ ํธ๋์ญ์ ์์ ํน์ ๋ ์ฝ๋๊ฐ ๋ณด์๋ค๊ฐ ์๋ณด์๋ค๊ฐ ํ๋ ํ์) ๋ฐ์ํ๋ค.
- ํ ํธ๋์ญ์ ์์ ๊ฐ์ ์ฝ์์ ๋, ์ฒซ๋ฒ์งธ์๋ ์๋ณด์ด๋ ๋ ์ฝ๋๊ฐ ๋๋ฒ์งธ ์กฐํ์์๋ ๋ณด์ด๋ ํ์.
- ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ ์ฐ๊ธฐ ์ ๊ธ๊น์ง ๊ฑธ์ด์ผ ํ๋ค.
# LV 4 Serializable
- ๋จ์ํ๊ณ ๋ฌด์ํ ๊ฒฉ๋ฆฌ์์ค
- ํ ํธ๋์ญ์ ์ด ์๋ฃ๋๊ธฐ ์ ๊น์ง ํด๋น ๋ฐ์ดํฐ์ ์์ ์ด ๋ถ๊ฐ๋ฅํ๋ค. (lock)
- ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๊ฐ์ฅ ๋ฎ๊ณ ๋ฐ๋๋ฝ ๋ฐ์๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋๋ค.
- Phantom Read๋ฅผ ํฌํจํ ๋๋ถ๋ถ์ ๋ฌธ์ ๋ ๋ง์ ์๋ ์์ง๋ง ์ฑ๋ฅ์ด ๋๋ฌด ๋จ์ด์ ธ ๊ฑฐ์ ์ฌ์ฉํ์ง ์๋๋ค.
# ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์์ค ๋ฌธ์ ํ์
์์์ ์ค๋ช ํ ๋ฌธ์ ๋ค์ ์ ๋ฆฌํ ํ์ด๋ค.
Dirty Read : ์ปค๋ฐ๋์ง ์์ ์์ ์ค์ธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ฝ์ ์ ์๋ค. (๋๋ฌ์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์)
Non-Repetable Read : ํ ํธ๋์ญ์ ๋ด์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ๋ฒ ์ฝ์์ ๋ ์ ํฉ์ฑ์ ๋ณด์ฅํ์ง ์๋ ๋ฌธ์
Phantom Read : ํ ํธ๋์ญ์ ์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋๋ฒ ์ํํ ๋, ์ฒซ๋ฒ์งธ ์ฟผ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๋ ๋ฌธ์
์ด ๊ธ์ ์ฝ์๋ค๋ฉด, ์๋์ ํ๊ฐ ๋ฌด์จ ์๋ฏธ์ธ์ง ์ดํดํ ์ ์๊ฒ ๋์์ ๊ฒ์ด๋ค.
'๐๊ธฐ๋ณธ ์ง์ > CS ๊ธฐ๋ณธ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DB ์ธ๋ฑ์ค์์๋ ์ HashTable์ ์ฌ์ฉํ์ง ์์๊น? (0) | 2024.01.10 |
---|---|
๋คํธ์ํฌ L4, L7 ๋ก๋๋ฐธ๋ฐ์ฑ (Load balancing) (0) | 2021.09.08 |
์ ์์ผ๊ณผ ์ต์คํธ๋ฆผ ํ๋ก๊ทธ๋๋ฐ(Agile , XP) (0) | 2021.08.25 |
Java์์์ ์๊ณ์์ญ๊ณผ ๋ฐ๋๋ฝ ํด๊ฒฐ (sync, ๋ชจ๋ํฐ) (0) | 2021.07.28 |
I/O์ Sync์ Blocking ๊ทธ๋ฆฌ๊ณ Multiplexing (0) | 2021.07.28 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev