Hello Ocean! 🌼

[CS/DB] Transaction λ³Έλ¬Έ

TIL

[CS/DB] Transaction

bba_dda 2021. 10. 9. 14:59
λ°˜μ‘ν˜•

μ •μ˜

DB의 μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€κΈ° μœ„ν•΄μ„œ μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ˜ λ‹¨μœ„λ₯Ό 말함

μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚¨λ‹€λŠ” 것은 μ§ˆμ˜μ–΄λ₯Ό μ‚¬μš©ν•΄μ„œ DBλ₯Ό μ ‘κ·Όν•˜λŠ” 것을 λ§ν•˜λ©°

μž‘μ—…μ˜ λ‹¨μœ„λŠ” μ§ˆμ˜μ–΄ ν•œ λ¬Έμž₯을 λ§ν•˜λŠ” 것이 μ•„λ‹Œ 논리적인 λ‹¨μœ„λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

νŠΉμ§•

ACID

  1. μ›μžμ„± (Atomicity)

νŠΈλžœμž­μ…˜μ΄ DB에 λͺ¨λ‘ λ°˜μ˜λ˜λ˜κ°€, μ•„λ‹ˆλ©΄ μ „ν˜€ λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

  1. 일관성 (Consistency)

νŠΈλžœμž­μ…˜ μž‘μ—… 처리 κ²°κ³Όκ°€ 항상 일관성이 μžˆμ–΄μ•Ό ν•œλ‹€.
νŠΈλžœμž­μ…˜μ΄ μ§„ν–‰λ˜λŠ” λ™μ•ˆμ— DBκ°€ λ³€κ²½λ˜λ”λΌλ„, μ—…λ°μ΄νŠΈλœ DB둜 μ§„ν–‰λ˜λŠ” 것이 μ•„λ‹ˆλΌ μ²˜μŒμ— νŠΈλžœμž­μ…˜μ„ μ§„ν–‰ν•˜κΈ° μœ„ν•΄ μ°Έμ‘°ν•œ DB둜 μ§„ν–‰λœλ‹€. λ”°λΌμ„œ 각 μ‚¬μš©μžλŠ” 일관성 μžˆλŠ” 데이터λ₯Ό λ³Ό 수 μžˆλ‹€.

  1. 독립성 (Isolation)

λ‘˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— μ‹€ν–‰λ˜κ³  μžˆμ„ 경우, λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ 연산에 끼어듀 수 μ—†λ‹€.
λ‹€λ₯΄κ²Œ ν‘œν˜„ν•˜λ©΄ ν•˜λ‚˜μ˜ νŠΉμ • νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλ  λ•Œ κΉŒμ§€, λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ 이 νŠΈλžœμž­μ…˜μ˜ κ²°κ³Όλ₯Ό μ°Έμ‘°ν•  수 μ—†λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

  1. 지속성 (Durability)

νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμ„ 경우, κ²°κ³ΌλŠ” 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Ό ν•œλ‹€

Isolation Level

격리 μˆ˜μ€€ μ΄λž€ λ™μ‹œμ— μ—¬λŸ¬ νŠΈλžœμž­μ…˜μ΄ 처리될 λ•Œ, λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ λ³€κ²½ν•˜κ±°λ‚˜ μ‘°νšŒν•˜λŠ” 데이터λ₯Ό λ³Ό 수 μžˆλ„λ‘ ν—ˆμš©ν• μ§€ 말지 κ²°μ •ν•˜λŠ” 것을 λ§ν•œλ‹€.

μœ„μ˜ νŠΈλžœμž­μ…˜μ˜ 4가지 속성을 λ‹€ 지킀면 SERIALIZABLE 이며, 이 κ²½μš°μ—λŠ” 닀쀑 νŠΈλžœμž­μ…˜ 처리 λΆˆκ°€ ν•˜κ²Œ λœλ‹€.

λ”°λΌμ„œ 독립성을 μ‘°κΈˆμ”© ν¬κΈ°ν•˜λ©΄μ„œ μ„±λŠ₯을 높이기 μœ„ν•΄ Isolation Level을 λ‚˜λˆ„μ–΄ μ΄μš©ν•œλ‹€.

