CS_DB_5 ๐Ÿ˜š

์ด์ •๋นˆยท2023๋…„ 12์›” 6์ผ
0

CS์Šคํ„ฐ๋””

๋ชฉ๋ก ๋ณด๊ธฐ
5/10

๐Ÿ’พ DB ์„ธ์…˜์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์›น ๊ฐœ๋ฐœ์˜ ์ธก๋ฉด์—์„œ ๋ณด๋Š” ์„ธ์…˜์ด๋ผ๊ณ  ํ•จ์€ ์‚ฌ์šฉ์ž์™€ ์›น ํ˜น์€ ์•ฑ๊ณผ์˜ ์‚ฌ์ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์†์„ ์‹œ์ž‘์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ด€๋ จ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์ ‘์†์„ ์ข…๋ฃŒํ•˜๊ธฐ๊นŒ์ง€ ์ „์ฒด๊ธฐ๊ฐ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ธ์…˜์€ ์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด ์ƒ์„ฑ์ด ๋˜๊ณ  ์„ธ์…˜์— ์˜ํ•ด์„œ ์œ ์ €๊ฐ€ ์–ด๋–ค ํ™œ๋™์„ ํ•˜๋Š”์ง€ ์ถ”์  ๋ฐ ํ™•์ธ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ํŠน๋ณ„ํ•œ ์š”์ธ์— ์˜ํ•œ ์ข…๋ฃŒ ํ˜น์€ ๋กœ๊ทธ์•„์›ƒ์ด ๋œ๊ฒƒ์ด ์•„๋‹ˆ๋ฉด ์„ธ์…˜์€ ๊ณ„์† ์„œ๋ฒ„์— ๋‚จ์•„์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ ๊ฐ’์— ๋Œ€ํ•œ ํ‚ค ๊ฐ’(ID)์€ ํด๋ผ์ด์–ธํŠธ์— ๋‚จ๊ฒจ์ ธ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ์ผ๋ฐ˜์ ์œผ๋กœ ์„ธ์…˜์˜ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ํ•ด๋‹น ์„ธ์…˜์€ ์‚ฌ์šฉ์ด ๋˜์ง€ ์•Š๊ณ  ์ดˆ๊ธฐ์— ์„ค์ •ํ•œ ์„ธ์…˜์˜ ๋งŒ๋ฃŒ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋˜๊ฑฐ๋‚˜ ์ฃผ๊ธฐ์ ์œผ๋กœ ์„ธ์…˜์„ ์ง์ ‘ ์ •๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

More Infos

  • ๐Ÿช Cookie
    ์›น ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•  ๋•Œ ์„œ๋ฒ„์— ์˜ํ•ด ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ์— ์ €์žฅ๋˜๋Š” ์ •๋ณด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ์›น์€ ํ•„์š”ํ•  ๋•Œ ๋งˆ๋‹ค ์žฌ์‚ฌ์šฉ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    ์œ„ ์ฒ˜๋Ÿผ ์ฒ˜์Œ ์ ‘์†ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญ์„ ํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ™์ด ๋ณด๋ƒ…๋‹ˆ๋‹ค.

    ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ธด ์ฟ ํ‚ค์— ์˜ํ•ด์„œ stateless์„ ํ•ด๊ฒฐํ•˜๊ณ  ๋น ๋ฅธ ์‘๋‹ต์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ์ดํ„ฐํŒŒ์ผ๋กœ์จ ์ƒ๊ฒจ ํ‚ค๊ณผ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋ชจ๋‘ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋‹ˆํ•‘์˜ ์œ„ํ—˜์— ๋…ธ์ถœ์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜์ด ์ด๋Ÿฌํ•œ ๋ณด์•ˆ์  ์•ฝ์ ์„ ๋ณด์™„ํ•˜์—ฌ ์ค€๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ–ฅ๏ธ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. & ํŠธ๋žœ์žญ์…˜์˜ ์„ฑ์งˆ ACID์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Transaction์€ ์ž‘์—…์˜ ์™„์ „์„ฑ์„ ๋ณด์žฅํ•ด ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ์…‹์„ ๋ชจ๋‘ ์™„๋ฒฝํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ์—๋Š” ์›๋ž˜์˜ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•˜์—ฌ ์ž‘์—…์˜ ์ผ๋ถ€๋งŒ ์ ์šฉ์ด ๋˜๋Š” Partial update ํ˜„์ƒ์„ ๋ง‰์•„์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

  • ๐Ÿ”Ž Transaction vs Lock
    ์„œ๋กœ ๋น„์Šทํ•œ ๊ฐœ๋… ๊ฐ™์ง€๋งŒ Lock์€ ์˜ˆ๋ฅผ๋“ค์–ด ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ์ปค๋„ฅ์…˜์—์„œ ๋™์‹œ์— ๋ณ€๊ฒฝํ•˜๋ ค๊ณ ํ•  ๋•Œ Lock์ด ์—†๋‹ค๋ฉด ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ์ด ๋ ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ํ•œ ์‹œ์ ์— ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ์จ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์—์„œ ํ•˜๋‚˜์˜ ํ˜น์€ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜ ๊ฐ„์˜ ์ž‘์—… ๋‚ด์šฉ์„ ์–ด๋–ป๊ฒŒ ๊ณต์œ ํ•˜๊ณ  ์ฐจ๋‹จํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ ˆ๋ฒจ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค.

๐Ÿ”Ž More infos about Transaction

: ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ์…‹์„ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฟผ๋ฆฌ๊ฐ€ COMMIT์„ ์‹คํ–‰ ํ–ˆ์„๋•Œ ์ž‘์—… ์…‹ ์ž์ฒด๊ฐ€ ์˜จ์ „ํžˆ ์ ์šฉ๋˜๊ฑฐ๋‚˜ ์•„๋ฌด๊ฒƒ๋„ ์ ์šฉ๋˜์ง€ ์•Š์•„์•ผํ•จ์„ ์ฆ‰, Partial update ํ˜„์ƒ์„ ๋ง‰์•„์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. DB์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ผ๋ จ์˜ ์—ฐ์‚ฐ๋“ค์„ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋ฌถ์–ด์„œ ์›์ž์„ฑ, ์ผ๊ด€์„ฑ, ๋…๋ฆฝ์„ฑ, ์ง€์†์„ฑ์˜ ACID์˜ ์„ฑ์งˆ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

