Transaction ์ด๋ž€?


Transaction ์ด๋ž€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ์ธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ SQL ์ฟผ๋ฆฌ ๋ชจ์Œ์ด๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋‹ค๋ฅธ Transaction ๊ณผ ๋…๋ฆฝ์ ์ด๊ณ  ์ผ๊ด€๋˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์†ก๊ธˆ Transaction ๊ฐ™์€ ๊ฒฝ์šฐ, SELECT, UPDATE, UPDATE ๋ฌธ์ด ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด 3๊ฐœ์˜ SQL ์ฟผ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ Transaction ์œผ๋กœ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

Transaction ์˜ ๋ชฉ์ 

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

Transaction Lifespan

  • Transaction BEGIN
  • Transaction COMMIT
  • Transaction ROLLBACK

ACID


ACID ๋Š” Transaction ์˜ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Transaction ์ด ๊ฐ€์ ธ์•ผ ํ•˜๋Š” 4๊ฐ€์ง€ ์†์„ฑ์ด๋‹ค.

  • Atomicity
  • Consistency
  • Isolation
  • Durability

Atomicity, ์›์ž์„ฑ

  • ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ๋œ ๋ชจ๋“  ์ฟผ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜ ์‹คํŒจํ•ด์•ผ ํ•œ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ๋œ ์ฟผ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ DB ๊ฐ€ ํŠธ๋žœ์žญ์…˜ ๋„์ค‘ ์ข…๋ฃŒ๋ผ๋„ ๋ชจ๋‘ Rollback ๋ผ์•ผํ•œ๋‹ค.

Consistency, ์ผ๊ด€์„ฑ

  • ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ•œ ์ „ํ›„์—๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ์†์ƒ๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • ์ฝ๊ธฐ ์ผ๊ด€์„ฑ ์—ญ์‹œ ๋ณด์žฅ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ด๋ฃจ์–ด์ง„ DB ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ Update ์งํ›„ Read ๊ฐ€ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

Isolation, ๊ฒฉ๋ฆฌ์„ฑ

  • ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • ๋™์‹œ์— ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰๋  ๋•Œ ์—ฌ๋Ÿฌ Read Phenomena ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Dirty Reads
    • Lost Updates
    • Non-repeatable Reads
    • Phantom Reads
  • ๋‹ค์–‘ํ•œ Isolation Level ๋กœ ์ด๋Ÿฐ Read Phenomena ๋“ค์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Read Uncommitted
    • Read Committed
    • Repeatable Read
    • Snapshot
    • Serializable
  • DBMS ๋งˆ๋‹ค ์ด๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ๋น„๊ด€์  ๋ฝ: Row locks, Table locks, Page locks ๋“ฑ์„ ํ™œ์šฉํ•œ๋‹ค.
    • ๋‚™๊ด€์  ๋ฝ: Lock ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”์ ํ•œ๋‹ค.
    • RR ์€ ๋Œ€๋ถ€๋ถ„ Row lock ์„ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ, Postgres ์˜ ๊ฒฝ์šฐ RR ๋ฅผ Snapshot ์œผ๋กœ ๊ตฌํ˜„ํ•ด์„œ Phantom Read ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • MySQL Transaction Isolation Level ์—์„œ MySQL ์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž.

Durability, ์˜์†์„ฑ

  • ์ปค๋ฐ‹์ด ์™„๋ฃŒ๋œ ํŠธ๋žœ์žญ์…˜์€ ์†์ƒ๋˜์ง€ ์•Š๋Š” ์„ฑ์งˆ์„ ๋งํ•œ๋‹ค.
  • Durability ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ ์ด ์กด์žฌํ•œ๋‹ค.
    • WAL, Write Ahead Log
      • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ Disk ์— ์˜์†์‹œํ‚ค๋Š” ๊ฒƒ์€ ๋น„์‹ธ๊ธฐ ๋•Œ๋ฌธ์— WAL ๋กœ ์••์ถ•๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์ €์žฅํ•œ๋‹ค.
    • Asynchronous Snapshot
    • AOF, Append Only File
    • OS Cache

References