Transaction

  • ํŠธ๋žœ์žญ์…˜(Transaction): DBMS๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃฐ ๋•Œ, ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…(ํ”„๋กœ๊ทธ๋žจ) ๋‹จ์œ„.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ACID(์›์ž์„ฑ, ์ผ๊ด€์„ฑ, ๊ณ ๋ฆฝ์„ฑ, ์ง€์†์„ฑ) ์„ฑ์งˆ์„ ๊ฐ€์ง„๋‹ค.

  • DBMS๋Š” ์ด ์„ฑ์งˆ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค.

01. ํŠธ๋žœ์žญ์…˜

01) ๊ฐœ๋…

  • ํŠธ๋žœ์žญ์…˜์ด๋ž€, DBMS์—์„œ ๋‹ค๋ฃจ๋Š” ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—…์˜ ๋‹จ์œ„์ด๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์ •์˜ํ•˜๋Š” ์ด์œ 

    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ๋•Œ ์žฅ์• ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„๊ฐ€ ๋œ๋‹ค.

    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์ด ๋™์‹œ์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ, ์ด ์ž‘์—…์„ ์„œ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋‹จ์œ„๊ฐ€ ๋œ๋‹ค.

  • ํŠธ๋ Œ์žญ์…˜์€ ์ „์ฒด๊ฐ€ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜, ๋˜๋Š” ์ „ํ˜€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. (all or nothing)

  • ์˜ˆ์‹œ

    START TRANSACTION 
        update customer set value = value -1000 where name like '๋ฏธ๋‹ˆ'; --1๋ฒˆ SQL
        update customer set value = value -2000 where name like 'ํ˜€๋‹ˆ'; --2๋ฒˆ SQL
    commit
    • transaction์„ ์‹œ์ž‘ํ•˜๋ฉด, ๋””์Šคํฌ์— ์ €์žฅ๋œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€ ์ฃผ๊ธฐ์–ต์žฅ์น˜(๋ฉ”๋ชจ๋ฆฌ) ๋ฒ„ํผ ์˜์—ญ์— ์˜ฌ๋ ค๋‘”๋‹ค.

    • ๋ฒ„ํผ ์˜์—ญ์—์„œ 1,2๋ฒˆ SQL๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ €์žฅ.

    • DBMS๊ฐ€ ์ฑ…์ž„์ง€๊ณ  ๋ฒ„ํผ์—์„œ ๋””์Šคํฌ์˜์—ญ์— ์ €์žฅ์„ํ•œ๋‹ค.

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

02) ACID

  • ์›์ž์„ฑ(Atomicity): ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ๋œ ์ž‘์—…์€ ์ „๋ถ€ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜, ์•„๋‹ˆ๋ฉด ์ „๋ถ€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค. (all or nothing)

  • ์ผ๊ด€์„ฑ(Consistency): ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „, ํ›„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ•ญ์ƒ ์ผ๊ด€๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค.

  • ๊ณ ๋ฆฝ์„ฑ(Isolation): ์ˆ˜ํ–‰์ค‘์ธ ํŠธ๋žœ์žญ์…˜์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ผ์–ด๋“ค์–ด ๋ณ€๊ฒฝ ์ค‘์ธ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ํ›ผ์†ํ•˜๋Š” ์ผ์ด ์—†์–ด์•ผํ•œ๋‹ค.

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

์›์ž์„ฑ

  • ํŠธ๋žœ์žญ์…˜์ด ์›์ž์ฒ˜๋Ÿผ ๋”์ด์ƒ ์ชผ๊ฐœ์ง€์ง€ ์•Š๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ ๋‹จ์œ„๋กœ ๋™์ž‘ํ•ด์•ผํ•œ๋‹ค๋Š” ์˜๋ฏธ.

  • ์ฆ‰, ์ผ๋ถ€๋งŒ ์ˆ˜ํ–‰๋˜๋Š” ์ผ์ด ์—†๋„๋ก ์ „๋ถ€ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์•„์˜ˆ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

  • Transaction control language (TCL)

    ํ‘œ์ค€๋ช…๋ น์–ด

    ๋ฌธ๋ฒ•

    ์„ค๋ช…

    START TRANSACTION

    START TRANSACTION

    ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘

    COMMIT

    COMMIT

    ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ

    ROLLBACK

    ROLLBACK {TO }

    ํŠธ๋žœ์ ์…˜์„ ์ „์ฒด ํ˜น์€ ๊นŒ์ง€ ๋ฌดํšจํ™”

    SAVE

    SAVEPOINT

    ๋ฅผ ๋งŒ๋“ฌ

  • ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘๊ณผ ๋

    • ์‹œ์ž‘์„ ํ• ๋ฆฌ๋Š” ํ‘œ์ค€ ๋ช…๋ น์–ด: START TRANSACTION

      • MySQL์—์„œ๋Š”

        • SET TRANSACTION NAME <์ด๋ฆ„>

        • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” SQL๋ฌธ์ด ๋‚˜์˜ค๋ฉด ์ž๋™์œผ๋กœ ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋จ.

    • ์ข…๋ฃŒ

      • COMMIT ํ˜น์€ ROLLBACK

      • DDL (CREATE. ALTER. DROP. RENAME. TRUNCATE...) ๋งŒ๋‚˜๋ฉด ์ž๋™์ข…๋ฃŒ