1. ์›์ž์„ฑ(Atomicity) : ํŠธ๋žœ์žญ์…˜์€ ์›์ž์ ์ด์–ด์•ผ ํ•˜๋ฉฐ, ๋ชจ๋“  ์—ฐ์‚ฐ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ์‹คํŒจํ•  ๊ฒฝ์šฐ ์ด์ „ ์ƒํƒœ๋กœ ๋กค๋ฐฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์„ ์„ค๋ช…ํ• ๋•Œ์˜ ์›์ž์„ฑ์ด๋ผ๊ณ  ํ•จ์€ ์ง„ํ–‰๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์—ฐ์‚ฐ์ด ์ข…๋ฃŒ๊ฐ€ ๋˜์—ˆ์„ ๊ฒฝ์šฐ์— ์ค‘๊ฐ„์— ์–ด๋– ํ•œ ์—ฐ์‚ฐ๋„ ๋‚จ์•„์žˆ์ง€ ์•Š๊ณ  ์„ฑ๊ณตํ•œ ๊ฒฐ๊ณผ๋“ค๊นŒ์ง€ ๋ชจ์กฐ๋ฆฌ ๋กค๋ฐฑ ๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค!

2. ์ผ๊ด€์„ฑ(Consistency) : ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋œ ํ›„์—๋„ DB๋Š” ์ผ๊ด€๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์—ฌ์•ผํ•œ๋‹ค.

๐Ÿ’ก ์˜ˆ๋ฅผ๋“ค์–ด ์Œ๋ฃŒ๋ฅผ ์ฃผ๋ฌธํ•˜๋Š” ์ฃผ๋ฌธ ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰๋œ ํ›„์— ์ œํ’ˆ์˜ ์ˆ˜๋Ÿ‰์ด ์Œ์ˆ˜๋กœ ๊ฐ€์„œ๋Š” ์•ˆ๋œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์Œ๋ฃŒ์˜ ์žฌ๊ณ ๊ฐ€ 10๊ฐœ์ธ๋ฐ 15๊ฐœ๋ฅผ ์ฃผ๋ฌธ์„ ์‹œ๋„ํ•  ๊ฒฝ์šฐ์— ๊ฑฐ๋ถ€๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

3. ๋…๋ฆฝ์„ฑ(Isolation) : ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์—ฐ์‚ฐ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ๋™์‹œ ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ• ๋•Œ ๋™์‹œ์— ์‹คํ–‰์ด ๋˜์—ˆ๋‹ค๊ณ  ํ•ด๋„ ๊ฐ ํŠธ๋žœ์žญ์…˜์€ ์„œ๋กœ์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4. ์ง€์†์„ฑ(Durability) : ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋œ ํ›„์—๋Š” ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์‹œ์Šคํ…œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํŽธ์˜์ ์—์„œ ์•Œ๋ฐ”๊ฐ€ ์ฃผ๋ฌธ์„ ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์ฃผ๋ฌธ์„ ์™„๋ฃŒํ•œ ์‹œ์ ์—์„œ ์ปดํ“จํ„ฐ์˜ ์˜ค๋ฅ˜๋กœ ์žฌ๋ถ€ํŒ…์ด ๋˜์—ˆ์„๋•Œ ์™„๋ฃŒ๋œ ์ฃผ๋ฌธ์— ํ•œ์—์„œ๋Š” ๊ด€๋ จ ์ฃผ๋ฌธ ์ •๋ณด๊ฐ€ DB์— ๋‚จ์•„ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค์–‘ํ•œ ์žฅํ•ด ์ƒํ™ฉ์—์„œ๋„ ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฐ๊ณผ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ๋ณด์กด๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Added examples

๊ฒŒ์‹œํŒ์— ๊ธ€์„ ์ €์žฅํ•˜๋Š” ์˜ˆ์‹œ

1) ์ฒ˜๋ฆฌ ์‹œ์ž‘
โ–บ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ์ƒ์„ฑ
โ–บ ํŠธ๋žœ์ ์…˜ ์‹œ์ž‘
2) ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ํ™•์ธ
3) ์‚ฌ์šฉ์ž์˜ ๊ธ€์“ฐ๊ธฐ ๋‚ด์šฉ์˜ ์˜ค๋ฅ˜ ์—ฌ๋ถ€ ํ™•์ธ
4) ์ฒจ๋ถ€๋กœ ์—…๋กœ๋“œ๋œ ํŒŒ์ผ ํ™•์ธ ๋ฐ ์ €์žฅ
5) ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๋‚ด์šฉ์„ DBMS์— ์ €์žฅ
6) ์ฒจ๋ถ€ ํŒŒ์ผ ์ •๋ณด๋ฅผ DBMS์— ์ €์žฅ
7) ์ €์žฅ๋œ ๋‚ด์šฉ ๋˜๋Š” ๊ธฐํƒ€ ์ •๋ณด๋ฅผ DBMS์—์„œ ์กฐํšŒ
8) ๊ฒŒ์‹œ๋ฌผ ๋“ฑ๋ก์— ๋Œ€ํ•œ ์•Œ๋ฆผ ๋ฉ”์ผ ๋ฐœ์†ก ๐Ÿšจ
9) ์•Œ๋ฆผ ๋ฉ”์ผ ๋ฐœ์†ก ์ด๋ ฅ์„ DBMS์— ์ €์žฅ
โ–บ ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ(COMMIT)
โ–บ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ๋ฐ˜๋‚ฉ
10) ์ฒ˜๋ฆฌ ์™„๋ฃŒ

