[DB] ๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค(Isolation level)
ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ์์ค๊ณผ ๋์์ฑ ์ด์ ๋ฉด์ ์ง๋ฌธ์ ๋ต๋ณํ๊ธฐ ์ํด ์ ๋ฆฌํ๋ฉฐ ์์ฑํ์ต๋๋ค.
ํธ๋์ญ์ ์ด๋
A๊ฐ B์๊ฒ ์ก๊ธ์ ํ๋ค. B๊ฐ ์ก๊ธ์ ๋ฐ๋ ์ค ๋ฌธ์ ๊ฐ ์๊ธด๋ค๋ฉด A์ ์ก๊ธ ์์ฒญ์ด ์ทจ์๋์ด์ผ ํ ๊ฒ์ด๋ค.
ํ๊บผ๋ฒ์ ์ํ๋์ด์ผ ํ๋ ์์ ์ ๋จ์์ด๋ค.
๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ฉด์ ์์ ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๊ธฐ ์ํ ๋ชฉ์ ์ ๊ฐ์ง๋ค.
ํธ๋์ญ์ ACID ์ฑ์ง ์ค
๊ฒฉ๋ฆฌ์ฑ(Isolation) := ๋์์ ์คํ๋๋ ํธ๋์ญ์ ๋ค์ด ์๋ก ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ๋ค๋ฅธ ํธ๋์ญ์ ์ฐ์ฐ์ ๋ผ์ด๋ค ์ ์์
๊ฒฉ๋ฆฌ ์์ค์ด ๋์์ง๊ฒ ๋๋ฉด ๋์์ ์ฒ๋ฆฌ๋๋ ํธ๋์ญ์ ์ ์ฐจ๋ก๋๋ก ์คํ์ ํ๋ ๊ฒ์ ๋์์ฑ ์ฑ๋ฅ์ด ๋งค์ฐ ๋จ์ด์ง๊ฒ ๋๋ฏ๋ก ๊ฐ DBMS์์๋ Isolation ์ฑ์ง์ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ด์ฉํด์ ์ ์ฉํด์ผ ํ๋ค.
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
ANSI ํ์ค์ ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค์ 4๋จ๊ณ๋ก ๋๋์ด ์ ์ํ๋ค.
์ด๋ป๊ฒ ํธ๋์ญ์ ์ ๊ทผ์ ์ ์ดํ ์ง์ ๋ํ ์ค์ ์ ํ ์ ์๋ค.
Default | ์ฌ์ฉํ๋ DB ๋๋ผ์ด๋ฒ์ ๋ํดํธ ์ค์ ์ ๋ฐ๋ฅธ๋ค. ๋๋ถ๋ถ READ_COMMITED๋ฅผ ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ์์ค์ผ๋ก ์ค์ ํ๋ค. |
READ_UNCOMMITED | ๊ฐ์ฅ ๋ฎ์ ๊ฒฉ๋ฆฌ ์์ค ํธ๋์ญ์ ์ด ์ปค๋ฐ๋๊ธฐ ์ ์ ๊ทธ ๋ณํ๊ฐ ๋ค๋ฅธ ํธ๋์ญ์ ์ ๊ทธ๋๋ก ๋ ธ์ถ๋๋ค. ํ์ง๋ง ์๋๊ฐ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๋จ์ด์ง๋๋ผ๋, ์ฑ๋ฅ ๊ทน๋ํ๋ฅผ ์ํด ์๋์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ ํ๋ค. |
READ_COMMITED | ํธ๋์ญ์
์ด ์ปค๋ฐํ์ง ์์ ์ ๋ณด๋ ์ฝ์ ์ ์๋ค. ํ์ง๋ง ํธ๋์ญ์ ์ด ์ฝ์ ๋ก์ฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์์ ํ ์ ์๊ธฐ์ ํธ๋์ญ์ ์ด ๊ฐ์ ๋ก์ฐ๋ฅผ ์ฝ์์ด๋ ์๊ฐ์ ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ด์ฉ์ด ๋ฐ๊ฒฌ๋ ์ ์๋ค. |
REPEATABLE_READ | ํธ๋์ญ์
์ด ์ฝ์ ๋ก์ฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์
์์ ์์ ๋๋ ๊ฒ์ ๋ง์์ค๋ค. ํ์ง๋ง ์๋ก์ด ๋ก์ฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ ํํ์ง ์๋๋ค. |
SERIALIZABLE | ๊ฐ์ฅ ๊ฐ๋ ฅํ ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ๊ฐ์ ํ ์ด๋ธ ๋ก์ฐ์ ์ก์ธ์คํ์ง ๋ชปํ๊ฒ ํ๋ค. ๊ฐ์ฅ ์์ ํ์ง๋ง ๊ฐ์ฅ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค. |
๋์์ฑ์ด ๋ฎ์์ง์ ๋ฐ๋ผ ์ผ๊ด์ฑ์ด ํ๋ณด ๋๋ ๋ฐ๋น๋ก ํน์ง์ ๋ณด์ธ๋ค.
๊ฒฉ๋ฆฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ฉด์ ๋ถ์ ํฉ ํ์์ด ํด๊ฒฐ๋๋ค. (๊ทธ๋ ์ง๋ง ๋์์ฑ์ด ๋ฎ์์ง๊ฒ ๋๋ค.)
๐ READ_UNCOMMITTED
์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ์ ๋ํ ์ฝ๊ธฐ ํ์ฉ
A์์ ์์ฑํ ๋ฐ์ดํฐ๋ฅผ B์์ ์กฐํํ๋๋ฐ, A์ ๋ฌธ์ ๊ฐ ์๊ฒจ ๋กค๋ฐฑ ๋๋ค๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์กฐํํ B๋ ์๋ชป๋ ๊ฐ์ ์ฝ๊ฒ ๋๋ค.
์ด๋ฅผ Dirty read ๋ถ์ ํฉ ํ์์ด ๋ฐ์ํ๋ค๊ณ ํ๋ค.
๐ READ_COMMITTED
์ปค๋ฐ๋์ง ์์ ์ ๋ณด๋ ์ฝ๊ธฐ ๋ถ๊ฐ
์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ง ์๊ณ ์ด์ ์ ๋ฐ์ดํฐ๊ฐ ์๋ undo ์์ญ์ ์ ๊ทผํด ๊ฐ์ ์กฐํํ๋ค.
Dirty read ํ์์ด ํด๊ฒฐ๋๋ค.
๊ทธ๋ ์ง๋ง ์ปค๋ฐ๋๊ธฐ ์ ๊ณผ ์ปค๋ฐ๋ ํ์ ์กฐํ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๊ธฐ์ ๋ฉฑ๋ฑ์ฑ์ด ์๋ฐฐ๋๋ค.
์ด๋ฅผ Non-repeatable read ๋ถ์ ํฉ ํ์์ด ๋ฐ์ํ๋ค๊ณ ํ๋ค.
* ๋ฉฑ๋ฑ์ฑ := ์ฐ์ฐ์ ์ฌ๋ฌ ๋ฒ ์ ์ฉํ๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง์ง ์๋ ์ฑ์ง
๐ REPEATABLE_READ
Transaction ID ๊ฐ์ ๋ถ์ฌ
Transaction ID๋ฅผ ๋ถ์ฌํด ๋ณด๋ค ๋ฎ์ ID์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ง ์ฝ๊ธฐ๋ฅผ ํ์ฉํ๋ค.
ํธ๋์ญ์ ์ด ์ฝ์ ๋ก์ฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์์ ๋๋ ๊ฒ์ ๋ง์์ค๋ค.
Non-repeatable read ํ์์ด ํด๊ฒฐ๋๋ค.
์๋ก์ด ๋ก์ฐ ์ถ๊ฐ(Insert)์ ๋ํ ์ ํ์ด ์๋ค.
Insert ํ์๋ ์กฐํ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๊ธฐ์ ๋ฉฑ๋ฑ์ฑ์ด ์๋ฐฐ๋๋ค.
์ด๋ฅผ Phantom read ๋ถ์ ํฉ ํ์์ด ๋ฐ์ํ๋ค๊ณ ํ๋ค.
๐ SERIALIZABLE (์ง๋ ฌํ)
ํธ๋์ญ์ ์ํ์ด ๋๋์ผ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ๊ฐ์ ํ ์ด๋ธ ๋ก์ฐ์ ์ก์ธ์คํ์ง ๋ชป ํ๋ค.
Phantom read ํ์์ด ํด๊ฒฐ๋๋ค.
๊ฐ์ฅ ์์ ํ์ง๋ง ๋์์ฑ์ด ๋จ์ด์ง๊ธฐ์ ๊ฐ์ฅ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
+) Spring์์์ @Transactional ์ด๋ ธํ ์ด์ ์ต์ ์ค์
Spring์์ ์ ๊ณตํ๋ @Transactional ์ด๋ ธํ ์ด์ ์ ์ต์ ์ผ๋ก๋ ์ค์ ๊ฐ๋ฅํ๋ค.
์ฐธ๊ณ