๐Ÿ“• CS ์Šคํ„ฐ๋””/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

[DB] ๐Ÿ”€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Isolation level)

iknowDev 2023. 3. 16. 23:14

ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ์ˆ˜์ค€๊ณผ ๋™์‹œ์„ฑ ์ด์Šˆ ๋ฉด์ ‘ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ฆฌํ•˜๋ฉฐ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

 

ํŠธ๋žœ์žญ์…˜์ด๋ž€

A๊ฐ€ B์—๊ฒŒ ์†ก๊ธˆ์„ ํ–ˆ๋‹ค. B๊ฐ€ ์†ก๊ธˆ์„ ๋ฐ›๋Š” ์ค‘ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด A์˜ ์†ก๊ธˆ ์š”์ฒญ์ด ์ทจ์†Œ๋˜์–ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

ํ•œ๊บผ๋ฒˆ์— ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„์ด๋‹ค.

๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์•ˆ์ •์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์„ ๊ฐ€์ง„๋‹ค.

 

ํŠธ๋žœ์žญ์…˜ ACID ์„ฑ์งˆ ์ค‘

๊ฒฉ๋ฆฌ์„ฑ(Isolation) := ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํŠธ๋žœ์žญ์…˜๋“ค์ด ์„œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋„๋ก ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜ ์—ฐ์‚ฐ์— ๋ผ์–ด๋“ค ์ˆ˜ ์—†์Œ

 

๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋†’์•„์ง€๊ฒŒ ๋˜๋ฉด ๋™์‹œ์— ์ฒ˜๋ฆฌ๋˜๋Š” ํŠธ๋žœ์žญ์…˜์„ ์ฐจ๋ก€๋Œ€๋กœ ์‹คํ–‰์„ ํ•˜๋Š” ๊ฒƒ์€ ๋™์‹œ์„ฑ ์„ฑ๋Šฅ์ด ๋งค์šฐ ๋–จ์–ด์ง€๊ฒŒ ๋˜๋ฏ€๋กœ ๊ฐ DBMS์—์„œ๋Š” Isolation ์„ฑ์งˆ์„ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์ด์šฉํ•ด์„œ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€

ANSI ํ‘œ์ค€์€ ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ 4๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ์ •์˜ํ•œ๋‹ค.

์–ด๋–ป๊ฒŒ ํŠธ๋žœ์žญ์…˜ ์ ‘๊ทผ์„ ์ œ์–ดํ•  ์ง€์— ๋Œ€ํ•œ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Default ์‚ฌ์šฉํ•˜๋Š” DB ๋“œ๋ผ์ด๋ฒ„์˜ ๋””ํดํŠธ ์„ค์ •์„ ๋”ฐ๋ฅธ๋‹ค.
๋Œ€๋ถ€๋ถ„ READ_COMMITED๋ฅผ ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ์ˆ˜์ค€์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.
READ_UNCOMMITED ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€
ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๊ธฐ ์ „์— ๊ทธ ๋ณ€ํ™”๊ฐ€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋œ๋‹ค.
ํ•˜์ง€๋งŒ ์†๋„๊ฐ€ ๋น ๋ฅด๊ธฐ ๋–„๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ๋–จ์–ด์ง€๋”๋ผ๋„, ์„ฑ๋Šฅ ๊ทน๋Œ€ํ™”๋ฅผ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
READ_COMMITED ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์€ ์ •๋ณด๋Š” ์ฝ์„ ์ˆ˜ ์—†๋‹ค.
ํ•˜์ง€๋งŒ ํŠธ๋žœ์žญ์…˜์ด ์ฝ์€ ๋กœ์šฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ˆ˜์ • ํ•  ์ˆ˜ ์žˆ๊ธฐ์— ํŠธ๋žœ์žญ์…˜์ด ๊ฐ™์€ ๋กœ์šฐ๋ฅผ ์ฝ์—ˆ์–ด๋„ ์‹œ๊ฐ„์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋‚ด์šฉ์ด ๋ฐœ๊ฒฌ๋  ์ˆ˜ ์žˆ๋‹ค.
REPEATABLE_READ ํŠธ๋žœ์žญ์…˜์ด ์ฝ์€ ๋กœ์šฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์ค€๋‹ค.
ํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ๋กœ์šฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ œํ•œํ•˜์ง€ ์•Š๋Š”๋‹ค.
SERIALIZABLE ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€
์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๊ฐ™์€ ํ…Œ์ด๋ธ” ๋กœ์šฐ์— ์•ก์„ธ์Šคํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•œ๋‹ค.
๊ฐ€์žฅ ์•ˆ์ „ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.

๋™์‹œ์„ฑ <-> ์ผ๊ด€์„ฑ

๋™์‹œ์„ฑ์ด ๋‚ฎ์•„์ง์— ๋”ฐ๋ผ ์ผ๊ด€์„ฑ์ด ํ™•๋ณด ๋˜๋Š” ๋ฐ˜๋น„๋ก€ ํŠน์ง•์„ ๋ณด์ธ๋‹ค.