์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” 3๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์‹ค์ œ๋กœ DB Connection์„ 1๋ฒˆ๊ณผ 2๋ฒˆ์— ๋งŽ์ด ๊ตฌํ˜„ํ•˜๋ฉฐ ํŠธ๋žœ์žญ์…˜์„ ๊ฐ™์ด ์‹œ์ž‘ํ•˜์ง€๋งŒ(START TRANSACTION) ์ปค๋„ฅ์…˜์€ ์†Œ์œ ํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ์ˆ˜๋ก ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฌ์œ  ์ปค๋„ฅ์…˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ 2,3๋ฒˆ์„ ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ ์‹œํ‚ฌ ํ•„์š”๊ฐ€ ์—†๋‹ค.
  2. 8๋ฒˆ์—์„œ ๋ฉ”์ผ ์ „์†ก์ด๋‚˜ FTP ํŒŒ์ผ ์ „์†ก ์ž‘์—… ๋˜๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์›๊ฒฉ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋“ฑ๊ณผ ๊ฐ™์€ ์ž‘์—…์€ ์–ด๋–ป๊ฒŒ ํ•ด์„œ๋“  DBMS์˜ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋งŒ์•ฝ, ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ฉ”์ผ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์›น ์„œ๋ฒ„ ๋ฟ ์•„๋‹ˆ๋ผ DBMS ์„œ๋ฒ„๊นŒ์ง€ ์œ„ํ—˜ํ•ด์ง€๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ์œ„ ์ž‘์—…์€ ํฌ๊ฒŒ 4๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์ž‘์—…์ธ 5,6๋ฒˆ์€ ๊ฐ™์ด ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์–ด์•ผ ํ•˜๊ณ , 7๋ฒˆ ์ž‘์—…์€ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ๋‹จ์ˆœ ํ™•์ธ ๋ฐ ์กฐํšŒ์ด๋ฏ€๋กœ ํŠธ๋žœ์žญ์…˜์— ํฌํ•จํ•  ํ•„์š”๋Š” ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  9๋ฒˆ ์ž‘์—…์€ ์กฐ๊ธˆ ์„ฑ๊ฒฉ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ํŠธ๋žœ์žญ์…˜(5,6๋ฒˆ)์— ํ•จ๊ป˜ ๋ฌถ์ง€ ์•Š์•„๋„ ๋ฌด๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค.(์—…๋ฌด ์š”๊ฑด์— ๋”ฐ๋ผ ๋‹ฌ๋ผ ์งˆ ์ˆ˜ ์žˆ๋‹ค.)

๊ฒŒ์‹œํŒ์— ๊ธ€์„ ์ €์žฅํ•˜๋Š” ์˜ˆ์‹œ - ์žฌ์„ค๊ณ„
1) ์ฒ˜๋ฆฌ ์‹œ์ž‘
2) ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ํ™•์ธ
3) ์‚ฌ์šฉ์ž์˜ ๊ธ€์“ฐ๊ธฐ ๋‚ด์šฉ์˜ ์˜ค๋ฅ˜ ์—ฌ๋ถ€ ํ™•์ธ
4) ์ฒจ๋ถ€๋กœ ์—…๋กœ๋“œ๋œ ํŒŒ์ผ ํ™•์ธ ๋ฐ ์ €์žฅ
โ–บ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ์ƒ์„ฑ
5) ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๋‚ด์šฉ์„ DBMS์— ์ €์žฅ
6) ์ฒจ๋ถ€ ํŒŒ์ผ ์ •๋ณด๋ฅผ DBMS์— ์ €์žฅ
โ–บ ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ(COMMIT)
7) ์ €์žฅ๋œ ๋‚ด์šฉ ๋˜๋Š” ๊ธฐํƒ€ ์ •๋ณด๋ฅผ DBMS์—์„œ ์กฐํšŒ
8) ๊ฒŒ์‹œ๋ฌผ ๋“ฑ๋ก์— ๋Œ€ํ•œ ์•Œ๋ฆผ ๋ฉ”์ผ ๋ฐœ์†ก
โ–บ ํŠธ๋žœ์ ์…˜ ์‹œ์ž‘
9) ์•Œ๋ฆผ ๋ฉ”์ผ ๋ฐœ์†ก ์ด๋ ฅ์„ DBMS์— ์ €์žฅ
โ–บ ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ(COMMIT)
โ–บ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ๋ฐ˜๋‚ฉ
10) ์ฒ˜๋ฆฌ ์™„๋ฃŒ

๐Ÿ“ฎ Commit & Rollback & Auto Commit ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Commit

Commit ์—ฐ์‚ฐ์€ ๋ชจ๋“  ์ž‘์—…๋“ค์„ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒ ๋‹ค๊ณ  ํ™•์ •ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ์„œ, ์ฒ˜๋ฆฌ๊ณผ์ •์„ DB์— ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ Commit ์—ฐ์‚ฐ์ด ์‹œ์ž‘๋œ ์‹œ์ ์—์„œ Update๋ฌธ์„ ํ†ตํ•˜๋ฉด์„œ ์‚ญ์ œ์™€ ์žฌ ์‚ฝ์ž…์˜ ๊ณผ์ •์„ ์ œ๋Œ€๋กœ ๊ฑฐ์น˜๊ฒŒ ๋˜๋ฉด ์˜๊ตฌ์ €์žฅ์ด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Rollback

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

AutoCommit

์‚ฌ์šฉ์ž๊ฐ€ ๋”ฐ๋กœ Commit ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ๋ชจ๋“  ๋ช…๋ น๋“ค์ด Commit ๋˜์–ด ์ฆ‰์‹œ ๋ฐ˜์˜๋˜๋Š” ๋ช…๋ น์–ด ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ Laptop์—์„œ ์ด๊ฒƒ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”๋ฐ ์ด๊ฒƒ์„ ๋˜๋„๋ก์ด๋ฉด ํ•ด์ œํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์™œ๋ƒํ•˜๋ฉด 1,2,3 ์ด๋ผ๋Š” ์ž‘์—…์„ ํ•  ๋•Œ ์˜คํ† ์ปค๋ฐ‹์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ 1๋ฒˆ์„ ์ˆ˜ํ–‰ํ•˜์˜€์œผ๋‚˜ 2,3๋ฒˆ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค๋ฉด ๋‹ค์‹œ ์ „์ฒด์ ์ธ ์ž‘์—…์„ ์†๋ด์•ผํ•˜๋Š”๋ฐ ๋˜๋Œ๋ฆฌ์ง€ ๋ชปํ•ด๋ฒ„๋ฆฌ๋Š” ๋ถˆ์ƒ์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