์ผ๊ด€์„ฑ

  • ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰ ์ „๊ณผ ํ›„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ•ญ์ƒ ์ผ๊ด€๋œ ์ƒํƒœ์—ฌ์•ผํ•œ๋‹ค.

  • ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ, CREATE ๋ฌธ๊ณผ ALTER๋ฌธ์˜ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์„ ํ†ตํ•ด ๋ช…์‹œ๋œ๋‹ค.

๊ณ ๋ฆฝ์„ฑ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ณต์œ ๊ฐ€ ๋ชฉ์ ์ด๋ฏ€๋กœ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ ์ˆ˜ํ–‰๋œ๋‹ค.

  • ์ด ๋•Œ, ๊ฐ ํŠธ๋žœ์žญ์…˜์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ๋ฐฉํ•ด๋ฐ›์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋  ๋•Œ, ์ƒํ˜ธ๊ฐ„์„ญ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ํ˜„์ƒ.

  • ๋ณ€๊ฒฝ์ค‘์ธ ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋ คํ•  ๋•Œ ์ œ์–ดํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

  • ์œ„ ๊ทธ๋Ÿผ์ฒ˜๋Ÿผ, t1 ์‹œ๊ฐ„์— ํŠธ๋žœ์žญ์…˜ 2, 3์ด ๋™์‹œ ์ ‘๊ทผํ•œ ํ…Œ์ด๋ธ” B์˜ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ํ›ผ์†ํ•˜์ง€ ์•Š๋„๋ก ์ œ์–ดํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋ฉฐ, ์ด ์ž‘์—…์„ ๋™์‹œ์„ฑ์ œ์–ด(concurrency control)์ด๋ผ๊ณ ํ•œ๋‹ค.

  • ๋™์‹œ์„ฑ ์ œ์–ด๋ณด๋‹ค ์™„ํ™”๋œ ๋ฐฉ๋ฒ•์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฆฝ ์ˆ˜์ค€์— ๋”ฐ๋ผ ์ƒํ˜ธ๊ฐ„์„ญ์„ ์™„ํ™”์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

์ง€์†์„ฑ

  • ํŠธ๋žœ์žญ์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ ํ˜น์€ ๋ถ€๋ถ„ ์™„๋ฃŒํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ธฐ๋ก๋˜์–ด์•ผํ•œ๋‹ค.

  • DBMS ๋ณต๊ตฌ ์‹œ์Šคํ…œ์€ ํŠธ๋žœ์žญ์…˜์ด ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ์ˆ˜์‹œ๋กœ log ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ธฐ๋กํ–ˆ๋‹ค๊ฐ€, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋กœ๊ทธํŒŒ์ผ์„ ์ด์šฉํ•ด์„œ ๋ณต๊ตฌ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์‹œ์Šคํ…œ์ด ๋ฉˆ์ถ”๋”๋ผ๋„ ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์€ ๋””์Šคํฌ์— ๊ธฐ๋ก๋œ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ์ƒํƒœ๋„

    • DBMS๋Š” ๋ถ€๋ถ„์™„๋ฃŒ ์ƒํƒœ์—์„œ ์ž‘์—… ๋‚ด์šฉ(๋ฒ„ํผ ๋‚ด์šฉ)์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•˜๊ณ 

    • ์‹คํŒจ์ƒํƒœ์—์„œ๋Š” ์ž‘์—… ๋‚ด์šฉ์„ ์ทจ์†Œํ•œ๋‹ค.

03) ํŠธ๋žœ์žญ์…˜๊ณผ DBMS

  • DBMS๋Š” ํŠธ๋žœ์žญ์…˜์ด ACID๋ฅผ ์œ ์ง€ํ• ์ˆ˜์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค.

    • ์›์ž์„ฑ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด

      • ํšŒ๋ณต(๋ณต๊ตฌ) ๊ด€๋ฆฌ์ž ํ”„๋กœ๊ทธ๋žจ ์ž‘๋™.

      • DB๊ฐ€ ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์„ ๋กœ๊ทธ๋กœ ๊ธฐ๋กํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, ํŠธ๋žœ์žญ์…˜์— ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.

    • ์ผ๊ด€์„ฑ ์œ ์ง€ ์œ„ํ•ด

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

      • ๋‘๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋  ๋•Œ ํŠธ๋žœ์žญ์…˜๊ฐ„์˜ ๊ฐ„์„ญ์œผ๋กœ ์ผ๊ด€์„ฑ์ด ๊นจ์ง€๋Š” ํ˜„์ƒ์€ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์œผ๋กœ ํ•ด๊ฒฐ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , ์งˆ์„œ์žˆ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก '๋™์‹œ์„ฑ ์ œ์–ด(Locking) ์•Œ๊ณ ๋ฆฌ์ฆ˜'์„ ์ž‘๋™์‹œ์ผœ์•ผํ•œ๋‹ค.

    • ๊ณ ๋ฆฝ์„ฑ ์œ ์ง€ ์œ„ํ•ด

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

    • ์˜์†์„ฑ ์œ ์ง€ ์œ„ํ•ด

      • ํšŒ๋ณต ๊ด€๋ฆฌ์ž ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ํŠธ๋žœ์žญ์…˜์— ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ ๊ธฐ๋กํ•ด๋‘” ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๊ณ  ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.

