๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค isolation level(๊ฒฉ๋ฆฌ ์ˆ˜์ค€)

์„œ์•„๋ž‘๐Ÿ˜ 2024. 1. 5. 00:02

 

 

 

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๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ์ œํ’ˆ ์ •๋ณด๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Œ)



๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋†’์•„์งˆ์ˆ˜๋ก ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ผ๊ด€์„ฑ์€ ์œ ์ง€๋˜์ง€๋งŒ, ๋™์‹œ์„ฑ์€ ๊ฐ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋‚ฎ์•„์ง€๋ฉด ๋™์‹œ์„ฑ์€ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์— ๋Œ€ํ•œ ๋ณด์žฅ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ๊ฐ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ํ”„๋กœ์ ํŠธ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.