show variables like `autocommit%`;

์œ„์˜ ๊ตฌ๋ฌธ์„ ์ž…๋ ฅํ–ˆ์„๋•Œ ON์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ์ง€๊ธˆ ํ™œ์„ฑํ™” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—

SET AUTOCOMMIT = TRUE;  --> ์„ค์ •
SET AUTOCOMMIT = FALSE; --> ํ•ด์ œ

์ด๋Ÿฌํ•œ Statement๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •์„ ๋ฐ”๊ฟ”์ค˜์•ผํ•œ๋‹ค.

ADVANTAGES OF COMMIT & ROLLBACK

  1. ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์ด ๋ณด์žฅ๋œ๋‹ค.
  2. ์˜๊ตฌ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ๋…ผ๋ฆฌ์ ์œผ๋กœ ์—ฐ๊ด€๋œ ์ž‘์—…์„ ๊ทธ๋ฃนํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ–ฅ๏ธ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋ญ˜๊นŒ์š”?

Transaction Isolation level ์€ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ฒ˜๋ฆฌ๋  ๋•Œ ํŠน์ • ํŠธ๋žœ์žญ์…˜์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ํฌ๊ฒŒ 4๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋’ค๋กœ ๊ฐ€๋ฉด์„œ ๋ฐ์ดํ„ฐ ๊ณ ๋ฆฝ ์ •๋„๊ฐ€ ๋†’์•„์ง€๋ฉฐ, ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ๋„ ๋–จ์–ด์ง€๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ค€์ด SERIALIZABLE์ด ์•„๋‹ˆ๋ผ๋ฉด ํฌ๊ฒŒ ๊ทธ์ „์—์„œ๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ READ UNCOMMITTIED์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    READ UNCOMIMMITTED ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์˜จ๋ผ์ธ ์„œ๋น„์Šค ์šฉ๋„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    ์œ„์˜ ์‚ฌ์ง„์€ READ UNCOMMITTED์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž B๊ฐ€ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž B๊ฐ€ emp_no = 500000์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž B๊ฐ€ ์‚ฌ์šฉ์ž A๊ฐ€ ์ปค๋ฐ‹์„ ํ•˜๊ธฐ๋„ ์ „ ์ƒํƒœ์—์„œ๋„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์‚ฌ์šฉ์ž A๊ฐ€ ์•Œ ์ˆ˜ ์—†๋Š” ์—๋กœ๋กœ ์ธํ•ด ๋กค๋ฐฑ์„ ํ•œ๋‹ค๊ณ  ํ•ด๋„ ์‚ฌ์šฉ์ž B๋Š” ์—ฌ์ „ํžˆ ์‚ฌ์šฉ์ž A์— ๋Œ€ํ•œ ํ…Œ์ด๋ธ”์„ ๋˜‘๊ฐ™์ด ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ์–ด๋–ค ํŠธ๋žœ์žญ์…˜์—์„œ ์ฒ˜๋ฆฌํ•œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜๋Š”๋ฐ๋„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ˜„์ƒ์„ Dirty Read๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋”ํ‹ฐ ๋ฆฌ๋“œ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด READ UNCOMMITTED์ž…๋‹ˆ๋‹ค. ์ด Isolation level์€ ์ •ํ•ฉ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ๋งŽ์€ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ READ COMMITTED์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    READ COMMITTED ๋Š” ์˜ค๋ผํด DBMS์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋ฉฐ, ์˜จ๋ผ์ธ ์„œ๋น„์Šค์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์„ ํƒ๋˜๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. ์ด ๋ ˆ๋ฒจ์—์„œ๋Š” Dirty Read๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํŠธ๋žœ์žญ์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋”๋ผ๋„ ์ปค๋ฐ‹์ด ์™„๋ฃŒ๋œ ๋ฐ์ดํ„ฐ๋งŒ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋–„๋ฌธ์ž…๋‹ˆ๋‹ค.

    ์œ„ ์‚ฌ์ง„์—์„œ๋Š” ์‚ฌ์šฉ์ž A๋Š” emp_no = 500000์ธ ์‚ฌ์›์˜ first_name์„ Toto๋กœ ๋ณ€๊ฒฝ ํ–ˆ๋Š”๋ฐ ์ด๋•Œ ์ƒˆ๋กœ์šด ๊ฐ’์ธ Toto๋Š” ์ฆ‰์‹œ ๊ธฐ๋ก์ด ๋˜๊ณ  ์ด์ „ ๊ฐ’์€ Undo ์˜์—ญ์œผ๋กœ ๋ฐฑ์—…๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปค๋ฐ‹์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž B๊ฐ€ SELECT๋ฅผ ํ•˜์—ฌ ์กฐํšŒ๋ฅผ ํ•  ๊ฒฝ์šฐ Undo ์˜์—ญ์—์„œ ์ด์ „ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์™€ ํ‘œ์‹œํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ์ˆ˜์ค€์—์„œ NON_REPEATABLE READ๋ผ๋Š” ๋ถ€์ •ํ•ฉ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์‚ฌ์šฉ์ž A๊ฐ€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ปค๋ฐ‹์„ ํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž B๊ฐ€ ๊ฒ€์ƒ‰์„ ํ•˜๋ฉด ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ปค๋ฐ‹์„ ํ•˜๊ธฐ ์ „ ํ›„์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋žœ์žญ์…˜์˜ ์ •ํ•ฉ์„ฑ์— ์–ด๊ธ‹๋‚œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ REPEATABLE READ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    REPEATABLE READ๋Š” MySQL์˜ INNODB ์—”์ง„์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ REPEATABLE READ๋Š” MVCC(Multi Version Concurrency Control)์„ ์œ„ํ•ด ์–ธ๋‘ ์˜์—ญ์— ๋ฐฑ์—…๋œ ์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ผ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. READ COMMITTED๋„ MVCC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ COMMIT๋˜๊ธฐ ์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ์ง€๋งŒ, ์–ธ๋‘ ์˜์—ญ์— ๋ฐฑ์—…๋œ ๋ ˆ์ฝ”๋“œ์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „ ๊ฐ€์šด๋ฐ ๋ช‡ ๋ฒˆ์งธ ์ด์ „ ๋ฒ„์ „๊นŒ์ง€ ์ฐพ์•„ ๋“ค์–ด๊ฐ€๋Š๋ƒ์—์„œ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ๊ฐ€์ง„ MySQL ์„œ๋ฒ„์—์„œ๋Š” ์ตœ์†Œ REPEATABLE READ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์ด์ƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ๋Š” READ COMMITTED Isolation level์—์„œ ๋ฐœ์ƒํ•˜๋Š” NON-REPEATABLE READ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐ŸšจMore infos

๋ชจ๋“  InnoDB์˜ ํŠธ๋žœ์žญ์…˜์€ ๊ณ ์œ ํ•œ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์–ธ๋‘ ์˜์—ญ์— ๋ฐฑ์—…๋œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์—๋Š” ๋ณ€๊ฒฝ์„ ๋ฐœ์ƒ์‹œํ‚จ ํŠธ๋žœ์žญ์…˜์˜ ๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด๋Ÿฌํ•œ ๋ฐฑ์—… ๋ฐ์ดํ„ฐ๋ฅผ InnoDB ์—”์ง„ ์ž์ฒด์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•จ์„ ๋Š๋ผ๋ฉด ์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ญ์ œ๋˜๋ฉฐ ํ˜„์žฌ์˜ REPEATABLE READ ์ˆ˜์ค€์—์„œ๋Š” MVCC๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‹คํ–‰ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜ ๊ฐ€์šด๋ฐ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ํŠธ๋žœ์žญ์…˜ ๋ฒˆํ˜ธ๋ณด๋‹ค ์•ž์„  ์–ธ๋‘ ์˜์—ญ์˜ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์œ„ ์‚ฌ์ง„์„ ๋ณด๋ฉด ์‚ฌ์šฉ์ž A์˜ TRX_ID = 12์ด๊ณ  ์‚ฌ์šฉ์ž B์˜ TRX_ID = 10์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ž๊ธฐ ๋ณด๋‹ค ์•„๋ž˜์ธ ํŠธ๋žœ์žญ์…˜์˜ ์ฟผ๋ฆฌ๋งŒ์„ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ์ƒํ™ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž B๋Š” ๊ณ„์†ํ•ด์„œ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์œ„์—์„œ ๋ฐฐ์šด ๊ฒƒ ์ฒ˜๋Ÿผ ์œ„ ์‚ฌ์ง„์˜ ๊ฒฝ์šฐ๋ฅผ ๋”ฐ๋ž์„๋•Œ, ์‚ฌ์šฉ์ž B๊ฐ€ ๋ณด๋Š” ํ…Œ์ด๋ธ”์—๋Š” ์ฒ˜๋Ÿผ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผํ•˜๋Š”๋ฐ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ˆ˜ํ–‰ํ•œ ๋ณ€๊ฒฝ ์ž‘์—…์— ์˜ํ•ด ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ณด์˜€๋‹ค ์•ˆ ๋ณด์˜€๋‹ค ํ•˜๋Š” ํ˜„์ƒ์„ PHANTOM READ / PHANTOM ROW๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. SELECT ~ UPDATE๋Š” ์–ธ๋‘ ์˜์—ญ์˜ ์“ฐ๊ธฐ ์ž ๊ธˆ์„ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— SHARE MODE๋กœ ์กฐํšŒ๋˜๋Š” ๋ ˆ์ฝ”๋“œ๋Š” ํ˜„์žฌ์˜ ๋ ˆ์ฝ”๋“œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ SERIALIZABLE์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
    ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋ฉฐ ๋™์‹œ์— ๊ฐ€์žฅ ์—„๊ฒฉํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์œผ๋กœ InnoDB table์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆœ์ˆ˜ํ•œ SELECT ์ž‘์—…(INSERT ~~ SELECT, CREATE TABLE ~~ AS SELECT ~~ ๊ฐ€ ์•„๋‹Œ)์€ ์•„๋ฌด๋Ÿฐ ๋ ˆ์ฝ”๋“œ ์ž ๊ธˆ๋„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ์ˆ˜์ค€์ด SERIALIZABLE๋กœ ์„ค์ •๋˜๊ฒŒ ๋˜๋ฉด ์ฝ๊ธฐ ์ž‘์—…๋„ ๊ณต์œ  ์ž ๊ธˆ(์ฝ๊ธฐ ์ž ๊ธˆ)์„ ํš๋“ํ•ด์•ผ๋งŒ ํ•˜๋ฉฐ ๋™์‹œ์— ๋‹ค๋ฅธ ใ…ŒํŠธ๋žœ์žญ์…˜์€ ๊ทธ๋Ÿฌํ•œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ๊ณ  ์“ฐ๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ๋Š” ์ ˆ๋Œ€ ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†์Œ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— PHANTOM READ ํ˜„์ƒ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก What is a MVCC(๋‹ค์ค‘ ๋™์‹œ์„ฑ ์ œ์–ด)?