02. ๋™์‹œ์„ฑ ์ œ์–ด

  • ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ ์ˆ˜ํ–‰๋  ๋•Œ, ์ผ๊ด€์„ฑ์„ ํ—ค์น˜์ง€ ์•Š๋„๋ก ํŠธ๋žœ์žญ์…˜์˜ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๋Š” DBMS์˜ ๊ธฐ๋Šฅ

  • ๋‘๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ํ•œ๊ฐœ์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค

    • ์ƒํ™ฉ

      ํŠธ๋žœ์žญ์…˜1

      ํŠธ๋žœ์žญ์…˜2

      ๋ฐœ์ƒ๋ฌธ์ œ

      ๋™์‹œ์ ‘๊ทผ

      ์ƒํ™ฉ1

      ์ฝ๊ธฐ

      ์ฝ๊ธฐ

      ๋ฌธ์ œ์—†์Œ

      ํ—ˆ์šฉ

      ์ƒํ™ฉ2

      ์ฝ๊ธฐ

      ์“ฐ๊ธฐ

      ์œ ๋ น๋ฐ์ดํ„ฐ ์ฝ๊ธฐ, ๋ฐ˜๋ณต ๋ถˆ๊ฐ€๋Šฅ ์ฝ๊ธฐ, ์˜ค์†์ฝ๊ธฐ

      ํ—ˆ์šฉ ํ˜น์€ ๋ถˆ๊ฐ€

      ์ƒํ™ฉ3

      ์“ฐ๊ธฐ

      ์“ฐ๊ธฐ

      ๊ฐฑ์‹ ์†์‹ค (์ ˆ๋Œ€ ํ—ˆ์šฉ X)

      ํ—ˆ์šฉ ๋ถˆ๊ฐ€ (LOCK)์‚ฌ์šฉ

01)๊ฐฑ์‹  ์†์‹ค (lost update)

  • ํ•œ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ๋‘ ํŠธ๋žœ์žญ์…˜์ด ๊ฐฑ์‹ (์“ฐ๊ธฐ, ์“ฐ๊ธฐ)ํ•  ๋•Œ ๋ฐœ์ƒ.

  • ์˜ˆ

    • ํŠธ๋žœ์žญ์…˜ T1, T2๊ฐ€ ์žˆ๊ณ  ๊ณ„์ขŒ X(1000์›๋ณด์œ ) ์—์„œ T1์€ 100์›์„ ์ธ์ถœํ•˜๊ณ , T2๋Š” 100์›์„ ์ž…๊ธˆํ•˜๋Š” ์ž‘์—…. ๊ทธ๋Ÿผ ๊ทธ ๊ฒฐ๊ณผ๋Š” 1000์ด ๋˜์–ด์•ผํ•˜๋Š”๋ฐ,

    • ๋‘๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์‹คํ–‰์ด ๋œ๋‹ค๋ฉด, buffer ์˜์—ญ์—์„œ

      T1์ด ์ธ์ถœํ•ด์„œ X๊ฐ€ 900์›์ด ๋œ ๊ฒƒ์„ disk์— ๊ฐฑ์‹ ์ด ํ•˜๊ธฐ ์ „์— T2๊ฐ€ ๋™์‹œ์— buffer ์˜์—ญ์—์„œ ์‹คํ–‰๋˜์–ด X๊ฐ€ 1100์›์ด ๋จ.

    • ๊ทธ๋ž˜์„œ T1์ด ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ disk์— ์ž…๋ ฅ๋œ ๋’ค, T2๊ฐ€ ๋‚ด์šฉ์„ ๋ฎ์–ด์„œ ๊ฒฐ๊ณผ๊ฐ€ 1100์ด ๋จ.

    • T1-> T2 ํ˜น์€ T2-> T1์ˆœ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋‚ด์šฉ์ด ๋ฎํžˆ๋Š”๊ฑด ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‘๋‹ต์†๋„๊ฐ€ ๋Š๋ ค์ง. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด '๋ฝ'์„ ์‚ฌ์šฉํ•จ

