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

2023. 2. 17. 17:32ใ†Database/DB ์Šคํ„ฐ๋””

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

DB์—์„œ ํŠธ๋žœ์žญ์…˜์ด๋ž€ ํŠน์ • ์ž‘์—…์„ ์œ„ํ•œ DB ์—ฐ์‚ฐ๋“ค์˜ ๋ชจ์ž„์œผ๋กœ, ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„์ด๋‹ค.

ํŠธ๋žœ์žญ์…˜์€ ACID๋กœ ๋ถˆ๋ฆฌ๋Š” 4๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค. ๋‹ค๋งŒ ์ด๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŠธ๋žœ์žญ์…˜๋“ค์ด ์™„์ „ํžˆ ๊ฒฉ๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ DB์˜ ๋™์‹œ์„ฑ์ด ๊ณผ๋„ํ•˜๊ฒŒ ํฌ์ƒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์˜ ์ €ํ•˜๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. 

๊ทธ๋ ‡๋‹ค๊ณ  ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ๊ฒฉ๋ฆฌ๋ฅผ ํฌ๊ธฐํ•ด๋ฒ„๋ฆฌ๋ฉด DB์˜ ๋ฌด๊ฒฐ์„ฑ, ์ผ๊ด€์„ฑ ์ธก๋ฉด์—์„œ ๋งŽ์€ ๋ฌธ์ œ๋“ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, DB์˜ ์ผ๊ด€์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋ชจ๋‘ ๊ณ ๋ คํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ๊ฒฉ๋ฆฌ๋˜๋Š” ์ •๋„๋ฅผ ์ ์ ˆํžˆ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. 

์ด๋ฅผ ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Isolation Level)์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

 

๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ

1. Dirty Read

Dirty Read๋ž€ ํŠธ๋žœ์žญ์…˜์ด ์•„์ง DB ์ƒ์— ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฝ์–ด์˜ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

ํŠธ๋žœ์žญ์…˜ A๊ฐ€ id ๊ฐ’์„ 1๋กœ ๊ฐ–๋Š” ์‹ ๊ทœ ๋ฐ์ดํ„ฐ๋ฅผ WRITEํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. (์ปค๋ฐ‹์€ ์•„์ง ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Œ.) ์ด ๋•Œ ํŠธ๋žœ์žญ์…˜ B์—์„œ READ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์ด๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ฒƒ์ด Dirty Read ์ด๋‹ค. 

์ด ๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์€, ๋งŒ์•ฝ ํŠธ๋žœ์žญ์…˜ A๊ฐ€ ๋ชจ์ข…์˜ ์ด์œ ๋กœ ๋กค๋ฐฑ๋˜๊ธฐ๋ผ๋„ ํ•œ๋‹ค๋ฉด ๊ฒฐ๋ก ์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜ B๋Š” DB์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Š” DB์˜ ์ผ๊ด€์„ฑ์— ์น˜๋ช…์ ์ธ ๋ฌธ์ œ์ ์œผ๋กœ ์ž‘์šฉํ•œ๋‹ค.

 

2. Non-Repeatable Read

Non-Repeatable Read๋Š” ํŠน์ • ํŠธ๋žœ์žญ์…˜์—์„œ ๋™์ผํ•œ READ ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ READ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

ํŠธ๋žœ์žญ์…˜ A๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” id = 1 ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ READ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜ B๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” id = 1 ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด UPDATE ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด ๋•Œ ํŠธ๋žœ์žญ์…˜ B๋Š” ํŠธ๋žœ์žญ์…˜ A์˜ ์ค‘๊ฐ„์— ๋ฐœ์ƒํ•˜๊ณ  ์ˆ˜์ •๊ณผ ๋™์‹œ์— ์ปค๋ฐ‹์ด ์ด๋ฃจ์–ด์กŒ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ํŠธ๋žœ์žญ์…˜ A๋Š” ์ดˆ๊ธฐ์—๋Š” ์ˆ˜์ •๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์ง€๋งŒ, ํŠธ๋žœ์žญ์…˜ B๊ฐ€ ์ˆ˜ํ–‰๋œ ์ดํ›„์—๋Š” ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฒŒ ๋œ๋‹ค. 

์ด๋Š” ๊ฒฐ๊ตญ ๋™์ผ ํŠธ๋žœ์žญ์…˜์—์„œ ์ˆ˜ํ–‰๋œ ๋™์ผ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, DB ์—ฐ์‚ฐ์˜ ์ผ๊ด€์„ฑ์„ ํ•ดํ•œ๋‹ค.

 

3. Phantom Read

Phantom Read๋Š” ํŠน์ • ํŠธ๋žœ์žญ์…˜์—์„œ ๋™์ผํ•œ READ ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

ํŠธ๋žœ์žญ์…˜ A๊ฐ€ ํŠน์ • ํ…Œ์ด๋ธ”์˜ row์˜ ์ˆ˜์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ ์ธ READ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜ B๊ฐ€ ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…, ํ˜น์€ ์‚ญ์ œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด ๋•Œ ํŠธ๋žœ์žญ์…˜ A๊ฐ€ ํŠธ๋žœ์žญ์…˜ B๋ณด๋‹ค ๋จผ์ € ์‹œ์ž‘๋˜๊ณ , ๋‚˜์ค‘์— ๋๋‚œ๋‹ค๊ณ  ํ•  ๋•Œ ํŠธ๋žœ์žญ์…˜ A์˜ ๊ฒฐ๊ณผ๋Š” ํŠธ๋žœ์žญ์…˜ B์˜ ์ „ํ›„๋กœ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ Phantom Read๋ผ๊ณ  ํ•œ๋‹ค.