์ผ๋ฐ˜์ ์œผ๋กœ ๋ ˆ์ฝ”๋“œ ๋ ˆ๋ฒจ์˜ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” DBMS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ฉฐ, MVCC์˜ ๊ฐ€์žฅ ํฐ ๋ชฉ์ ์€ ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ผ๊ด€๋œ ์ฝ๊ธฐ๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ InnoDB์—์„œ๋Š” Undo log๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ˜„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋”ฐ๋ผ InnoDB์˜ ๋ฒ„ํผ ํ’€์ด๋‚˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์žˆ๋Š” ๋‚ด์šฉ ๋Œ€์‹  ๋ณ€๊ฒฝ๋˜๊ธฐ ์ด์ „์˜ ๋‚ด์šฉ์„ ๋ณด๊ด€ํ•˜๊ณ  ์ž‡๋Š” ์–ธ๋‘ ์˜์—ญ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ• ์ง€๋ฅผ ์ •ํ•˜๋Š” DBMS์˜ ๊ณผ์ •์„ MVCC๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


DB ๋™์‹œ์„ฑ ์ œ์–ด์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Concurrency Control์ด๋ž€ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ์ž‘์—…์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋งˆ์น  ์ˆ˜ ์žˆ๋„๋ก ํŠธ๋žœ์žญ์…˜์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ œ์–ดํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋™์‹œ์„ฑ ์ œ์–ด์˜ ์ •์˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜๋Š” DBMS์—์„œ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜๋“ค์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ
  • ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜๋Š” DB์˜ ๊ฒฝ์šฐ ํ•„์ˆ˜์ ์œผ๋กœ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๋ณ‘ํ–‰์ œ์–ด ๊ธฐ๋Šฅ
  • ํŠธ๋žœ์žญ์…˜์˜ ์ง๋ ฌํ™” ์ˆ˜ํ–‰ ๋ณด์žฅ

์ด๋ ‡๊ฒŒ ์ง๋ ฌํ™”๋ฅผ ํ•˜์—ฌ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์‹คํ–‰์ด ๋˜๋Š”๊ฒƒ์„ ํ”ผํ•˜๊ณ  ๋ฐ๋“œ๋ฝ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ ํŠธ๋žœ์žญ์…˜์˜ ์ง๋ ฌ์„ฑ ๋ณด์žฅํ•˜๊ณ  ๊ณต์œ ๋„๋ฅผ ์ตœ๋Œ€๋กœ ์˜ฌ๋ฆฌ๊ณ  ์‘๋‹ต ์‹œ๊ฐ„์„ ์ตœ์†Œ๋กœ ํ•˜์—ฌ ์‹œ์Šคํ…œ ํ™œ๋™์„ ์ตœ๋Œ€๋กœ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ ๋ฐ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

โš ๏ธ more info & ๊ฐฑ์‹  ์†์‹ค ๋ฌธ์ œ.

  • ๋™์‹œ์„ฑ ์ œ์–ด์˜ ์ข…๋ฅ˜
  1. Locking : ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ์— lock์„ ์„ค์ •ํ•˜๋ฉด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด unlock์ด ๋ ๋•Œ ๊นŒ์ง€ ์ ‘๊ทผ/์ˆ˜์ •/์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํŠธ๋žœ์žญ์ƒŒ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด์—ฌ Mutual Exclusive ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  2. Timestamp : ์‹œ์Šคํ…œ์—์„œ ์ƒ์„ฑํ•˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ์ธ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ํŠธ๋žœ์žญ์…˜์— ๋ถ€์—ฌํ•จ์œผ๋กœ์จ ํŠธ๋žœ์žญ์…˜๊ฐ„์˜ ์ ‘๊ทผ ์ˆœ์„œ๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Validation : ๋จผ์ € ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•  ๋•Œ ์ ํ•ฉ์„ฑ์„ ๊ฒ€์ฆํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ตœ์ข… ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์˜ ๋ฌธ์ œ์ 
  1. Lost Update(๊ฐฑ์‹  ์†์‹ค) : ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ๊ฐฑ์‹ ํ•œ ๋‚ด์šฉ์„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ฎ์–ด์”€์œผ๋กœ์จ ๊ฐฑ์‹ ์ด ๋ฌดํšจํ™”๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐœ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๊ฐฑ์‹ ํ• ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. - READ UNCOMMITTED
  2. Dirty Read(ํ˜„ํ™ฉ ํŒŒ์•… ์˜ค๋ฅ˜) : ์ฝ๊ธฐ ์ž‘์—…์„ ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ 1์ด ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ ์ž‘์—…ํ•œ ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด๋กœ์ธํ•ด์„œ ํŠธ๋žœ์žญ์…˜ 1์˜ ์ž‘์—…์„ RollBackํ•˜๊ฒŒ ๋˜๊ณ  ๋ฌดํšจ๊ฐ€ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฒŒ ๋˜์–ด ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. - READ UNCOMMITTED
  3. Inconsistency(๋ชจ์ˆœ์„ฑ) : ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜๋“ค์ด ํ•ด๋‹น ํ•ญ๋ชฉ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋Š” ๋™์•ˆ ํ•œ ํŠธ๋žœ์žญ์…˜์ด ๋‘ ๊ฐœ์˜ ํ•ญ๋ชฉ ๊ฐ’ ์ค‘ ์–ด๋–ค ๊ฒƒ์€ ๊ฐฑ์‹ ๋˜๊ธฐ ์ „์˜ ๊ฐ’์„ ์ฝ๊ณ  ๋‹ค๋ฅธ ๊ฒƒ์€ ๊ฐฑ์‹ ๋œ ํ›„์˜ ๊ฐ’์„ ์ผ๊ฒŒ ๋˜์–ด ๋ฐ์ดํ„ฐ์˜ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. - READ COMMITTED
  4. Cascading Rollback(์—ฐ์‡„ ๋ณต๊ท€) : ๋‘ ํŠธ๋žœ์žญ์…˜์ด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๋‚ด์šฉ์„ ์ ‘๊ทผํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํ•œ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์‹ ํ•œ ๋‹ค์Œ ์ƒํŒจํ•˜์—ฌ Rollback ์—ฐ์‚ฐ์„ ์ˆ˜ํ–ฅํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฐฑ์‹ ๊ณผ RollBack ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์ด์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ์‚ฌ์šฉํ• ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์˜ˆ์‹œํ•ด๊ฒฐ ๋ฐฉ์•ˆ์ฃผ์˜ ์‚ฌํ•ญ