02) ๋ฝ(Lock)

  • ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ, ๋ฐ์ดํ„ฐ์— ํ‘œ์‹œํ•˜๋Š” ์ž ๊ธˆ ์žฅ์น˜์ด๋‹ค.

  • ๋ฝ์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ž ๊ทธ๋ฉด, ๋‹ค๋ฅธ ํŠธ๋žœ์ ์…˜์—์„œ ์ž ๊ธˆ์ด ํ’€๋ฆด ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•œ๋‹ค. (wait)

  • ๋ฝ์˜ ์œ ํ˜•

    • ์ฝ๊ธฐ๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ณต์œ ๋ฝ(LS, Shared Lock)

    • ์ฝ๊ณ  ์“ฐ๊ธฐ๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฐํƒ€๋ฝ(LX, Exclusive Lock)

    • ํŠธ๋žœ์žญ์…˜์ด LS, LX๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ทœ์น™

      • ๋ฐ์ดํ„ฐ์— ๋ฝ์ด ๊ฑธ๋ ค์žˆ์ง€ ์•Š์œผ๋ฉด ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ์— ๋ฝ์„ ๊ฑธ ์ˆ˜ ์žˆ๋‹ค.

      • ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ X๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•  ๊ฒฝ์šฐ LS(X)๋ฅผ ์š”์ฒญํ•˜๊ณ , ์ฝ๊ฑฐ๋‚˜ ์“ธ ๊ฒฝ์šฐ LX(X)๋ฅผ ์š”์ฒญํ•œ๋‹ค.

      • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ์— LS(X)๋ฅผ ๊ฑธ์–ด๋‘” ๊ฒฝ์šฐ, LS(X)์˜์š”์ฒญ์€ ํ—ˆ์šฉํ•˜๊ณ  LX(X)๋Š” ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

      • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ์— LX(X)๋ฅผ ๊ฑธ์–ด๋‘” ๊ฒฝ์šฐ, LS(X)์™€ LX(X) ๋ชจ๋‘ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

      • ํŠธ๋žœ์žญ์…˜์ด ๋ฝ์„ ํ—ˆ์šฉ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

  • 2๋‹จ๊ณ„ ๋ฝํ‚น

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

      • ํ™•์žฅ๋‹จ๊ณ„: ํŠธ๋žœ์žญ์…˜์ด ํ•„์š”ํ•œ ๋ฝ์„ ํš๋“ํ•˜๋Š” ๋‹จ๊ณ„. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์ด๋ฏธ ํš๋“ํ•œ ๋ฝ์„ ํ•ด์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.

      • ์ˆ˜์ถ•๋‹จ๊ณ„: ํŠธ๋žœ์žญ์…˜์ด ๋ฝ์„ ํ•ด์ œํ•˜๋Š” ๋‹จ๊ณ„๋กœ, ์ƒˆ๋กœ์šด ๋ฝ์„ ํš๋“ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋ฐ๋“œ๋ฝ

    • 2๊ฐœ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ๊ฐ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋ฝ์„ ํš๋“ํ•˜๊ณ , ์ƒ๋Œ€๋ฐฉ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•˜์—ฌ ๋ฝ์„ ์š”์ฒญํ•˜๋ฉด ๋ฌดํ•œ ๋Œ€๊ธฐ ์ƒํƒœ์— ๋น ์งˆ ์ˆ˜ ์žˆ์Œ.

    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•˜๋ฉด, ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ•์ œ๋กœ ์ค‘์ง€์‹œํ‚จ๋‹ค. ์ด ๋•Œ, ์ค‘์ง€ ์‹œํ‚จ ํŠธ๋žœ์ ์…˜์—์„œ ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ๋Š” ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ ค ๋†“๋Š”๋‹ค.

03. Transaction Isolation level (ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฆฝ(๊ฒฉ๋ฆฌ) ์ˆ˜์ค€)

๋‘๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜(T1, T2) ์ค‘, T1์€ ์ฝ๊ธฐ์ž‘์—…์„, T2๋Š” ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ์ด ๋•Œ, ๋™์‹œ์„ฑ์ œ์–ด์—์„œ ๋ดค๋˜ '๋ฝ'์„ ๊ฑฐ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ wait๋ฅผ ํ• ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ๋™์‹œ ์ง„ํ–‰ ์ •๋„๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ๋ง‰๋Š” ๊ฒƒ์ด๊ธฐ๋„ ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ์™„ํ™”๋œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚˜์™”๋‹ค. Isolation level ์˜ ์กฐ์ •์„ ํ†ตํ•ด ๋™์‹œ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋ คํ•˜๋ฉด ๋™์‹œ์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

