πŸ’» [Theory] λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμ μ…˜(Transaction)

πŸ’» [Theory] λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμ μ…˜(Transaction)

μ΄λ²ˆμ—λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ νŠΈλžœμž­μ…˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμ μ…˜(Transaction)λž€ 무엇인가?

λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™˜μ‹œν‚€λŠ” ν•˜λ‚˜μ˜ 논리적 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μž‘μ—…μ˜ λ‹¨μœ„ λ˜λŠ” ν•œκΊΌλ²ˆμ— λͺ¨λ‘ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  일련의 연산듀을 μ˜λ―Έν•œλ‹€.

β€» ν•œκΊΌλ²ˆμ— λͺ¨λ‘ μˆ˜ν–‰μ΄ λ˜κ±°λ‚˜ μ•„λ‹ˆλ©΄ λͺ¨λ‘ μˆ˜ν–‰μ΄ λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

νŠΈλžœμž­μ…˜μ„ μ„€λͺ…ν•˜κΈ° μœ„ν•΄ 은행 거래λ₯Ό μ˜ˆμ‹œλ‘œ λ“€ 수 μžˆλ‹€.

ATM으둜 κ³„μ’Œμ΄μ²΄λ₯Ό ν•œλ‹€κ³  생각해보면,

  1. A μ€ν–‰μ—μ„œ μΆœκΈˆν•˜μ—¬ B μ€ν–‰μœΌλ‘œ μ†‘κΈˆν•˜λ €κ³  ν•œλ‹€.

  2. μ†‘κΈˆ 도쀑, μ•Œ 수 μ—†λŠ” 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ A 은행 κ³„μ’Œμ—μ„œ λˆμ€ λΉ μ Έ λ‚˜κ°”μ§€λ§Œ B μ€ν–‰μ˜ κ³„μ’Œμ— μž…κΈˆλ˜μ§€ μ•Šμ•˜λ‹€.
    • 돈이 증발 => μ‹¬κ°ν•œ 문제
  3. 이와 같은 상황을 λ§‰κΈ°μœ„ν•΄ κ±°λž˜κ°€ μ„±κ³΅μ μœΌλ‘œ λͺ¨λ‘ λλ‚˜μ•Ό 이λ₯Ό μ™„μ „ν•œ 거래둜 μŠΉμΈν•˜κ³ , 거래 도쀑 λ­”κ°€ 였λ₯˜κ°€ λ°œμƒν–ˆμ„ λ•ŒλŠ” 이 거래λ₯Ό μ²˜μŒλΆ€ν„° μ—†μ—ˆλ˜ 거래둜 μ™„μ „νžˆ λ˜λŒλ¦¬λŠ” 것이닀.

     μ΄λ ‡κ²Œ 거래의 μ•ˆμ „μ„±μ„ ν™•λ³΄ν•˜λŠ” 방법이 νŠΈλžœμž­μ…˜μ΄λ‹€. λ°μ΄ν„°λ² μ΄μŠ€μ—μ„  ν…Œμ΄λΈ”μ—μ„œ 데이터λ₯Ό 읽어 온 ν›„
     λ‹€λ₯Έ ν…Œμ΄λΈ”μ— 데이터λ₯Ό μž…λ ₯ν•˜κ±°λ‚˜ κ°±μ‹ , μ‚­μ œν•˜λŠ”λ° 처리 도쀑 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ λͺ¨λ“  μž‘μ—…μ„ μ›μƒνƒœλ‘œ λ˜λŒλ¦°λ‹€.
     λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 처리 과정이 λͺ¨λ‘ μ •μƒμ μœΌλ‘œ μ„±κ³΅ν–ˆμ„ λ•Œλ§Œ μ΅œμ’…μ μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— λ°˜μ˜ν•œλ‹€.
     β€» νŠΈλžœμž­μ…˜μ˜ νŠΉμ§•μΈ ACID와 관련이 λ°€μ ‘ν•˜λ‹€.  
    

νŠΈλžœμž­μ…˜(Transaction)의 νŠΉμ§•

μœ„μ—μ„œ λ§ν•œ κ²ƒμ²˜λŸΌ νŠΈλžœμž­μ…˜μ˜ νŠΉμ§•μ€ ACID 4가지가 μžˆλ‹€.