Lost UpdateREAD COMMITTED๋†’์ŒLocks ์‚ฌ์šฉ, OCC๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์ฃผ์˜
Dirty ReadREAD UNCOMMITTED๋†’์Œ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ๋†’์ด๊ธฐ๋ถˆํ•„์š”ํ•œ ๋ฝ ๋ฐœ์ƒ ์ฃผ์˜
InconsistencySERIALIZABLE๋†’์Œ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ๋†’์ด๊ธฐ์„ฑ๋Šฅ ์ €ํ•˜ ์ฃผ์˜
Cascading RollbackSERIALIZABLE๋†’์ŒNested Transactions ์‚ฌ์šฉ์„ฑ๋Šฅ ์ €ํ•˜ ์ฃผ์˜

๐Ÿคฅ OCC(Optimistic Concurrency Control) : ํŠธ๋žœ์žญ์…˜ 1์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์€ ํ›„, ๊ฐฑ์‹  ์‹œ์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ๋ฒ„์ „์„ ํ™•์ธํ•˜๊ณ , ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ด๋ฏธ ๊ฐฑ์‹ ํ•œ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๊ฐฑ์‹ ์„ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿคฅ Nested Transaction : ์ผ๋ถ€ DBMS์—์„œ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ, ์ค‘์ฒฉ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋ถ„์ ์ธ ๋กค๋ฐฑ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ „์ฒด ํŠธ๋žœ์žญ์…˜์„ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.


DB ๋ฝ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

MySQL์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ž ๊ธˆ์€ ํฌ๊ฒŒ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋ ˆ๋ฒจ๊ณผ MySQL ์—”์ง„ ๋ ˆ๋ฒจ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MySQL ์—”์ง„ ๋ ˆ๋ฒจ์˜ ์ž ๊ธˆ

MySQL ์—”์ง„ ๋ ˆ๋ฒจ์˜ ์ž ๊ธˆ์€ ๋ชจ๋“  ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€๋งŒ, ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋ ˆ๋ฒจ์˜ ์ž ๊ธˆ์€ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๊ฐ„ ์ƒํ˜ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. MySQL ๋ฝ์˜ ์ข…๋ฅ˜๋Š” ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ์ž ๊ทธ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฝ ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž์˜ ํ•„์š”์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„ค์ž„๋“œ ๋ฝ, ๋˜ํ•œ SELECT๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ DML, DDL ๋ฌธ์žฅ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์— ๊ธ€๋กœ๋ฒŒ ๋ฝ์ด ํ•ด์ œ ๋ ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ธ€๋กœ๋ฒŒ ๋ฝ ๊ธฐ๋Šฅ๋„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

InnoDB ์Šคํ† ๋ฆฌ์ง€ ๋ ˆ๋ฒจ์˜ ์ž ๊ธˆ

InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ MySQL์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž ๊ธˆ๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋‚ด๋ถ€์—์„œ ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ์ž ๊ธˆ ๋ฐฉ์‹์„ ํƒ‘์žฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž ๊ธˆ ๋ฐฉ์‹ ๋•Œ๋ฌธ์— MyISAM๋ณด๋‹ค๋Š” ํ›จ์”ฌ ๋›ฐ์–ด๋‚œ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ์˜ ๋ฝ์˜ ์ข…๋ฅ˜๋Š” ์ธ๋ฑ์Šค์˜ ๋ ˆ์ฝ”๋“œ ์ž์ฒด ๋งŒ์„ ์ž ๊ทธ๋Š” Record Lock ๊ทธ๋ฆฌ๊ณ  ๋ ˆ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ์•„๋‹Œ ๋ ˆ์ฝ”๋“œ์™€ ๋ฐ”๋กœ ์ธ์ ‘ํ•œ ๋ ˆ์ฝ”๋“œ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ๋งŒ์„ ์ž ๊ทธ๋Š” Gab Lock, ๋ ˆ์ฝ”๋“œ ๋ฝ๊ณผ ๊ฐญ ๋ฝ์„ ํ•ฉ์ณ ๋†“์€ ํ˜•ํƒœ์˜ ์ž ๊ธˆ์„ Nexy Key Lock์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ Auto_Increment Lock์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋™ ์ฆ์‚ฌ ๋ฝ์€ ํ…Œ์ด๋ธ” ์ˆ˜์ค€์˜ ์ž ๊ธˆ์„ ์ง„ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ” DB ๋ฐ๋“œ๋ฝ & DB ํšŒ๋ณต์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

DB DEAD-LOCK

๋‘ ๊ฐœ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ๊ฐ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•˜์—ฌ ๋ฝ์„ ํš๋“ํ•˜๊ณ  ์ƒ๋Œ€๋ฐฉ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•˜์—ฌ ๋ฝ์„ ์š”์ฒญํ•˜๋ฉด ๋ฌดํ•œ ๋Œ€๊ธฐ ์ƒํƒœ์— ๋น ์งˆ ์ˆ˜ ์žˆ๋Š” ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. (์„œ๋กœ ๋ฝ์„ ๊ฑธ์–ด์ฃผ๋‹ค๊ฐ€ ๋ฌดํ•œ ๋Œ€๊ธฐ์— ๋น ์ง€๋Š” ํ˜„์ƒ) ์ด๋•Œ, ๋ณดํ†ต DBMS๊ฐ€ ํŠธ๋žœ์žญ์…˜์˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋Š” ๊ฐ•์ œ๋กœ ์ค‘์ง€์‹œ์ผœ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์€ ์ •์ƒ ๋™์ž‘์„ ํ•˜๊ณ  ์ค‘์ง€๋œ ํŠธ๋žœ์žญ์…˜์€ ๋กค๋ฐฑ๋˜๊ฒŒ ๋” ๋งŒ๋“ญ๋‹ˆ๋‹ค.