1) Transaction ๋™์‹œ ์‹คํ–‰ ๋ฌธ์ œ

  • dirty read (uncommitted, ์˜ค์†์ฝ๊ธฐ)

    • ์ฝ๊ธฐ ์ž‘์—…์„ ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ 1์ด ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜2 ๊ฐ€ ์ž‘์—…ํ•œ ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ

    • ์ž‘์—… ์ค‘ ํŠธ๋žœ์žญ์…˜2๊ฐ€ ์–ด๋–ค ์ด์œ ๋กœ ์ž‘์—…์„ ์ฒ ํšŒ(ROLLBACK) ํ•  ๊ฒฝ์šฐ, ํŠธ๋žœ์žญ์…˜1์€ ๋ฌดํšจํ™” ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฒŒ ๋˜์–ด ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋Š”๋ฐ, ์ด ํ˜„์ƒ์„ dirty read (์˜ค์†์ฝ๊ธฐ) ๋˜๋Š” uncommitted ๋ผ๊ณ  ํ•œ๋‹ค.

    • ์ฝ๊ธฐ ์ž‘์—…์„ ํ•˜๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— shared lock์ด ๊ฑธ๋ฆฌ์ง€ ์•Š์•„ ์ƒ๊ธด ๋ฌธ์ œ.

  • non-repeatable read (๋ฐ˜๋ณต ๋ถˆ๊ฐ€๋Šฅ)

    • ํŠธ๋žœ์žญ์…˜1 ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ , ํŠธ๋žœ์žญ์…˜2 ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ณ (update, ๊ฐฑ์‹ ) commit, ํŠธ๋žœ์ ์…˜1์ด ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ

    • ์ฆ‰, ์ฝ๊ธฐ์ž‘์—…์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ฐ˜๋ณตํ•  ๊ฒฝ์šฐ ์ด์ „ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜๋ณต๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ

  • phantom read(์œ ๋ น ์ฝ๊ธฐ)

    • ํŠธ๋žœ์žญ์…˜1 ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ , ํŠธ๋žœ์žญ์…˜2 ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ณ (insert, ์‚ฝ์ž…), ํŠธ๋žœ์žญ์…˜1์ด ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ

    • ํŠธ๋žœ์žญ์…˜ ์ด ๋‹ค์‹œํ•œ๋ฒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์œผ๋ฉด, ์ด์ „์— ์—†๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ

    • ๋‹จ, MySQL์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. MySQL์˜ REPEATABLE READ๋Š” ํŠธ๋žœ์ ์…˜์ด ์ฒ˜์Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ฌ ๋•Œ, SNAPSHOT์„ ๊ตฌ์ถ•ํ•ด์„œ ์ž๋ฃŒ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ, ๋‹ค๋ฅธ ์„ธ์…˜์˜ ์ž๋ฃŒ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

2) Transaction Isolation level ๋ช…๋ น์–ด

  • ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•ด์„œ ํŠธ๋žœ์žญ์…˜์„ ์ œ์–ดํ•œ๋‹ค.

  • ์ฝ๊ธฐ/์“ฐ๊ธฐ์— ๋Œ€ํ•œ ํŠธ๋žœ์žญ์…˜ ๊ฐ„์˜ ๊ณ ๋ฆฝ์ˆ˜์ค€์„ ๊ฒฐ์ •

  • SQL ํ‘œ์ค€์—์„œ๋Š” 4๊ฐ€์ง€ ๊ณ ๋ฆฝ(isolation) ์ˆ˜์ค€์„ ์ •์˜ํ•˜๊ณ  ์žˆ๊ณ , DBMS๋ณ„๋กœ ์ง€์›ํ•˜๋Š” ๋ชจ๋“œ, ๋™์ž‘ ๋ฐฉ์‹, ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๋‹ค.

  • SQL ํ‘œ์ค€์œผ๋กœ ์ •๋ฆฌ

  • READ UNCOMMITED(Level 0)

    • ๊ณ ๋ฆฝ์ˆ˜์ค€์ด ๊ฐ€์žฅ ๋‚ฎ์€ ๋ช…๋ น์–ด๋กœ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ์— ์•„๋ฌด๋Ÿฐ shared lock(๊ณต์œ ๋ฝ) ์„ ๊ฑธ์ง€ ์•Š๋Š”๋‹ค.

    • ๋ฒ ํƒ€๋ฝ์€ ๊ฐฑ์‹  ์†์‹ค ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๊ฑธ์–ด์•ผํ•จ.

    • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ๊ณต์œ ๋ฝ๊ณผ ๋ฐฐํƒ€๋ฝ์ด ๊ฑธ๋ฆฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ์ฝ๋Š”๋‹ค. ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด commitํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋„ ์ฝ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋•Œ dirty read ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊ธด๋‹ค.

    • SELECT ์งˆ์˜์— NO LOCK ํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

  • READ COMMITED (Level 1)

    • dirty read ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋™์•ˆ shared lock์„ ๊ฑธ์ง€๋งŒ, ํŠธ๋žœ์ ์…˜์ด ๋๋‚˜๊ธฐ ์ „์—๋„ ํ•ด์ง€ ๊ฐ€๋Šฅ.

    • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฝ ํ˜ธํ™˜์„ฑ ๊ทœ์น™์— ๋”ฐ๋ผ ์ง„ํ–‰

  • REPEATABLE READ (Level 2)

    • ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ์— shared lock, ๋ฒ ํƒ€ lock์„ ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ์œ ์žฌํ•ด์„œ, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ updateํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

    • ๋‹ค๋ฅธ ๊ณ ๋ฆฝํ™” ์ˆ˜์ค€์— ๋น„ํ•ด ๋™์‹œ์„ฑ์ด ๋‚ฎ๋‹ค. ๋˜ํ•œ, MySQL์€ ๊ณต์œ ๋ฝ์„ ๊ฑธ์ง€ ์•Š๊ณ , ์ตœ์ดˆ ํŠธ๋žœ์žญ์…˜ SELECT ์ˆ˜ํ–‰์‹œ SNAPSHOT์„ ๋งŒ๋“  ํ›„, ์ด SNAPSHOT์œผ๋กœ select๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ๋ณ€๊ฒฝ์‹œ์—๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์œ ์ง€ ํ•œ๋‹ค.

  • SERIALIZABLE (Level3)

    • ๊ณ ๋ฆฝ์ˆ˜์ค€์ด ๊ฐ€์žฅ ๋†’๊ณ , ์‹คํ–‰์ค‘์ธ ํŠธ๋žœ์žญ์…˜์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์œผ๋กœ๋ถ€ํ„ฐ ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋œ๋‹ค.

    • ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์— ๋ฒ”์œ„๋ฅผ ์ง€์–ด ์ž ๊ธˆ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์‹œ ํŠธ๋žœ์žญ์…˜์„ ์™„๋ฒฝํžˆ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ๋ฐ์ดํ„ฐ์˜ ๋™์‹œ์„ฑ์ด ๋‚ฎ๊ณ , SELECT ์งˆ์˜์— ๋ฒ ํƒ€๋ฝ์„ ์„ค์ •ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ๋‚ธ๋‹ค.

