Transaction

์ •์Šน์›ยท2023๋…„ 4์›” 24์ผ
0
post-thumbnail

๐Ÿ“’ ๋ชฉ์ฐจ

  • ๐Ÿ“Œ Transaction์ด๋ž€?
  • ๐Ÿ“Œ Transaction์˜ ์†์„ฑ (ACID)
  • ๐Ÿ“Œ Isolation-level
  • ๐Ÿ“Œ Isolation-level์— ๋”ฐ๋ฅธ ๋ฌธ์ œ์ 

๐Ÿ“Œ Transaction์ด๋ž€?

Transaction์€ ์ฒ˜๋ฆฌ๋˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„์ด๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ Transaction ์ฒ˜๋ฆฌ๋Š” ๋กœ์ง์ƒ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ์„œ๋กœ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋„์ค‘ ํ•˜๋‚˜์˜ ๋‹จ์œ„ ํŠธ๋žœ์žญ์…˜์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์ด์ „์— ์„ฑ๊ณตํ–ˆ๋˜ ํŠธ๋žœ์žญ์…˜๋“ค์„ ๋‹ค์‹œ rollback ์‹œ์ผœ ๋ฐ์ดํ„ฐ์˜ Consistency๊ฐ€ ๊นจ์ง€์ง€ ์•Š๋„๋ก ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๋ชจ๋‘ ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” commit์„ ํ†ตํ•ด ํ™•์ • ์ง€์–ด์ฃผ๊ฒŒ ๋œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ Transaction flow๋ฅผ ๋ณด๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ์„œ๋กœ ๋‹ค๋ฅธ Transaction์„ ๋ถ€๋ถ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  1. ๋ชจ๋“  Transaction์ด ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด Commit ํ•œ๋‹ค.
  1. ๋งŒ์•ฝ Transaction์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋น„์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉด rollback์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๐Ÿ“Œ Transaction์˜ ์†์„ฑ (ACID)

ACID ๋Š” Transaction์„ ์ •์˜ํ•˜๋Š” 4๊ฐ€์ง€ ์†์„ฑ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์•ฝ์–ด์ด๋‹ค.

A(Atomicity) : ์›์ž์„ฑ

  • ์•ˆ์ „์„ฑ ๋ณด์žฅ์„ ์œ„ํ•ด ๊ฐ€์ ธ์•ผ ํ•  ์„ฑ์งˆ ์ค‘์˜ ํ•˜๋‚˜๋กœ ํŠธ๋žœ์žญ์…˜๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…๋“ค์ด ๋ถ€๋ถ„์ ์œผ๋กœ ์‹คํ–‰๋˜๋‹ค๊ฐ€ ์ค‘๋‹จ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๋Š” ๋Šฅ๋ ฅ์ด๋‹ค.
  • ๋ชจ๋‘ ์„ฑ๊ณตํ•  ๊ฒƒ ์•„๋‹ˆ๋ฉด ๋ชจ๋‘ ์‹คํŒจํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ(DB์˜ ์˜ค์—ผ์„ ๋ง‰๊ธฐ ์œ„ํ•จ).

C(Consistency) : ์ผ๊ด€์„ฑ

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

I(Isolation) : ๊ฒฉ๋ฆฌ์„ฑ

  • ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ ์‹œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์—ฐ์‚ฐ ์ž‘์—…์ด ๋ผ์–ด๋“ค์ง€ ๋ชปํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • A ์‚ฌ๋žŒ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ B์‚ฌ๋žŒ์˜ ์š”์ฒญ์€ ์ž ์‹œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

D(Durability) : ์ง€์†์„ฑ

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

๐Ÿ“Œ Isolation-level

Isolation-level ์ด๋ž€ Transaction์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋ผ๊ณ  ํ•œ๋‹ค.

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

Isolation์€ ์ด 4๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์•„๋ž˜ ๋‹จ๊ณ„๋กœ ๋‚ด๋ ค๊ฐˆ์ˆ˜๋ก ์•ˆ์ „ํ•ด์ง€๋Š” ๋ฐ˜๋ฉด ์„ฑ๋Šฅ์ด ๋Š๋ ค์ง€๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

  1. READ UNCOMMITTED
  2. READ COMMITTED
  3. REPEATABLE READ
  4. SERIALIZABLE