μ’…λ₯˜

  • READ UNCOMMITTED
    • λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ 값을 읽을 수 μžˆλ‹€.
    • 정합성에 문제 많음, μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것 ꢌμž₯ (Dirty Read ν˜„μƒ λ°œμƒ)
  • READ COMMITTED
    • DBμ—μ„œ λŒ€λΆ€λΆ„ 기본적으둜 μ‚¬μš©λ˜κ³  μžˆλŠ” 격리 μˆ˜μ€€
    • commit이 μ™„λ£Œλœ λ°μ΄ν„°λ§Œ selectμ‹œμ— μ°Έμ‘° κ°€λŠ₯
    • ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ μ•ˆμ—μ„œ selectλ₯Ό μˆ˜ν–‰ν•  λ•Œ λ§ˆλ‹€ 데이터가 λ™μΌν•˜λ‹€λŠ” 보μž₯ x
      • λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ ν•΄λ‹Ή 데이터λ₯Ό commitν–ˆμ„ κ²½μš°μ—λŠ” commitμ΄ν›„μ˜ 데이터λ₯Ό λ°˜ν™˜ν•΄ μ£ΌκΈ° λ•Œλ¬Έμ΄λ‹€.
    • Consistente Readλ₯Ό μˆ˜ν–‰ν•΄μ•Ό 함
      • νŠΈλžœμž­μ…˜μ—μ„œ Readλ₯Ό ν•  λ•Œ, ν˜„μž¬μ˜ DB값이 μ•„λ‹Œ νŠΉμ • μ‹œμ μ˜ DB μŠ€λƒ…μƒ·μ„ μ½μ–΄μ˜€λŠ” 것을 말함
    • Non-repeatable Read라고도 ν•œλ‹€.
  • REPEATABLE READ
    • ν•œ νŠΈλžœμž­μ…˜μ—μ„œ λ°˜λ³΅ν•΄μ„œ Selectν•˜λ”λΌλ„ μ½μ–΄λ“€μ΄λŠ” 값이 동일함을 보μž₯
    • νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ 처음으둜 selectν•œ μˆ˜ν–‰μ‹œκ°„ κΈ°λ‘ν•œ λ’€, κ·Έ μ΄ν›„μ˜ selectλ§ˆλ‹€ κΈ°λ‘ν•œ μ‹œμ μ„ κΈ°μ€€μœΌλ‘œ consistent readλ₯Ό μˆ˜ν–‰ν•΄μ€Œ.
  • SERIALIZABLE
    • λ‹¨μˆœν•˜κ³  μ—„κ²©ν•œ level이닀.
      • λͺ¨λ“  μž‘μ—…μ— λŒ€ν•΄ 데이터λ₯Ό lockν•˜κ³  μ‚¬μš©ν•œλ‹€.
    • Phantom Read 방지
      • update ν›„ commitν•˜κ³  λ‹€μ‹œ 쑰회 ν–ˆμ„ λ•Œ, μ˜ˆμƒκ³Ό λ‹€λ₯Έ 값이 λ³΄μ΄κ±°λ‚˜ 데이터가 μœ μ‹€λœ 경우λ₯Ό 방지할 수 μžˆλ‹€.
    • κ΅μ°©μƒνƒœ(DeadLock)에 빠질 수 있기 λ•Œλ¬Έμ— μ‹ μ€‘ν•˜κ²Œ κ³„μ‚°ν•˜κ³  μ‚¬μš©ν•΄μ•Όν•¨

Readμ‹œμ—λŠ” REPEATABLE READ

CUD μ‹œμ—λŠ” SERIALIZABLE 을 μ‚¬μš©ν•˜λŠ” 것이 μ μ ˆν•˜λ‹€.

img

Commit, Rollback μ—°μ‚°

commit : μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμ„ λ•Œ 끝났닀고 μ•Œλ €μ£ΌλŠ” 것 + 영ꡬ적으둜 μ €μž₯

rollback : 쀑간에 μ‹€νŒ¨ν•΄μ„œ μ›μžμ„±μ΄ 깨질 경우, μž¬μ‹œμž‘ν•˜κ±°λ‚˜ νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘ν•˜κΈ° μ „μœΌλ‘œ μ·¨μ†Œμ‹œν‚΄

λ°˜μ‘ν˜•