λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ”¬μ•„ν‚€ν…μ²˜/- Database

[λ°μ΄ν„°λ² μ΄μŠ€] Transaction, νŠΈλžœμž­μ…˜μ΄λž€?

by Wonit 2021. 4. 7.

Transaction, νŠΈλžœμž­μ…˜

νŠΈλžœμž­μ…˜(Transaction) μ΄λž€, λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€κ²½μ‹œν‚€κΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” μž‘μ—… λ‹¨μœ„μ΄λ‹€.

λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€κ²½μ‹œν‚¨λ‹€λŠ” μ΄μ•ΌκΈ°λŠ” SELECT, UPDATE, INSERT, DELETE 와 같은 행동을 λœ»ν•œλ‹€.

이런 νŠΈλžœμž­μ…˜μ€ 상황에 따라 μ—¬λŸ¬ κ°œκ°€ λ§Œλ“€μ–΄μ§ˆ 수 μžˆλ‹€.
κ·Έ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ€ Commit (μ €μž₯) λ˜κ±°λ‚˜ Rollback (철회)될 수 μžˆλ‹€.

κ·Έ μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?

예λ₯Ό λ“€μ–΄ μš°λ¦¬κ°€ 문제λ₯Ό ν’€λ©΄ 포인트둜 λ³€κ²½λœλ‹€κ³  κ°€μ •ν•΄λ³΄μž.
A, B, C, D κ°€ 문제λ₯Ό ν’€μ–΄ 각각 100 Point μ”© μ–»μ—ˆκ³  이λ₯Ό DB에 μ €μž₯ν•˜λ € ν•œλ‹€.
A μ €μž₯ μ™„λ£Œ, B μ €μž₯ μ™„λ£Œ, C μ €μž₯ μ™„λ£Œ, D μ €μž₯ μ‹€νŒ¨
이런 상황이 였게 λœλ‹€λ©΄ 잘λͺ»λœ μ²˜λ¦¬μ΄λ―€λ‘œ λ‹€μ‹œ μ €μž₯을 μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ”λ°, A, B, CλŠ” κ·Έ 전에 이미 μ €μž₯이 μ™„λ£Œλ˜μ—ˆκΈ° λ•Œλ¬Έμ— λ‹€μ‹œ μ €μž₯을 μ‹œμž‘ν•˜λ©΄ 200점이 μ €μž₯λœλ‹€.
이런 λ¬Έμ œμ λ“€μ„ μœ„ν•΄μ„œ νŠΈλžœμž­μ…˜μ€ Commit κ³Ό Rollback 을 μ΄μš©ν•œλ‹€.

νŠΈλžœμž­μ…˜μ˜ νŠΉμ§•

νŠΈλžœμž­μ…˜μ—λŠ” 4κ°€μ§€μ˜ νŠΉμ§•μ΄ μ‘΄μž¬ν•œλ‹€.

  1. μ›μžμ„±
  2. 일관성
  3. 독립성
  4. 지속성

μ›μžμ„±

μ›μžμ„±μ€ νŠΈλžœμž­μ…˜μ΄ DB에 λͺ¨λ‘ λ°˜μ˜λ˜κ±°λ‚˜, μ „ν˜€ λ°˜μ˜λ˜μ§€ μ•Šκ±°λ‚˜λ₯Ό λœ»ν•œλ‹€.
All or Nothing을 μƒκ°ν•˜λ©΄ λœλ‹€.

일관성

일관성은 νŠΈλžœμž­μ…˜ μž‘μ—… 처리의 κ²°κ³Όκ°€ 항상 μΌκ΄€λ˜μ–΄μ•Ό ν•œλ‹€λ₯Ό λœ»ν•œλ‹€.
즉, 데이터 νƒ€μž…μ΄ λ°˜ν™˜ 후와 전이 항상 동일해야 ν•œλ‹€.

독립성

독립성은 ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ€ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ— 끼어듀 수 μ—†κ³  λ§ˆμ°¬κ°€μ§€λ‘œ λ…λ¦½μ μž„μ„ μ˜λ―Έν•œλ‹€.
즉, 각각의 νŠΈλžœμž­μ…˜μ€ 독립적이라 μ„œλ‘œ 간섭이 λΆˆκ°€λŠ₯ν•˜λ‹€.

지속성

지속성은 νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜λ©΄ 영ꡬ적으둜 결과에 λ°˜μ˜λ˜μ–΄μ•Ό 함을 λœ»ν•œλ‹€.
보톡 commit 이 λœλ‹€λ©΄ 지속성은 λ§Œμ‘±ν•  수 μžˆλ‹€.

 

νŠΈλžœμž­μ…˜μ˜ Commit κ³Ό Rollback

Commit

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

Rollback

νŠΈλžœμž­μ…˜μ˜ μ›μžμ„±μ΄ 깨질 λ•Œ, 즉 ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ μ²˜λ¦¬κ°€ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œ λ˜μ—ˆμ„ λ•Œμ˜ μƒνƒœλ₯Ό λœ»ν•œλ‹€.
Rollback 이 이뀄진닀면 νŠΈλžœμž­μ…˜μ„ λ‹€μ‹œ μ‹€ν–‰ν•˜κ±°λ‚˜ λΆ€λΆ„μ μœΌλ‘œ λ³€κ²½λœ κ²°κ³Όλ₯Ό μ·¨μ†Œν•  수 μžˆλ‹€.

 

νŠΈλžœμž­μ…˜μ˜ μƒνƒœ

νŠΈλžœμž­μ…˜μ€ λ…Όλ¦¬μ μœΌλ‘œ 5κ°€μ§€μ˜ μƒνƒœμ— μžˆμ„ 수 μžˆλ‹€.

  • Active
    • νŠΈλžœμž­μ…˜μ΄ ν˜„μž¬ μ‹€ν–‰ 쀑인 μƒνƒœ
  • Failed
    • 트랜잭이 μ‹€ν–‰λ˜λ‹€ 였λ₯˜κ°€ λ°œμƒν•΄μ„œ μ€‘λ‹¨λœ μƒνƒœ
  • Aborted
    • λΈŒλžœμž­μ…˜μ΄ 비정상 μ’…λ£Œλ˜μ–΄ Rollback 이 μˆ˜ν–‰λœ μƒνƒœ
  • Partially Committed
    • νŠΈλžœμž­μ…˜μ˜ 연산이 λ§ˆμ§€λ§‰κΉŒμ§€ μ‹€ν–‰λ˜κ³  Commit이 되기 직전 μƒνƒœ
  • Committed
    • νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ Commit 연산을 μ‹€ν–‰ν•œ ν›„μ˜ μƒνƒœ

λŒ“κΈ€