04. ํšŒ๋ณต

  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์žฅ์•  ๋ฐœ์ƒ์‹œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ผ๊ด€์„ฑ ์žˆ๋Š” ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” DBMS ๊ธฐ๋Šฅ

  • DB system์—์„œ ๋ฐœ์ƒ๊ฐ€๋Šฅ ํ•œ ์žฅ์•  ์œ ํ˜•

    • ์‹œ์Šคํ…œ ์ถฉ๋Œ: HW, SW ์˜ ์˜ค๋ฅ˜๋กœ ์ฃผ๊ธฐ์–ต์žฅ์น˜๊ฐ€ ์†์‹ค๋˜์–ด ์ฒ˜๋ฆฌ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€ ํ˜น์€ ์ „๋ถ€๊ฐ€ ์†์‹ค๋จ.

    • ๋ฏธ๋””์–ด ์žฅ์• : ํ—ค๋“œ ์ถฉ๋Œ์ด๋‚˜, ์ฝ๊ธฐ ์žฅ์• ๋กœ ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜๊ฐ€ ์†์‹ค

    • ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด ์˜ค๋ฅ˜: DB์— ์ ‘๊ทผํ•˜๋Š” SW์˜ ๋…ผ๋ฆฌ์ ์ธ ์˜ค๋ฅ˜๋กœ ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰ ์‹คํŒจ

    • ์ž์—ฐ์žฌํ•ด: ์ž์—ฐ์žฌํ•ด๋กœ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์ด ์†์ƒ

    • ๋ถ€์ฃผ์˜ ํ˜น์€ ์˜๋„์ ์ธ ์†์ƒ

    • ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ์š”์•ฝ: ๋ณ€๊ฒฝ์ค‘์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ๊ธฐ์–ต์žฅ์น˜ ์†์‹ค ํ˜น์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ €์žฅ๋œ ํ•˜๋“œ๋””์Šคํฌ๊ฐ€ ์†์‹ค.

01) ํŠธ๋žœ์žญ์…˜ ํšŒ๋ณต

  • ํŠธ๋žœ์žญ์…˜์€ DB ํšŒ๋ณต ๋‹จ์œ„์ด๊ธฐ๋„ ํ•จ.

  • ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ๋‚ด์šฉ์„ ํ•œ์ˆœ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ชจ๋‘ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜!

  • ์ผ๋‹จ ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ(buffer์— ์žˆ์Œ)์„ ๋กœ๊ทธ(์ž„์‹œ ๋””์Šคํฌ)์— ๊ธฐ๋ก ํ•œ ํ›„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜์„ ํ•จ.

  • DBMS์˜ ํšŒ๋ณต ๊ด€๋ฆฌ์ž๋Š” ํŠธ๋žœ์žญ์…˜์˜ ACID์ค‘ ์›์ž์„ฑ(A), ์ง€์†์„ฑ(D) ๋ฅผ ๋ณด์žฅํ•˜์—ฌ ์žฅ์• ๋กœ๋ถ€ํ„ฐ DB๋ฅผ ๋ณดํ˜ธํ•œ๋‹ค.

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

    • ์ผ๋‹จ ํŠธ๋žœ์žญ์…˜์ด commit ํ•œ ๋‚ด์šฉ์€ ๋กœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•œ๋‹ค.

02) ๋กœ๊ทธํŒŒ์ผ

  • DBMS๋Š” ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰์ค‘์ด๊ฑฐ๋‚˜, ์ˆ˜ํ–‰์ด ์ข…๋ฃŒ๋œ ํ›„ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์†์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด

    ํŠธ๋žœ์žญ์…˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ก์„ ์ถ”์ ํ•˜๋Š” ๋กœ๊ทธํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๋กœ๊ทธ ํŒŒ์ผ์€ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ˜์˜ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ธฐ๋กํ•˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๊ธฐ๋กํ•ด๋‘๋Š” ๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค.

  • ์•ˆ์ „ํ•œ ํ•˜๋“œ๋””์Šคํฌ์— ์ €์žฅ๋˜๋ฉฐ, ์ „์›๊ณผ ๊ด€๊ณ„์—†์ด ๊ธฐ๋ก์ด ๋‚จ์•„์žˆ์Œ.

  • ๋กœ๊ทธ ํŒŒ์ผ์— ์ €์žฅ๋œ ๋กœ๊ทธ ๊ตฌ์กฐ

    • <ํŠธ๋žœ์žญ์…˜ ๋ฒˆํ˜ธ, ๋กœ๊ทธํƒ€์ž…, ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ ์ด๋ฆ„, ์ˆ˜์ • ์ „ ๊ฐ’, ์ˆ˜์ • ํ›„ ๊ฐ’>

      • ๋กœ๊ทธํƒ€์ž…: ํŠธ๋žœ์žญ์…˜์˜ ์—ฐ์‚ฐ ํƒ€์ž… (ex, start, insert, delete, update, abort, commit, ...)

      • ์ˆ˜์ • ์ „ ๊ฐ’: ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ „ ๊ฐ’

      • ์ˆ˜์ • ํ›„ ๊ฐ’: ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฐ’