๊ฒฉ๋ฆฌ ์ˆ˜์ค€๊ณผ ๋ถ€์ •ํ•ฉ ํ˜„์ƒ ๊ด€๊ณ„

๊ฒฉ๋ฆฌ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉด์„œ ๋ถ€์ •ํ•ฉ ํ˜„์ƒ์ด ํ•ด๊ฒฐ๋œ๋‹ค. (๊ทธ๋ ‡์ง€๋งŒ ๋™์‹œ์„ฑ์ด ๋‚ฎ์•„์ง€๊ฒŒ ๋œ๋‹ค.)

 

 

 

 

๐Ÿ“Œ READ_UNCOMMITTED

์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฝ๊ธฐ ํ—ˆ์šฉ

โš ๏ธ Dirty read ๋ฐœ์ƒ

A์—์„œ ์ž‘์„ฑํ•œ ๋ฐ์ดํ„ฐ๋ฅผ B์—์„œ ์กฐํšŒํ–ˆ๋Š”๋ฐ, A์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ ๋กค๋ฐฑ ๋œ๋‹ค๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ B๋Š” ์ž˜๋ชป๋œ ๊ฐ’์„ ์ฝ๊ฒŒ ๋œ๋‹ค.

์ด๋ฅผ Dirty read ๋ถ€์ •ํ•ฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

 

 

๐Ÿ“Œ READ_COMMITTED

์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์ •๋ณด๋Š” ์ฝ๊ธฐ ๋ถˆ๊ฐ€

๐Ÿ‘‰ undo์˜์—ญ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ํ•ด๊ฒฐ

์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์ง€ ์•Š๊ณ  ์ด์ „์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” undo ์˜์—ญ์— ์ ‘๊ทผํ•ด ๊ฐ’์„ ์กฐํšŒํ•œ๋‹ค.

Dirty read ํ˜„์ƒ์ด ํ•ด๊ฒฐ๋œ๋‹ค.

 

โš ๏ธ Non-repeatable read ๋ฐœ์ƒ

๊ทธ๋ ‡์ง€๋งŒ ์ปค๋ฐ‹๋˜๊ธฐ ์ „๊ณผ ์ปค๋ฐ‹๋œ ํ›„์˜ ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ธฐ์— ๋ฉฑ๋“ฑ์„ฑ์ด ์œ„๋ฐฐ๋œ๋‹ค.

์ด๋ฅผ Non-repeatable read ๋ถ€์ •ํ•ฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

* ๋ฉฑ๋“ฑ์„ฑ := ์—ฐ์‚ฐ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ ์šฉํ•˜๋”๋ผ๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๋Š” ์„ฑ์งˆ

 

 

 

 

๐Ÿ“Œ REPEATABLE_READ

Transaction ID ๊ฐ’์„ ๋ถ€์—ฌ

๐Ÿ‘‰ Transaction ID๋ฅผ ๋‘์–ด ํ•ด๊ฒฐ

Transaction ID๋ฅผ ๋ถ€์—ฌํ•ด ๋ณด๋‹ค ๋‚ฎ์€ ID์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ฝ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค.

ํŠธ๋žœ์žญ์…˜์ด ์ฝ์€ ๋กœ์šฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์ค€๋‹ค.

Non-repeatable read ํ˜„์ƒ์ด ํ•ด๊ฒฐ๋œ๋‹ค.

 

โš ๏ธ Phantom read ๋ฐœ์ƒ

์ƒˆ๋กœ์šด ๋กœ์šฐ ์ถ”๊ฐ€(Insert)์— ๋Œ€ํ•œ ์ œํ•œ์ด ์—†๋‹ค.

Insert ํ›„์—๋Š” ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ธฐ์— ๋ฉฑ๋“ฑ์„ฑ์ด ์œ„๋ฐฐ๋œ๋‹ค.

์ด๋ฅผ Phantom read ๋ถ€์ •ํ•ฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

 

 

๐Ÿ“Œ SERIALIZABLE (์ง๋ ฌํ™”)

ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰์ด ๋๋‚˜์•ผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๊ฐ™์€ ํ…Œ์ด๋ธ” ๋กœ์šฐ์— ์•ก์„ธ์Šคํ•˜์ง€ ๋ชป ํ•œ๋‹ค.

Phantom read ํ˜„์ƒ์ด ํ•ด๊ฒฐ๋œ๋‹ค.
๊ฐ€์žฅ ์•ˆ์ „ํ•˜์ง€๋งŒ ๋™์‹œ์„ฑ์ด ๋–จ์–ด์ง€๊ธฐ์— ๊ฐ€์žฅ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.

 

 

 

+) Spring์—์„œ์˜ @Transactional ์–ด๋…ธํ…Œ์ด์…˜ ์˜ต์…˜ ์„ค์ •

Spring์—์„œ ์ œ๊ณตํ•˜๋Š” @Transactional ์–ด๋…ธํ…Œ์ด์…˜์˜ ์˜ต์…˜์œผ๋กœ๋„ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

์ฐธ๊ณ 

Spring transaction isolation level

ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(isolation Level)์ด๋ž€?