ACID(Atomicity, Consistency, Isolation, Durability)λŠ” λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμ μ…˜μ΄ μ•ˆμ „ν•˜κ²Œ μˆ˜ν–‰λœλ‹€λŠ” 것을 보μž₯ν•˜κΈ° μœ„ν•œ νŠΈλžœμž­μ…˜μ˜ νŠΉμ§•μ„ λ§ν•œλ‹€.

  • μ›μžμ„±(Atomicity) : νŠΈλžœμž­μ…˜μ΄ DB에 λͺ¨λ‘ λ°˜μ˜λ˜κ±°λ‚˜, ν˜Ήμ€ μ „ν˜€ λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

    • νŠΈλžœμž­μ…˜μ˜ μž‘μ—…μ΄ λΆ€λΆ„μ μœΌλ‘œ μ‹€ν–‰λ˜κ±°λ‚˜ μ€‘λ‹¨λ˜μ§€ μ•ŠλŠ” 것을 보μž₯ν•˜λŠ” 것을 λ§ν•œλ‹€.
    • All or Noting 의 κ°œλ…μœΌλ‘œμ„œ μž‘μ—… λ‹¨μœ„λ₯Ό μΌλΆ€λΆ„λ§Œ μ‹€ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.
  • 일관성(Consistency) : νŠΈλžœμž­μ…˜μ˜ μž‘μ—… 처리 κ²°κ³ΌλŠ” 항상 일관성이 μžˆμ–΄μ•Ό ν•œλ‹€.

    • νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ  λ•Œ 일관적인 DB μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 것을 λ§ν•œλ‹€.
    • μ—¬κΈ°μ„œ λ§ν•˜λŠ” μΌκ΄€μ„±μ΄λž€, μœ„μ˜ μ†‘κΈˆ μ˜ˆμ œμ—μ„œ κΈˆμ•‘μ˜ 데이터 νƒ€μž…μ΄ μ •μˆ˜ν˜•(integer)인데, κ°‘μžκΈ° λ¬Έμžμ—΄(string)이 λ˜μ§€ μ•ŠλŠ” 것을 λ§ν•œλ‹€.
      • 즉, μ†‘κΈˆ μ „ν›„ λͺ¨λ‘ κΈˆμ•‘μ˜ 데이터 νƒ€μž…μ€ μ •μˆ˜ν˜•μ΄μ—¬μ•Ό ν•œλ‹€λŠ” 것이 일관성이닀.

β€» νŠΈλžœμž­μ…˜μ—μ„œ 일관성은 νŠΈλžœμž­μ…˜ μˆ˜ν–‰ μ „, 후에 데이터 λͺ¨λΈμ˜ λͺ¨λ“  μ œμ•½ 쑰건(κΈ°λ³Έν‚€, μ™Έλž˜ν‚€, 도메인, 도메인 μ œμ•½μ‘°κ±΄ λ“±)을 λ§Œμ‘±ν•˜λŠ” 것

  • 격리성(Isolation) : λ‘˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— 병행 μ‹€ν–‰λ˜κ³  μžˆμ„ λ•Œ, μ–΄λ–€ νŠΈλžœμž­μ…˜λ„ λ‹€λ₯Έ νŠΈλžœμž­μ…˜ 연산에 끼어듀 수 μ—†λ‹€.

    • νŠΈλžœμž­μ…˜ μˆ˜ν–‰μ‹œ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ μž‘μ—…μ΄ 끼어듀지 λͺ»ν•˜λ„둝 보μž₯ν•˜λŠ” 것을 λ§ν•œλ‹€.
    • 즉, νŠΈλžœμž­μ…˜λΌλ¦¬λŠ” μ„œλ‘œλ₯Ό κ°„μ„­ν•  수 μ—†λ‹€.
  • 지속성(Durability) : νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œ λ˜μ—ˆμœΌλ©΄ κ²°κ³ΌλŠ” 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Ό ν•œλ‹€.

    • μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰λœ νŠΈλžœμž­μ…˜μ€ μ˜μ›νžˆ 반영이 λ˜λŠ” 것을 λ§ν•œλ‹€.
    • commit을 ν•˜λ©΄ ν˜„μž¬ μƒνƒœλŠ” μ˜μ›νžˆ 보μž₯λœλ‹€.

νŠΈλžœμž­μ…˜(Transaction)의 μƒνƒœ

ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ΄ μ™„μ „νžˆ λ°˜μ˜λ˜κ±°λ‚˜ μ•„λ‹ˆλ©΄ μ™„μ „νžˆ μ² νšŒκ°€ 되기 μœ„ν•΄μ„œ λ‹€μŒκ³Ό 같은 μƒνƒœλ₯Ό 가진닀.

transaction-status

  • ν™œμ„±(Active) : νŠΈλžœμž­μ…˜μ΄ μ •μƒμ μœΌλ‘œ 싀행쀑인 μƒνƒœ
  • μ‹€νŒ¨(Failed) : νŠΈλžœμž­μ…˜ 싀행에 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ μ€‘λ‹¨λœ μƒνƒœ
  • 철회(Aborted) : νŠΈλžœμž­μ…˜μ΄ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ Rollback 연산을 μˆ˜ν–‰ν•œ μƒνƒœ
  • λΆ€λΆ„ μ™„λ£Œ(Partially Committed) : νŠΈλžœμž­μ…˜μ˜ λ§ˆμ§€λ§‰ μ—°μ‚°κΉŒμ§€ μ‹€ν–‰ν–ˆμ§€λ§Œ, Commit 연산이 μ‹€ν–‰λ˜κΈ° μ§μ „μ˜ μƒνƒœ
  • μ™„λ£Œ(Committed) : νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ Commit 연산을 μ‹€ν–‰ν•œ ν›„μ˜ μƒνƒœ

끝

λ°μ΄ν„°λ² μ΄μŠ€μ˜ νŠΈλžœμž­μ…˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€.
κ°μ‚¬ν•©λ‹ˆλ‹€. πŸ™

Reference

https://victorydntmd.tistory.com/129

https://coding-factory.tistory.com/226

Written on June 3, 2021