03) ๋กœ๊ทธํŒŒ์ผ์„ ์ด์šฉํ•œ ํšŒ๋ณต

  • ์‹œ์Šคํ…œ ์šด์˜ ์ค‘ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‹œ์Šคํ…œ์ด ๋‹ค์‹œ ๊ฐ€๋™ ๋˜์—ˆ์„ ๋•Œ, DBMS๋Š” ๋จผ์ € ๋กœ๊ทธํŒŒ์ผ์„ ์‚ดํ•€๋‹ค.

  • DBMS๋Š” ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€, ์ค‘๋‹จ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ณ 

    • ์ข…๋ฃŒ๋œ ํŠธ๋žœ์žญ์…˜์€ ์ข…๋ฃŒ๋ฅผ ํ™•์ •ํ•˜๊ธฐ ์œ„ํ•ด ์žฌ์‹คํ–‰(REDO)๋ฅผ ์ง„ํ–‰

    • ์ค‘๋‹จ๋œ ํŠธ๋žœ์žญ์…˜์€ ์—†๋˜ ์ผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ทจ์†Œ(UNDO)๋ฅผ ์ง„ํ–‰

  • ์žฌ์‹คํ–‰(REDO)

    • ์žฅ์•  ๋ฐœ์ƒ ํ›„, ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ๊ฐ€๋™ํ–ˆ์„ ๋•Œ, ๋กœ๊ทธ ํŒŒ์ผ์— ํŠธ๋žœ์žญ์…˜์˜ ์‹œ์ž‘(START) ๊ณผ, ์ข…๋ฃŒ(commit) ์ด ์žˆ๋Š” ๊ฒฝ์šฐ.

    • commit ์—ฐ์‚ฐ์ด ๋กœ๊ทธ์— ์žˆ๋‹ค => ํŠธ๋žœ์žญ์…˜์ด ๋ชจ๋‘ ์™„๋ฃŒ๋จ.

    • ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด ๊ธฐ๋ก ๋˜์ง€ ์•Š์•˜์„ ๊ฐ€๋Šฅ ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ, ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด์„œ ํŠธ๋žœ์žญ์…˜์ด ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์„ DB์— ๋‹ค์‹œ ๊ธฐ๋กํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”.

  • ์ทจ์†Œ(UNDO)

    • ์žฅ์•  ๋ฐœ์ƒ ํ›„, ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ๊ฐ€๋™ํ–ˆ์„ ๋•Œ, ๋กœ๊ทธ ํŒŒ์ผ์— ํŠธ๋žœ์žญ์…˜์˜ ์‹œ์ž‘(START) ๋งŒ ์žˆ๊ณ , ์ข…๋ฃŒ(commit)๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ.

    • commit ์—ฐ์‚ฐ์ด ๋กœ๊ทธ์— ์—†๋‹ค => ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์Œ.

    • ํŠธ๋žœ์žญ์…˜์ด ํ•œ ์ผ์„ ๋ชจ๋‘ ์ทจ์†Œํ•ด์•ผํ•จ.

    • ์™„๋ฃŒํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ, ๋ฒ„ํผ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด DB์— ๊ธฐ๋ก๋˜์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ, ํŠธ๋žœ์žญ์…˜์ด ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์„ ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉฐ ์›์ƒ๋ณต๊ตฌ ํ•ด์•ผํ•œ๋‹ค.

  • ์œ„ ๋‘ ์ž‘์—…์€ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ DB์— ๊ธฐ๋กํ•œ ๋ชจ๋“  ๊ฐ’์— ๋Œ€ํ•˜์—ฌ(๋ณ€๊ฒฝ์ „ ๊ฐ’, ๋ณ€๊ฒฝํ›„ ๊ฐ’) ์ค‘ ์–ด๋Š ํ•˜๋‚˜๋ฅผ DB์— ๋งž๋Š” ๊ฐ’์œผ๋กœ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…

  • ์ฆ‰์‹œ ๊ฐฑ์‹ (immediate update)

    • ํŠธ๋žœ์žญ์…˜์˜ ๋ถ€๋ถ„์™„๋ฃŒ ์ „์—๋ผ๋„, ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ ์ผ๋ถ€๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ธฐ๋ก ๋  ์ˆ˜ ์žˆ์Œ.

  • ์ง€์—ฐ ๊ฐฑ์‹  (deferred update)

    • ํŠธ๋žœ์žญ์…˜์ด ๋ฐ˜๋“œ์‹œ ๋ถ€๋ถ„์™„๋ฃŒ๋œ ํ›„, ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ DB์— ๊ธฐ๋ก

    • ๋ถ€๋ถ„ ์™„๋ฃŒ ์ด์ „์—๋Š” ๊ฐฑ์‹  ๋‚ด์šฉ์ด ์•„์ง ์‹ค์ œ DB์—๋Š” ๋ฐ˜์˜๋˜์ง€ ์•Š์€ ์ƒํƒœ.

    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•˜๋Š” ์ž‘์—…์€ ์ง€์—ฐ๋˜์ง€๋งŒ, ์žฅ์•  ๋ฐœ์ƒ์‹œ ๋กœ๊ทธ์— START๋งŒ ๋‚˜ํƒ€๋‚˜๋Š” ํŠธ๋žœ์žญ์…˜์€ ์ทจ์†Œ(UNDO) ํ•  ํ•„์š”๊ฐ€ ์—†์Œ.

04) ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์ด์šฉํ•œ ํšŒ๋ณต

  • ๋กœ๊ทธ๋ฅผ ์ด์šฉํ•œ ํšŒ๋ณต์€ ์‹œ์Šคํ…œ ์žฅ์•  ๋ฐœ์ƒ์‹œ, ์–ด๋Š ์‹œ์ ๊นŒ์ง€ ๋Œ์•„๊ฐ€์•ผํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.

  • ๋”ฐ๋ผ์„œ ํŠธ๋žœ์žญ์…˜์ด ๋งŽ์€ ๊ฒฝ์šฐ, ์‹œ๊ฐ„์ด ์ƒ๋‹นํžˆ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

  • ๋งŽ์€ ์–‘์˜ ๋กœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ , ๊ฐฑ์‹ ํ•˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ช‡ ์‹ญ ๋ถ„ ๋‹จ์œ„๋กœ DB์™€ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ํŒŒ์ผ์„ ๋™๊ธฐํ™” ํ•œ ํ›„, ๋™๊ธฐํ™”ํ•œ ์‹œ์ ์„ ๋กœ๊ทธํŒŒ์ผ์— ๊ธฐ๋กํ•ด๋‘๋Š” ๋ฐฉ๋ฒ• ํ˜น์€ ๊ทธ ์‹œ์ ์„ ์ฒดํฌํฌ์ธํŠธ๋ผ๊ณ  ํ•œ๋‹ค.

  • ์ฒดํฌ ํฌ์ธํŠธ ์‹œ์ ์—์„œ ํ•˜๋Š” ์ž‘์—…

    • ์ฃผ๊ธฐ์–ต ์žฅ์น˜์˜ ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ํ•˜๋“œ ๋””์Šคํฌ์˜ ๋กœ๊ทธ ํŒŒ์ผ์— ์ €์žฅ

    • ์ฆ‰์‹œ ๊ฐฑ์‹ ์˜ ๊ฒฝ์šฐ, ๋ฒ„ํผ์— ์žˆ๋Š” ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ํ•˜๋“œ ๋””์Šคํฌ์˜ DB์— ์ €์žฅ.

    • ์ฒดํฌํฌ์ธํŠธ๋ฅผ ๋กœ๊ทธ์— ๊ธฐ๋ก

  • ํŠธ๋žœ์žญ์…˜์˜ ๋กœ๊ทธ ๊ธฐ๋ก์— ๋”ฐ๋ผ ํšŒ๋ณตํ•˜๋Š” ๋ฐฉ๋ฒ•

    • ์ฒดํฌํฌ์ธํŠธ ์ด์ „์— Commit ๊ธฐ๋ก์ด ์žˆ๋Š” ๊ฒฝ์šฐ: ์•„๋ฌด ์ž‘์—…์ด ํ•„์š” ์—†๋‹ค.

    • ์ฒดํฌํฌ์ธํŠธ ์ดํ›„์— Commit ๊ธฐ๋ก์ด ์žˆ๋Š” ๊ฒฝ์šฐ: REDO(T)๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

    • ์ฒดํฌํฌ์ธํŠธ ์ดํ›„์— Commit ๊ธฐ๋ก์ด ์—†๋Š” ๊ฒฝ์šฐ: ์ฆ‰์‹œ ๊ฐฑ์‹  ๋ฐฉ๋ฒ• ์‚ฌ์šฉ์‹œ UNDO(T) ์ง„ํ–‰, ์ง€์—ฐ ๊ฐฑ์‹  ์‹œ ์•„๋ฌด๊ฒƒ๋„ ํ•  ํ•„์š” X.

[๊ทธ๋ฆผ ์ฐธ์กฐ]

[์ „์ฒด ๋‚ด์šฉ]

MySQL๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต ์ฑ… ์ฐธ์กฐ

[Transaction Isolation level ์ฐธ์กฐ]

https://doooyeon.github.io/2018/09/29/transaction-isolation-level.html

Last updated