728x90
ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค(isolation level)์ด๋?
- ๋์์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ์ฒ๋ฆฌ๋ ๋, ํน์ ํธ๋์ญ์ ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์กฐํํ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๋๋ก ํ์ฉ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ ํ์์ฑ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ACID ๊ฐ์ด ํธ๋์ญ์ ์ด ์์์ ์ด๋ฉด์๋ ๋ ๋ฆฝ์ ์ธ ์ํ์ ํ๋๋ก ํ๋ค.
- ํธ๋์ญ์ ์ด DB๋ฅผ ๋ค๋ฃจ๋ ๋์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ด์ฌํ์ง ๋ชปํ๊ฒ ๋ง๋ Locking์ด๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๋ค.
- ๋ฌด์กฐ๊ฑด์ ์ธ Locking ์ผ๋ก ๋์์ ์ํ๋๋ ๋ง์ ํธ๋์ญ์ ๋ค์ ์์๋๋ก ์ฒ๋ฆฌํ ์์ DB ์ฑ๋ฅ์ ๋จ์ด์ง๊ฒ ๋๋ค.
- ๋ฐ๋๋ก, ์๋ต์ฑ์ ๋์ด๊ธฐ ์ํด Locking ๋ฒ์๋ฅผ ์ค์ธ๋ค๋ฉด ์๋ชป๋ ๊ฐ์ด ์ฒ๋ฆฌ๋ ์ฌ์ง๊ฐ ์๋ค.
- ์ต๋ํ ํจ์จ์ ์ธ Locking ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ข ๋ฅ
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SELIALIZABLE
READ UNCOMMITTED (Level 0)
- ๊ฐ ํธ๋์ญ์ ์ ๋ณ๊ฒฝ ๋ด์ฉ์ด COMMIT / ROLLBACK ์ฌ๋ถ์ ์๊ด ์์ด ๋ค๋ฅธ ํธ๋์ญ์ ์์ ๊ฐ์ ์ฝ์ ์ ์๋ค.
- ์ ํฉ์ฑ์ ๋ฌธ์ ๊ฐ ๋ง์ ๊ฒฉ๋ฆฌ ์์ค์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
- ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด COMMIT ๋์ง ์์ ์ํ์ง๋ง, UPDATE ๋ ๊ฐ์ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ฝ์ ์ ์๋ค.

READ COMMITTED (Level 1)
- ๋๋ถ๋ถ์ RDB ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค.
- Dirty Read ์ ๊ฐ์ ํ์์ ๋ฐ์ํ์ง ์๋๋ค.
- ์ค์ ํ ์ด๋ธ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋ผ, Undo ์์ญ์ ๋ฐฑ์ ๋ ๋ ์ฝ๋์์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
- ํ๋์ ํธ๋์ญ์ ์์ ๋๊ฐ์ SELECT ์ฟผ๋ฆฌ๋ฅผ ์คํํ์์ ๋ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ REPEATABLE READ์ ์ ํฉ์ฑ์ ์ด๊ธ๋๋ค.

REPEATABLE READ (Level 2)
- MySQL ๊ฒฝ์ฐ ํธ๋์ญ์ ๋ง๋ค ํธ๋์ญ์ ID ๋ฅผ ๋ถ์ฌํ์ฌ ํด๋น ID ๋ณด๋ค ์์ ํธ๋์ญ์ ๋ฒํธ์์ ๋ณ๊ฒฝํ ๊ฒ๋ง ์ฝ๊ฒ ๋๋ค.
- Undo ๊ณต๊ฐ์ ๋ฐฑ์ ํด๋๊ณ ์ค์ ๋ ์ฝ๋ ๊ฐ์ ๋ณ๊ฒฝํ๋ค.
- ๋ฐฑ์ ๋ ๋ฐ์ดํฐ๋ ๋ถํ์ํ๋ค๊ณ ํ๋จํ๋ ์์ ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ญ์ ํ๋ค.
- Undo์ ๋ฐฑ์ ๋ ๋ ์ฝ๋๊ฐ ๋ง์์ง๋ฉด, MySQL ์๋ฒ์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค.
- ์ด๋ฌํ ๋ณ๊ฒฝ ๋ฐฉ์์ MVCC(Multi Version Concurrency Control)๋ผ๊ณ ๋ถ๋ฅธ๋ค.

SERIALIZABLE (Level 3)
- ๊ฐ์ฅ ๋จ์ํ ๊ฒฉ๋ฆฌ ์์ค์ด์ง๋ง ๊ฐ์ฅ ์๊ฒฉํ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค.
- ์ฑ๋ฅ ์ธก๋ฉด์์๋ ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๊ฐ์ฅ ๋ฎ๋ค.
- SERIALIZABLE ์์๋ PHANTOM READ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ํ์ง๋ง, DB์์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค.
๋ฎ์ ๋จ๊ณ์ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค ์ด์ฉ ์์ ๋ฐ์ํ๋ ํ์

Dirty Read
- ํธ๋์ญ์ ์์ ์ด ์๋ฃ๋์ง ์์๋๋ฐ, ๋ค๋ฅธ ํธ๋์ญ์ ์์ ๋ณผ ์ ์๊ฒ ๋๋ ํ์
Non-Repeatable Read
- ํ ํธ๋์ญ์ ์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์ํํ ๋, ๋ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ์์ดํ๊ฒ ๋ํ๋๋ ๋น์ผ๊ด์ฑ ํ์
- ํ ํธ๋์ญ์ ์ด ์ํ ์ค์ผ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐ์ ์์ ๋๋ ์ญ์ ํจ์ผ๋ก์จ ๋ํ๋๋ค.
Phantom Read
- ํ ํธ๋์ญ์ ์์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฒ ์ํํ ๋, ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ์๋ ๋ ์ฝ๋๊ฐ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ๋ํ๋๋ ํ์
- ํ ํธ๋์ญ์ ์ด ์ํด ์ค์ผ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์๋ก์ด ๋ ์ฝ๋๋ฅผ INSERT ํจ์ผ๋ก์จ ๋ํ๋๋ค.
RDB(MySQL, Oracle) ๊ธฐ๋ณธ Isolation Level
- MySQL : REPEATABLE READ
- ORACLE : READ COMMITTED
Oracle ์ READ COMMITTED ์ SERIALIZABLE ๋ง ์ง์ํ๋ฉฐ, ๋๋จธ์ง ๋ ๊ฐ์ง Isolation level ์ ์ง์ํ์ง ์๋๋ค.
์ฐธ๊ณ
https://nesoy.github.io/articles/2019-05/Database-Transaction-isolation
https://doooyeon.github.io/2018/09/29/transaction-isolation-level.html
'IT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] How to install openJDK 8 on Mac (0) | 2022.11.03 |
---|---|
[๋ฐ์ดํฐ ๊ตฌ์กฐ] ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked lists) (0) | 2022.11.03 |
[Github] SSH ๋ฅผ ํ์ฉํ์ฌ ์ฌ๋ฌ ๊ณ์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ (0) | 2022.11.03 |
[๋ฐ์ดํฐ ๊ตฌ์กฐ] ์ฌ๊ท(recursive) ๋? (0) | 2022.11.03 |
[๊ฐ์ฒด์งํฅ ์ค๊ณ] Solid ์์น (0) | 2022.11.03 |
๋๊ธ