๐Ÿถ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฒฉ๋ฆฌ์ˆ˜์ค€

์œ ์‚ฌ๊ฐœ๋ฐœ์žยท2024๋…„ 6์›” 12์ผ
0
post-thumbnail

๐Ÿ“Œ๊ฐœ์š”

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ์ˆ˜์ค€์ด๋ž€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰๋  ๋•Œ, ํŠธ๋žœ์žญ์…˜ ๊ฐ„์˜ ๊ฐ„์„ญ์„ ์–ด๋–ป๊ฒŒ ์ œ์–ดํ• ์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ์„ค์ •์ด๋‹ค.

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

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ๋„ค ๊ฐ€์ง€ ์ฃผ์š” ์ˆ˜์ค€์ด ์žˆ๋‹ค.

๐Ÿ“–Serializable

๊ฐ€์žฅ ์—„๊ฒฉํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์œผ๋กœ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ํŠธ๋žœ์žญ์…˜์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰์‹œํ‚จ๋‹ค.

์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์ผํ•œ ๋ ˆ์ฝ”๋“œ์— ๋™์‹œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ ๋ถ€์ •ํ•ฉ ๋ฌธ์ œ๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ•˜์ง€๋งŒ ํŠธ๋žœ์žญ์…˜์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋งค์šฐ ๋–จ์–ด์ง„๋‹ค.

์ฆ‰, ๊ฐ€์žฅ ์•ˆ์ „ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋ฏ€๋กœ ๊ทน๋‹จ์ ์œผ๋กœ ์•ˆ์ „ํ•œ ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ“–Repeatable Read

Repeatable Read๋Š” ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ˜๋ณต ์‹คํ–‰ํ•  ๊ฒฝ์šฐ, ํ•ญ์ƒ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค.

์ฆ‰, ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋œ ํ›„์— ์ˆ˜ํ–‰๋œ SELECT ๋ฌธ์€ ์ดํ›„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜๋Š” ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Non-Repeatable Read(๋ฐ˜๋ณต ์ฝ๊ธฐ ๋ถˆ๊ฐ€๋Šฅ) ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ Phantom Read(ํŒฌํ…€ ๋ฆฌ๋“œ)๋Š” ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์ฒซ ๋ฒˆ์งธ SELECT์—์„œ ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰์ด 5๊ฐœ์˜€๋Š”๋ฐ, ๊ฐ™์€ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๋‘ ๋ฒˆ์งธ SELECT๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ƒˆ๋กœ์šด ํ–‰์„ INSERTํ•˜๊ณ  ์ปค๋ฐ‹ํ•˜๋ฉด, 6๊ฐœ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

MySQL(InnoDB)์˜ ๊ฒฝ์šฐ, Repeatable Read ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ๋„ ๊ฐญ ๋ฝ(Gap Lock)์„ ํ†ตํ•ด ํŒฌํ…€ ๋ฆฌ๋“œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ฏ€๋กœ, ์‚ฌ์‹ค์ƒ Serializable์— ๊ฐ€๊นŒ์šด ๋™์ž‘์„ ํ•œ๋‹ค.

๐Ÿ“–Read Committed

Read Committed๋Š” ์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๋งŒ ์กฐํšŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. Read Committed๋Š” Repeatable Read์—์„œ ๋ฐœ์ƒํ•˜๋Š” Phantom Read์— ๋”ํ•ด Non-Repeatable Read(๋ฐ˜๋ณต ์ฝ๊ธฐ ๋ถˆ๊ฐ€๋Šฅ) ๋ฌธ์ œ๊นŒ์ง€ ๋ฐœ์ƒํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž A๊ฐ€ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜์—ฌ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์˜€๊ณ , ์•„์ง ์ปค๋ฐ‹์€ ํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋ผ๊ณ  ํ•  ๋•Œ, ํ…Œ์ด๋ธ”์€ ๋จผ์ € ๊ฐฑ์‹ ๋˜๊ณ  ์–ธ๋‘ ๋กœ๊ทธ๋กœ ๋ณ€๊ฒฝ ์ „์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฑ์—…๋œ๋‹ค.

์ด๋•Œ ์‚ฌ์šฉ์ž B๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋ ค๊ณ  ํ•˜๋ฉด Read Committed์—์„œ๋Š” ์ปค๋ฐ‹๋œ ๋ฐ์ดํ„ฐ๋งŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, Repeatable Read์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์–ธ๋‘ ๋กœ๊ทธ์—์„œ ๋ณ€๊ฒฝ ์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.

์ตœ์ข…์ ์œผ๋กœ ์‚ฌ์šฉ์ž A๊ฐ€ ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•˜๋ฉด ๊ทธ๋•Œ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ๋„ ์ƒˆ๋กญ๊ฒŒ ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

Read Committed์—์„œ ๋ฐ˜๋ณต ์ฝ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์ปค๋ฐ‹ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ๋ถ€์ •ํ•ฉ ๋ฌธ์ œ๋ฅผ Non-Repeatable Read(๋ฐ˜๋ณต ์ฝ๊ธฐ ๋ถˆ๊ฐ€๋Šฅ)๋ผ๊ณ  ํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ค ํŠธ๋žœ์žญ์…˜์—์„œ ์˜ค๋Š˜ ์ž…๊ธˆ๋œ ์ด ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ๋Š” ๋„์ค‘ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๊ณ„์†ํ•ด์„œ ์ž…๊ธˆ ๋‚ด์—ญ์„ ์ปค๋ฐ‹ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด Read Committed์—์„œ๋Š” ๊ฐ™์€ ํŠธ๋žœ์žญ์…˜ ์ผ์ง€๋ผ๋„ ์กฐํšŒํ•  ๋•Œ ๋งˆ๋‹ค ์ž…๊ธˆ๋œ ๋‚ด์—ญ์ด ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“–Read Uncommitted

Read Uncommitted๋Š” ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ์กฐ์ฐจ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค.
์ฆ‰, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์ž‘์—…์ด ์ปค๋ฐ‹ ๋˜๋Š” ๋กค๋ฐฑ๋˜์ง€ ์•Š์•„๋„ ์ฆ‰์‹œ ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž A์˜ ํŠธ๋žœ์žญ์…˜์—์„œ INSERT๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.
์•„์ง ์ปค๋ฐ‹ ๋˜๋Š” ๋กค๋ฐฑ์ด ๋˜์ง€ ์•Š๋Š” ์ƒํƒœ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  READ Uncommitted๋Š” ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž B ํŠธ๋žœ์žญ์…˜์—์„œ ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž A์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์—ˆ๋‹ค๊ฐ€ ์‚ฌ์šฉ์ž A ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐ‘์ž๊ธฐ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›Œ๋ฒ„๋ฆฐ๋‹ค๋ฉด ์‚ฌ์šฉ์ž B ํŠธ๋žœ์žญ์…˜์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์„ํ…๋ฐ, ๋‹ค์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋‹ˆ ๊ฒฐ๊ณผ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธด๋‹ค.

์ด๋ฅผ Dirty Read๋ผ๊ณ  ํ•˜๋ฉฐ, ์ •ํ•ฉ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ๋งŽ์€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค.

์ถœ์ฒ˜ : https://mangkyu.tistory.com/299

profile
๊ฐœ๋ฐœ์ž์™€ ์œ ์‚ฌํ•œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€