Non-Repeatable Read VS Phantom Read

๋‘ ๋ฌธ์ œ ๋ชจ๋‘ ํŠน์ • ํŠธ๋žœ์žญ์…˜์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์˜ ์ผ๊ด€์„ฑ์— ๋Œ€ํ•œ ๋ฌธ์ œ์ด๋‹ค. 

๋”ฐ๋ผ์„œ ๋‘˜ ๊ฐ„์˜ ๋ฌด์Šจ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์˜์•„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ

Non-Repeatable Read๋Š” ์ด์ „์— ์ฝ์€ ํŠน์ • ๋ฐ์ดํ„ฐ(ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ)์˜ ๊ฐ’์˜ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ฌธ์ œ์ ์ด๊ณ ,

Phantom Read๋Š” ์ด์ „์— ์ฝ์€ ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„(๋ฐ์ดํ„ฐ์˜ ์œ ๋ฌด) ์ž์ฒด๊ฐ€ ๋‹ฌ๋ผ์ ธ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋ฌธ์ œ์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

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

1. READ UNCOMMITED

๊ฐ€์žฅ ๋‚ฎ์€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์œผ๋กœ, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด READ, WRITE ์ค‘์ธ ๋ฐ์ดํ„ฐ์˜ ์ปค๋ฐ‹, ๋กค๋ฐฑ ์ „์— ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฆ‰, ํ•ด๋‹น ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ๋Š” ์–ด๋– ํ•œ ๋ฝ๋„ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋กœ ์ธํ•ด Dirty Read, Non-Repeatable Read, Phantom Read ๋ฌธ์ œ๊ฐ€ ๋ชจ๋‘ ๋ฐœ์ƒํ•œ๋‹ค. 

 

2. READ COMMITED

๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹, ๋กค๋ฐฑํ•œ ๋ฐ์ดํ„ฐ ๋งŒ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค. 

๊ฐ ํŠธ๋žœ์žญ์…˜์—์„œ READ ์ž‘์—… ์‹œ ๊ทธ ๋‹น์‹œ์˜ DB ์ƒํƒœ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹Œ,

๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ปค๋ฐ‹ ์ž‘์—…์ด ์ˆ˜ํ–‰๋œ ์‹œ์ ์˜ DB ์Šค๋ƒ…์ƒท์„ ํ†ตํ•ด READ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. (์ด๋ฅผ Consistent Read๋ผ๊ณ  ํ•œ๋‹ค.) 

์ด๋ฅผ ํ†ตํ•˜๋ฉด Dirty Read ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์ง€๋งŒ, Non-Repeatable Read, Phantom Read ๋ฌธ์ œ๋Š” ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. REPEATABLE READ

ํ•ด๋‹น ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ํŠน์ • ํŠธ๋žœ์žญ์…˜์ด ์ฒ˜์Œ READ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ

๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ปค๋ฐ‹ ์ž‘์—…์ด ์ˆ˜ํ–‰๋œ ์‹œ์ ์˜ DB ์Šค๋ƒ…์ƒท์„ ๊ฐ–๊ณ , ์ดํ›„ ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  READ ์—ฐ์‚ฐ์„ ์ด ์Šค๋ƒ…์ƒท์„ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค.

์ด๋ฅผ ํ†ตํ•˜๋ฉด ํŠน์ • ํŠธ๋žœ์žญ์…˜์ด ๋ฐ˜๋ณต์ ์œผ๋กœ READ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ชจ๋‘ ๊ฐ™์€ ์‹œ์ ์˜ ์Šค๋ƒ…์ƒท์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—

์ค‘๊ฐ„์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ UPDATE ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋งค๋ฒˆ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, Dirty Read, Non-Repeatable Read ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค.

๋‹ค๋งŒ ์ด๋Ÿฌํ•œ ์Šค๋ƒ…์ƒท๋“ค์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ฐœ์ƒํ•œ INSERT, DELETE ์—ฐ์‚ฐ์— ๋Œ€ํ•ด์„œ๋Š” ์ปค๋ฐ‹ ์‹œ์ ์— ์ˆ˜์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— Phantom Read ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

 

4. SERIALIZABLE

๊ฐ€์žฅ ๋†’์€ ์ˆ˜์ค€์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค. ํ•ด๋‹น ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์ด ์ง๋ ฌ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ Dirty Read, Non-Repeatable Read, PhantomRead ๋ฌธ์ œ๊ฐ€ ๋ชจ๋‘ ํ•ด๊ฒฐ๋œ๋‹ค.

๋‹ค๋งŒ, ํ•ด๋‹น ๋ฐฉ์‹์€ DB์˜ ๋™์‹œ์„ฑ์„ ํ•ด์น˜๊ณ  ๋ฐ๋“œ๋ฝ์ด ์‰ฝ๊ฒŒ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ๋Š” ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

์ฐธ์กฐ

https://suhwan.dev/2019/06/09/transaction-isolation-level-and-lock/