๋ฐ์ดํฐ๋ฒ ์ด์ค isolation level(๊ฒฉ๋ฆฌ ์์ค)
isolation level(๊ฒฉ๋ฆฌ ์์ค)
๋ฐ์ดํฐ๋ฒ ์ด์ค isolation level(๊ฒฉ๋ฆฌ ์์ค)์ ํธ๋์ญ์ ๊ฐ์ ์ผ๋ง๋ ๊ฒฉ๋ฆฌ๋์ด์ผ ํ๋์ง๋ฅผ ์ ์ํ๋ ๊ฐ๋ ์ ๋๋ค. ๊ฒฉ๋ฆฌ ์์ค์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์คํ๋ ๋ ๋ฐ์ํ ์ ์๋ ๊ฐ์ข ๋ฌธ์ ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ACID(์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ) ํน์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ฝ๊ฒ ๋งํ๋ฉด, '์ฒ ์๊ฐ ํน์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์๋ ์ค์ ์ํฌ๊ฐ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ธ๊ฐ'์ ๋ํ ๋ด์ฉ์ ๋๋ค. ๋ค ๊ฐ์ง ํ์ค ๊ฒฉ๋ฆฌ ์์ค์ด ์์ต๋๋ค.
1. Read Uncommitted (๋ฏธ์๋ฃ ์ฝ๊ธฐ)
- ๊ฐ์ฅ ๋ฎ์ ๊ฒฉ๋ฆฌ ์์ค์ด๋ฉฐ, ๋ค๋ฅธ ํธ๋์ญ์
์ด ์์ง ์๋ฃ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
- ์ด๋ก ์ธํด Dirty Read(๋ํฐ ๋ฆฌ๋), Non-Repeatable Read(๋น๋ฐ๋ณต ๊ฐ๋ฅํ ์ฝ๊ธฐ), Phantom Read(์ ๋ น ์ฝ๊ธฐ) ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํธ๋์ญ์
A๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ์ค์ผ ๋, ํธ๋์ญ์
B๊ฐ ์์ง ์๋ฃ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
A ํธ๋์ญ์
: UPDATE Users SET Balance = Balance - 100 WHERE UserID = 1;
B ํธ๋์ญ์
: SELECT Balance FROM Users WHERE UserID = 1; (A๊ฐ ์์ง ์ปค๋ฐํ์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์)
2. Read Committed (์๋ฃ ์ฝ๊ธฐ)
- ํธ๋์ญ์
์ด ์๋ฃ๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ์ ์์ต๋๋ค.
- Dirty Read๋ ๋ฐฉ์ง๋์ง๋ง, Non-Repeatable Read์ Phantom Read๋ ์ฌ์ ํ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํธ๋์ญ์
A๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ์ค์ผ ๋, ํธ๋์ญ์
B๋ ์์ง ์๋ฃ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ ค๋ฉด ํธ๋์ญ์
A๊ฐ ์๋ฃ๋์ด์ผ ํฉ๋๋ค.
A ํธ๋์ญ์
: UPDATE Users SET Balance = Balance - 100 WHERE UserID = 1;
B ํธ๋์ญ์
: SELECT Balance FROM Users WHERE UserID = 1; (A๊ฐ ์ปค๋ฐํ๊ธฐ ์ ๊น์ง ์ฝ์ ์ ์์)
3. Repeatable Read (๋ฐ๋ณต ๊ฐ๋ฅํ ์ฝ๊ธฐ)
- ํธ๋์ญ์
์ด ์ฝ์ ๋ฐ์ดํฐ๋ ํธ๋์ญ์
์ด ์๋ฃ๋ ๋๊น์ง ๋ค๋ฅธ ํธ๋์ญ์
์์ ์์ ๋ ์ ์์ต๋๋ค.
- Dirty Read์ Non-Repeatable Read๋ ๋ฐฉ์ง๋์ง๋ง, Phantom Read๋ ์ฌ์ ํ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํธ๋์ญ์
A๊ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ฉด, ํธ๋์ญ์
B๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ๋ค๋ง A๊ฐ ์๋ฃ๋ ๋๊น์ง๋ ์ฝ์ ๋ฐ์ดํฐ๊ฐ ์ ์ง๋ฉ๋๋ค.
A ํธ๋์ญ์
: SELECT * FROM Products WHERE Category = 'Electronics';
B ํธ๋์ญ์
: UPDATE Products SET Price = Price * 1.1 WHERE Category = 'Electronics'; (A๊ฐ ์๋ฃ๋๊ธฐ ์ ๊น์ง ํด๋น ์นดํ
๊ณ ๋ฆฌ์ ์ ํ์ ์์ ํ ์ ์์)
4. Serializable (์ง๋ ฌํ)
- ๊ฐ์ฅ ๋์ ๊ฒฉ๋ฆฌ ์์ค์ผ๋ก, ํธ๋์ญ์
๊ฐ์ ์์ ํ ๊ฒฉ๋ฆฌ๋ฅผ ์ ์งํฉ๋๋ค.
- ๋ชจ๋ ๋ฌธ์ (Dirty Read, Non-Repeatable Read, Phantom Read)๊ฐ ๋ฐฉ์ง๋ฉ๋๋ค.
- ์ฑ๋ฅ์์ ์ด์ ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋์ง ์์ง๋ง, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ๋งค์ฐ ์ค์ํ ๊ฒฝ์ฐ์ ์ ํ๋ ์ ์์ต๋๋ค.
- ํธ๋์ญ์
A๊ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์์ ํ๋ ๋์ ํธ๋์ญ์
B๋ ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
A ํธ๋์ญ์
: INSERT INTO Orders (OrderID, ProductID, Quantity) VALUES (1, 101, 5);
B ํธ๋์ญ์
: SELECT * FROM Products WHERE ProductID = 101; (A๊ฐ ์๋ฃ๋ ๋๊น์ง ํด๋น ์ ํ ์ ๋ณด๋ฅผ ์ฝ์ ์ ์์)
๊ฒฉ๋ฆฌ ์์ค์ด ๋์์ง์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ์ ์ ์ง๋์ง๋ง, ๋์์ฑ์ ๊ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋๋ก ๊ฒฉ๋ฆฌ ์์ค์ด ๋ฎ์์ง๋ฉด ๋์์ฑ์ ์ฆ๊ฐํ์ง๋ง ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ํ ๋ณด์ฅ์ด ์ค์ด๋ญ๋๋ค. ๊ฐ ๊ฒฉ๋ฆฌ ์์ค์ ํ๋ก์ ํธ ์ํฉ์ ๋ง๊ฒ ์ ํํด์ ์ฌ์ฉํฉ๋๋ค.