๐Ÿ“Œ Isolation-level์— ๋”ฐ๋ฅธ ๋ฌธ์ œ์ 

โœ… 1๋‹จ๊ณ„ : READ UNCOMMITTED

๊ฐ ํŠธ๋žœ์žญ์…˜์—์„œ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ดย COMMIT์ด๋‚˜ย ROLLBACKย ์—ฌ๋ถ€์— ์ƒ๊ด€ ์—†์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, commit ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ •ํ•ฉ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ๋งŽ์€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ๋œ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ดย Commit์ด ๋˜์ง€ ์•Š๋Š” ์ƒํƒœ์ง€๋งŒย Update๋œ ๊ฐ’์„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

โœ… 2๋‹จ๊ณ„ : READ COMMITTED

RDB(๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)์—์„œ ๋Œ€๋ถ€๋ถ„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค.

Dirty Read์™€ ๊ฐ™์€ ํ˜„์ƒ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

์‹ค์ œ ํ…Œ์ด๋ธ” ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Undo ์˜์—ญ์— ๋ฐฑ์—…๋œ ๋ ˆ์ฝ”๋“œ์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜-1์ด Commit ํ•œ ์ดํ›„ ์•„์ง ๋๋‚˜์ง€ ์•Š๋Š”ย ํŠธ๋žœ์žญ์…˜-2๊ฐ€ ๋‹ค์‹œ ํ…Œ์ด๋ธ” ๊ฐ’์„ ์ฝ์œผ๋ฉด ๊ฐ’์ด ๋ณ€๊ฒฝ๋จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜๋‚ด์—์„œ ๋˜‘๊ฐ™์€ SELECT ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ๋Š” ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š”ย REPEATABLE READ์˜ ์ •ํ•ฉ์„ฑ์— ์–ด๊ธ‹๋‚˜๊ฒŒ ๋œ๋‹ค.

  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ์ฃผ๋กœ ์ž…๊ธˆ, ์ถœ๊ธˆ ์ฒ˜๋ฆฌ๊ฐ€ ์ง„ํ–‰๋˜๋Š” ๊ธˆ์ „์ ์ธ ์ฒ˜๋ฆฌ์—์„œ ์ฃผ๋กœ ๋ฐœ์ƒํ•˜๋ฉฐ ์ด๋Ÿฐํ•œ ํ˜„์ƒ์€ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์€ ๊นจ์ง€๊ณ , ๋ฒ„๊ทธ๋Š” ์ฐพ๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

โœ… 3๋‹จ๊ณ„ : REPEATABLE READ

RDB(๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)์—์„œ ๋Œ€๋ถ€๋ถ„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค.

MySQL์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜๋งˆ๋‹ค ํŠธ๋žœ์žญ์…˜ ID๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜ ID๋ณด๋‹ค ์ž‘์€ ํŠธ๋žœ์žญ์…˜ ๋ฒˆํ˜ธ์—์„œ ๋ณ€๊ฒฝํ•œ ๊ฒƒ๋งŒ ์ฝ๊ฒŒ ๋œ๋‹ค.

Undo ๊ณต๊ฐ„์— ๋ฐฑ์—…ํ•ด๋‘๊ณ  ์‹ค์ œ ๋ ˆ์ฝ”๋“œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค.

  • ๋ฐฑ์—…๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ถˆํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ์‹œ์ ์— ์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ญ์ œํ•œ๋‹ค.
  • Undo์— ๋ฐฑ์—…๋œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง€๋ฉด MySQL ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ๋ฐฉ์‹์€ย MVCC(Multi Version Concurrency Control)๋ผ๊ณ  ๋ถ€๋‹ค.

- PHANTOM READ

REPEATABLE READ์— ์ข…์ข… ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ˆ˜ํ–‰ํ•œ ๋ณ€๊ฒฝ ์ž‘์—…์— ์˜ํ•ด ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ณด์˜€๋‹ค๊ฐ€ ์•ˆ ๋ณด์˜€๋‹ค๊ฐ€ ํ•˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ PHANTOM READ๋ผ๊ณ  ํ•œ๋‹ค.