DB RECOVERY

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

  • ๋คํ”„๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฒ•์œผ๋กœ ์ผ์ • ์ฃผ๊ธฐ๋กœ ์›๋ณธ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋‹ค๋ฅธ ์ €์žฅ์žฅ์น˜์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ๋Š” ๋ณ€๊ฒฝ ์ด์ „์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ€๊ฒฝ ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ• ๋•Œ ๋งˆ๋‹ค ๋กœ๊ทธ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์—ฌ ๊ธฐ๋กํ•˜๊ณ , ํšŒ๋ณตํ•  ๋•Œ ๋กœ๊ทธ์— ์ ํžŒ ๋‚ด์šฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋Š” ํŒŒ์ผ์„ ๋กœ๊ทธ ํŒŒ์ผ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (START, INSERT, UPDATE, DELETE, ABORT, COMMIT ๋“ฑ์˜ ํŠธ๋žœ์žญ์…˜ ์—ฐ์‚ฐ ํƒ€์ž…)

โ†บREDO, โ†ปUNDO์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

DBMS๋Š” ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ˜น์€ ์ค‘๋‹จ ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜์—ฌ ์ข…๋ฃŒ๋œ ๊ฒฝ์šฐ์—๋Š” ์ข…๋ฃŒ๋ฅผ ํ™•์ •ํ•˜๊ธฐ ์œ„ํ•ด REDO(์žฌ์‹คํ–‰)์„ ํ•˜๊ณ  ์ค‘๋‹จ๋œ ๊ฒฝ์šฐ์—๋Š” ์—†๋˜ ์ผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด UNDO(์ทจ์†Œ)๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • REDO ๋Š” ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„ ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ๊ฐ€๋™ ํ–ˆ์„ ๋•Œ, ๋กœ๊ทธ ํŒŒ์ผ์— ํŠธ๋žœ์žญ์…˜์˜ ์‹œ์ž‘์ด ์žˆ๊ณ  ์ข…๋ฃŒ(COMMIT)์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด์„œ ํŠธ๋žœ์žญ์…˜์ด ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์„ ๋‹ค์‹œ ๊ธฐ๋กํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ฆ‰, log ํŒŒ์ผ์— ๊ธฐ๋ก๋œ ํŠธ๋žœ์žญ์…˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋‹ค์‹œ ์ ์šฉ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žฅ์•  ๋“ฑ์œผ๋กœ ์ธํ•ด ์†์ƒ์ด ๋œ ๊ฒฝ์šฐ ๋ณต๊ตฌ ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
  • UNDO ๋Š” ์žฅ์•  ๋ฐœ์ƒ ํ›„ ์‹œ์Šคํ…œ์„ ์žฌ๊ฐ€๋™ ํ–ˆ์„ ๋•Œ, ๋กœ๊ทธ ํŒŒ์ผ์— ํŠธ๋žœ์žญ์…˜์˜ ์‹œ์ž‘๋งŒ ์žˆ๊ณ  COMMIT์ด ์—†๋Š” ๊ฒฝ์šฐ ์™„๋ฃŒํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๋ฒ„ํผ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ธฐ๋ก๋˜์–ด ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด์„œ ํŠธ๋žœ์žญ์…˜์ด ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์„ ์›์ƒ๋ณต๊ตฌ ์‹œํ‚ค๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.(ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘์„ ํ•˜๋ฉด ๋ณ€๊ฒฝ์—ฐ์‚ฐ์— ๋Œ€ํ•ด์„œ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜์„ ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ค‘๊ฐ„๊นŒ์ง€ ๋ถ€๋ถ„์—ฐ์‚ฐ์„ ์™„๋ฃŒํ•˜๋ฉด ์‹ค์ œ DB์— ๋ฐ˜์˜์„ ์‹œํ‚ต๋‹ˆ๋‹ค. ์ด๋Ÿด ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด๊ณ  UNDO๋ฅผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.) ์ฆ‰, ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋ก๋œ ํŠธ๋žœ์žญ์…˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ทจ์†Œํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์ด ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ๋กค๋ฐฑ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ด์ „ ์ƒํƒœ๋กœ ๋กค๋ฐฑํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฒดํฌํฌ์ธํŠธ ํšŒ๋ณต ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ฒดํฌํฌ์ธํŠธ ํšŒ๋ณต ๊ธฐ๋ฒ•์ด๋ž€ ๋กœ๊ทธ๋Š” ๊ทธ๋Œ€๋กœ ๊ธฐ๋ก์„ ์œ ์ง€ํ•˜๋ฉด์„œ, ํšŒ๋ณต๊ด€๋ฆฌ์ž๊ฐ€ ์ •ํ•˜๋Š” ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ๊ฒ€์‚ฌ ์‹œ์ ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšŒ๋ณต ์‹œ ๋งŽ์€ ์–‘์˜ ๋กœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ฐฑ์‹ ํ•˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ๊ธฐ๋ฒ•์„ ๋” ๋‹จ์ˆœํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MySQL InnoDB์˜ ๊ธฐ๋ณธ ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฆฝ ์ˆ˜์ค€์€ ๋ญ˜๊นŒ์š”?

InnoDB์˜ ๊ธฐ๋ณธ ๊ณ ๋ฆฝ ์ˆ˜์ค€์€ REPEATABLE READ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ๋Š” ๋™์ธํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ•ดํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. InnoDB์˜ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ํŠธ๋žœ์žญ์…˜์ด ๋กค๋ฐฑ ๋  ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€๊ฒฝ ๋˜์ง€ ์ „ ๋ ˆ์ฝ”๋“œ๋ฅผ ์–ธ๋‘ ๊ณต๊ฐ„์— ๋ฐฑ์—…ํ•ด๋‘๊ณ  ์‹ค์ œ ๋ ˆ์ฝ”๋“œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•์„ MVCC๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

References
1. DB Session
2. Session & Cookie
3. Definitions of Commit & Rollback
4. AutoCommit
5. ๋™์‹œ์„ฑ ์ œ์–ด
6. DB์˜ ์ „๋ฐ˜์ ์ธ ์ดํ•ด
7. Checkpoint DB Recovery

profile
๋ฐฑ์—”๋“œ ํ™”์ดํŒ… :)

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