PHANTOM READ ๋Š” MySQL์—์„œ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•ด ์ฃผ๊ธฐ์— ์ €ํฌ๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ์ ์šฉํ•  ๋ถ€๋ถ„์€ ์—†๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ PHANTOM READ ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ SERIALIZABLE ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ๋Š” ๋™์‹œ ์ฒ˜๋ฆฌ์„ฑ๋Šฅ์ด ๊ฐ€์žฅ ๋‚ฎ์œผ๋ฉฐ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด์ง€๋งŒ ๊ฐ€์žฅ ์—„๊ฒฉํ•˜๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

โœ… 4๋‹จ๊ณ„ : SERIALIZABLE

SERIALIZABLE์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž!!

์ฒ ์ˆ˜ 3,000์›, ํ›ˆ์ด 2,000์›, ์˜ํฌ 5,000์›์ด ์กด์žฌํ•œ๋‹ค.

์ฒ ์ˆ˜์™€ ํ›ˆ์ด๊ฐ€ ๊ฐ€์ง„ ๋ˆ์„ ์˜ํฌ์—๊ฒŒ ๋ชจ๋‘ ์ค€๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž.

๊ทธ๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ๋กœ๋Š” ์˜ํฌ์˜ ๋ˆ์€ 10,000์›์ด ๋˜๊ณ  ๋๋‚˜๋Š” ๊ฒŒ ๋‹น์—ฐํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์ปดํ“จํ„ฐ์˜ ์ž…์žฅ์—์„œ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ผ์„ ์ง„ํ–‰ํ•˜๊ธฐ์—, ์˜ํฌ์˜ ๋ˆ์ด 10,000์›์ด ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

์ฒ ์ˆ˜๊ฐ€ ์˜ํฌ์—๊ฒŒ 3,000์›์„ ์ฃผ๋Š” ๋™์‹œ์— ํ›ˆ์ด ๋˜ํ•œ ์˜ํฌ์—๊ฒŒ 2,000์›์„ ์ฃผ๊ฒŒ ๋œ๋‹ค๋ฉด ์ปดํ“จํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ๋ฐ›์•„๋“ค์ผ๊นŒ?

๋™์‹œ์— ์ฃผ๋Š” ์ƒํ™ฉ์„ ์ปดํ“จํ„ฐ ์ž…์žฅ์—์„œ ์ƒ๊ฐํ•ด ๋ณด์ž.

  1. ์˜ํฌ์˜ ๋ˆ(5,000์›)์„ ์กฐํšŒํ•œ๋‹ค.
  2. ์ฒ ์ˆ˜๊ฐ€ ์ฃผ๋Š” 3,000์›์„ ์˜ํฌ์˜ ๋ˆ์œผ๋กœ update ์‹œํ‚จ๋‹ค.
  3. ์˜ํฌ์˜ ๋ˆ(5,000์›)์„ ์กฐํšŒํ•œ๋‹ค.
  4. update๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค.
  5. ํ›ˆ์ด๊ฐ€ ์ฃผ๋Š” 2,000์›์„ ์˜ํฌ์˜ ๋ˆ์œผ๋กœ update ์‹œํ‚จ๋‹ค.
  6. update๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค.
  7. ์ตœ์ข…์ ์œผ๋กœ ์˜ํฌ๊ฐ€ ๊ฐ€์ง„ ๋ˆ์€ 7,000์›์ด ๋œ๋‹ค.

์ฆ‰, ์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์€ ์ฒ ์ˆ˜๊ฐ€ ์ค€ ๋ˆ์„ update ์™„๋ฃŒ ํ•˜๊ธฐ ์ „์— ํ›ˆ์ด๊ฐ€ ๋ˆ์„ ๋„˜๊ฒจ์คŒ์œผ๋กœ์จ, ๋ฐ์ดํ„ฐ์˜ ์˜ค์—ผ์ด ์ผ์–ด๋‚˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฒ ์ˆ˜๊ฐ€ ๋ˆ์„ ์ฃผ๊ณ  update๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ ๊นŒ์ง€๋Š” ์˜ํฌ ๋ฐ์ดํ„ฐ์— ํ›ˆ์ด๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก lock์„ ๊ฑธ์–ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.


๐Ÿ“Œ ์ฐธ์กฐ

https://codebootcamp.co.kr/

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