1. Transactions πŸ‘©β€πŸ’»

νŠΈλžœμž­μ…˜μ΄λž€ μͺΌκ°€ 수 μ—†λŠ” 업무 처리의 μ΅œμ†Œ λ‹¨μœ„λ₯Ό λ§ν•œλ‹€. 예λ₯Ό λ“€μ–΄ β€˜A의 κ³„μ’Œμ—μ„œ B의 κ³„μ’Œλ‘œ 만 원을 μ†‘κΈˆν•œλ‹€β€™μ—μ„œ 2개의 μž‘μ—…μ΄ μ‘΄μž¬ν•œλ‹€. β€˜A의 κ³„μ’Œμ—μ„œ 만 원을 μΈμΆœν•œλ‹€β€™, β€˜B의 κ³„μ’Œμ— 만 원을 μž…κΈˆν•œλ‹€.’ 그리고 이 두 μž‘μ—…μ€ λ³„κ°œμΌ 수 μ—†λ‹€. A의 κ³„μ’Œμ—μ„œ μΈμΆœμ€ ν–ˆμœΌλ‚˜ B의 κ³„μ’Œλ‘œ μž…κΈˆμ΄ λ˜μ§€ μ•Šκ±°λ‚˜, A의 κ³„μ’Œμ—μ„œ 인좜 없이 B의 κ³„μ’Œλ‘œ μž…κΈˆμ΄ λ˜λŠ” 일이 μ‘΄μž¬ν•΄μ„œλŠ” μ•ˆ λœλ‹€. 이 λ‘˜μ€ 뢄리될 수 μ—†μœΌλ©° ν•˜λ‚˜μ˜ 단일 거래 λ‚΄μ—­μœΌλ‘œ μ²˜λ¦¬λ˜μ–΄μ•Όν•˜λŠ” μͺΌκ°€ 수 μ—†λŠ” 업무 처리의 μ΅œμ†Œ λ‹¨μœ„κ°€ λœλ‹€. νŠΈλžœμž­μ…˜ μ²˜λ¦¬κ°€ μ •μƒμ μœΌλ‘œ μ™„λ£Œλ  경우 commit 을 ν•˜κ³ , 였λ₯˜κ°€ λ°œμƒν•  경우 rollback 을 ν•œλ‹€.

이것은 DBMS μ—μ„œ 맀우 μ€‘μš”ν•œ κ°œλ…μœΌλ‘œ DB μ„œλ²„μ— μ—¬λŸ¬ ν΄λΌμ΄μ–ΈνŠΈκ°€ λ™μ‹œμ— 접속해 데이터λ₯Ό μ²˜λ¦¬ν•  λ•Œ(concurrent ν”„λ‘œκ·Έλž˜λ°) λ°œμƒν•  수 μžˆλŠ” 데이터 였λ₯˜λ₯Ό μ œμ–΄ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λ©° νŠΈλžœμž­μ…˜μ€ ACID λ₯Ό λ§Œμ‘±ν•΄μ•Όν•œλ‹€.


2. ACID πŸ‘©β€πŸ’»

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

Atomicity λŠ” νŠΈλžœμž­μ…˜μ΄ 더 이상 μž‘κ²Œ μͺΌκ°€ 수 μ—†λŠ” μ΅œμ†Œν•œμ˜ 업무 λ‹¨μœ„λ‘œ λͺ…령이 λͺ¨λ‘ λ°˜μ˜λ˜κ±°λ‚˜, λͺ¨λ‘ λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€. λΆ€λΆ„μ μœΌλ‘œ μ‹€ν–‰λ˜κ±°λ‚˜ μ€‘λ‹¨λ˜μ§€ μ•Šμ•„μ•Ό 함을 μ˜λ―Έν•˜λ©° μž‘μ—… 내역은 rollback λœλ‹€.

기본적으둜 rollback 은 νŠΈλž™μž­μ…˜μ˜ λͺ¨λ“  μž‘μ—… 내역을 λ˜λŒλ¦¬λŠ”λ°, 였λ₯˜κ°€ λ°œμƒν•˜κΈ° 이전 지점을 μ •ν™•νžˆ μ•Œκ³  μžˆλ‹€λ©΄ 이 지점을 save point 둜 μ§€μ •ν•˜λ©΄ 이 μ§€μ κΉŒμ§€ rollback 이 되고, μ—¬κΈ°μ„œλΆ€ν„° 업무λ₯Ό λ‹€μ‹œ 진행할 수 μžˆλ‹€. λ¬Όλ‘ , 였λ₯˜ λ°œμƒ 지점을 λ‹€μ‹œ μ§„ν–‰ν•œλ‹€λŠ” 것이지 이 μƒνƒœλ₯Ό commit ν•œλ‹€λŠ” μ˜λ―ΈλŠ” μ•„λ‹ˆλ‹€.

Atomicity λŠ” ν•œ λ§ˆλ””λ‘œ μ •μ˜ν•˜λ©΄ All or Nothing 의 κ°œλ…μ΄λ‹€.

2. Consistency (일관성)

νŠΈλžœμž­μ…˜μ΄ ν…Œμ΄λΈ”μ— λ³€κ²½ 사항을 μ μš©ν•  λ•Œ νŠΉμ • 쑰건을 두고, κ·Έ 쑰건을 λ§Œμ‘±ν•˜λŠ” λ°μ΄ν„°λ§Œ 변경을 ν—ˆμš©ν•΄ λ°μ΄ν„°μ˜ μ†μƒμ΄λ‚˜ 였λ₯˜λ₯Ό λ°©μ§€ν•œλ‹€. 예λ₯Ό λ“€μ–΄ λͺ¨λ“  κ³„μ’ŒλŠ” μž”κ³ κ°€ μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 무결성 μ œμ•½ 쑰건이 μžˆλ‹€λ©΄, 이λ₯Ό μœ„λ°˜ν•˜λŠ” νŠΈλžœμž­μ…˜μ€ μ€‘λ‹¨λœλ‹€.

3. Isolation (독립성)

μ—¬λŸ¬ μ‚¬μš©μžκ°€ 같은 ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ‘ λ™μ‹œμ— 읽고 μ“°κΈ° μž‘μ—…μ„ ν•  λ•Œ, 각각의 νŠΈλžœμž­μ…˜μ„ 격리해 μ„œλ‘œ λ°©ν•΄ν•˜κ±°λ‚˜ 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šλ„λ‘ ν•œλ‹€. 각각의 μš”μ²­μ΄ μ‹€μ œλ‘œλŠ” λͺ¨λ‘ λ™μ‹œμ— λ°œμƒν•˜λ”λΌλ„, 마치 ν•˜λ‚˜μ”© λ°œμƒν•˜λŠ” κ²ƒμ²˜λŸΌ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 즉, νŠΈλžœμž­μ…˜μ˜ 싀행내역은 연속적이어야함을 μ˜λ―Έν•œλ‹€.

예λ₯Ό λ“€μ–΄ μœ„ β€˜A의 κ³„μ’Œμ—μ„œ B의 κ³„μ’Œλ‘œ 만 원을 μ†‘κΈˆν•œλ‹€β€™ 경우λ₯Ό 보면, β€˜A의 κ³„μ’Œμ—μ„œ 만 원을 μΈμΆœν•œλ‹€β€™, β€˜B의 κ³„μ’Œμ— 만 원을 μž…κΈˆν•œλ‹€.’ 2개의 μž‘μ—…μ€ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ΄λ―€λ‘œ, 이 νŠΈλžœμž­μ…˜μ΄ μ’…λ£Œλ˜κΈ° μ „ 은행원이 이체 과정을 λ³Ό 수 μ—†λ‹€. A의 κ³„μ’Œμ—μ„œ B의 κ³„μ’Œλ‘œ 만 원을 μ†‘κΈˆν•œλ‹€ 와 은행원이 A의 μΈμΆœμ„ ν™•μΈν•œλ‹€λŠ” μ„œλ‘œ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μœΌλ‘œ κ²©λ¦¬λ˜μ–΄ 있기 λ•Œλ¬Έμ΄λ‹€.

4. Durability (지속성)

μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰λœ νŠΈλžœμž­μ…˜μ€ 영ꡬ적으둜 λ°˜μ˜λ˜μ–΄μ•Όν•œλ‹€. 즉, μ„±κ³΅ν•œ νŠΈλžœμž­μ…˜μ€ μ•ˆμ •μ μœΌλ‘œ λ³΄μ‘΄λ˜μ–΄μ•Όν•œλ‹€. μ‹œμŠ€ν…œ 문제, DB 일관성 체크 등을 ν•˜λ”λΌλ„ μœ μ§€μ™Έμ–΄μ•Ό 함을 μ˜λ―Έν•œλ‹€. μ „ν˜•μ μœΌλ‘œ λͺ¨λ“  νŠΈλžœμž­μ…˜μ€ 둜그둜 남고, μ‹œμŠ€ν…œ μž₯μ•  λ°œμƒ μ „ μƒνƒœλ‘œ 되돌릴 수 μžˆλ‹€. λ”°λΌμ„œ νŠΈλžœμž­μ…˜μ€ λ‘œκ·Έμ— λͺ¨λ“  것이 μ €μž₯된 ν›„μ—λ§Œ commit μƒνƒœλ‘œ 간주될 수 μžˆλ‹€.


3. Commit and Rollback πŸ‘©β€πŸ’»

  • Commit: INSERT, UPDATE, DELETE 와 같은 DB의 데이터λ₯Ό λ³€κ²½ν•˜λŠ” μž‘μ—…μ΄ λͺ¨λ‘ μ’…λ£Œλœ ν›„ κ²°κ³Όκ°€ 지속성을 갖도둝 μ €μž₯함을 μ˜λ―Έν•œλ‹€. Commit 이 이루어지기 μ „ λͺ¨λ“  μž‘μ—…μ€ μž„μ‹œμ μž„μ„ μ˜λ―Έν•œλ‹€.
  • Rollback: ACID μœ„λ°˜ λ˜λŠ” μ‚¬μš©μž μž„μ˜λ‘œ νŠΈλžœμž­μ…˜μ˜ μž‘μ—… 내역을 λ˜λŒλ¦Όμ„ μ˜λ―Έν•œλ‹€. λ³„λ„μ˜ save point κ°€ μ—†λ‹€λ©΄ νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘ μ‹œμ μœΌλ‘œ λ˜λŒλ¦°λ‹€.

4. Recovery

λ°μ΄ν„°λ² μ΄μŠ€λŠ” λ°μ΄ν„°μ˜ μ•ˆμ •μ„±κ³Ό 신뒰성을 μœ„ν•΄ ACID 원칙을 μ μš©ν•΄ νŠΈλžœμž­μ…˜μ„ κ΄€λ¦¬ν•œλ‹€. ν•˜μ§€λ§Œ μ™ΈλΆ€ μš”μΈμ— μ˜ν•΄ νŠΈλžœμž­μ…˜ κ²°κ³Όκ°€ 잘λͺ»λ  μˆ˜λ„ 있고, 잘λͺ»λœ νŠΈλžœμž­μ…˜μ˜ λ°œμƒμœΌλ‘œ κ°•μ œλ‘œ λ˜λŒλ €μ•Ό ν•  μˆ˜λ„ μžˆλ‹€. 이 λ•Œ μ‚¬μš©ν•˜λŠ” 것이 λ°μ΄ν„°λ² μ΄μŠ€ 회볡 κΈ°λ²•μœΌλ‘œ, νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλœ ν›„(commit) μˆ˜ν–‰ν•˜λŠ” 것과 이전에 μˆ˜ν–‰ν•˜λŠ” 것 λͺ¨λ‘ μ‘΄μž¬ν•œλ‹€.

1. Database Failure Types

  • Transaction Failure: νŠΈλžœμž­μ…˜μ˜ μ‹€ν–‰ μ‹œ 논리적 μ—λŸ¬λ‘œ λ°œμƒν•  수 μžˆλŠ” μ—λŸ¬ 상황.
  • System Failure: ν•˜λ“œμ›¨μ–΄ μ‹œμŠ€ν…œ μžμ²΄μ—μ„œ λ°œμƒν•  수 μžˆλŠ” μ—λŸ¬ 상황.
  • Media Failure: λ””μŠ€ν¬ 자체의 μ†μƒμœΌλ‘œ λ°œμƒν•  수 μžˆλŠ” μ—λŸ¬ 상황.

2. Database Recovery Performance

  • Undo: 일반적으둜 μš°λ¦¬κ°€ μ›Œλ“œ λ“±μ˜ λ¬Έμ„œλ₯Ό μ‚¬μš©ν•  λ•Œ 되돌리기 ν•˜λŠ” 것을 μƒκ°ν•˜λ©΄ λœλ‹€. νŠΈλžœμž­μ…˜ λ‘œκ·Έκ°€ κΈ°λ‘λ˜λ―€λ‘œ μ—λŸ¬μ™€ κ΄€λ ¨λœ λ³€κ²½ 내역을 되돌렀 μ·¨μ†Œν•¨μœΌλ‘œμ¨ μ—λŸ¬λ₯Ό λ³΅κ΅¬ν•œλ‹€. νŠΈλžœμž­μ…˜μ˜ μž‘μ—… μžμ²΄μ— λ¬Έμ œκ°€ μžˆμ„ 경우 μ‚¬μš©ν•œλ‹€.
    νŠΈλžœμž­μ…˜ 둜그 νŒŒμΌμ„ μ΄μš©ν•œ λ³΅κ΅¬μ‹œ 일반적으둜 νŠΈλžœμž­μ…˜μ˜ 둜그 νŒŒμΌμ— start λŠ” 있고, commit 이 μ—†λŠ” 경우 μˆ˜ν–‰ν•œλ‹€.
  • Redo: μ—λŸ¬κ°€ λ°œμƒν•œ νŠΈλžœμž­μ…˜μ„ λ‹€μ‹œ μ‹€ν–‰ν•œλ‹€. νŠΈλžœμž­μ…˜μ˜ μž‘μ—… μžμ²΄λŠ” λ¬Έμ œκ°€ μ—†κ³ , μ™ΈλΆ€ μš”μΈμ— μ˜ν•œ μ—λŸ¬μΌ 경우 이λ₯Ό λ‹€μ‹œ μˆ˜ν–‰ν•¨μœΌλ‘œμ¨ μ—λŸ¬λ₯Ό λ³΅κ΅¬ν•œλ‹€. 예λ₯Ό λ“€μ–΄ νŒŒμΌμ„ μ „μ†‘ν•˜λŠ” 데 인터넷이 끊겨 μ·¨μ†Œλœ 전솑 내역을 λ‹€μ‹œ μ‹€ν–‰ν•˜λŠ” 것과 κ°™λ‹€κ³  λ³Ό 수 μžˆλ‹€. νŠΈλžœμž­μ…˜ 둜그 νŒŒμΌμ„ μ΄μš©ν•œ λ³΅κ΅¬μ‹œ 일반적으둜 νŠΈλžœμž­μ…˜μ˜ 둜그 νŒŒμΌμ— start 와 commit 이 λͺ¨λ‘ μžˆλŠ” 경우 μˆ˜ν–‰ν•œλ‹€.

3. Database Recovery Techniques

  • 둜그 기반 회볡 κΈ°λ²•μ—λŠ” 지연갱신 회볡 기법Deferred Update 와 μ¦‰μ‹œκ°±μ‹  회볡 기법Immediate Updateκ°€ μžˆλ‹€.
  • 검사점 회볡 기법Checkpoint Recovery 은 검사점 μ „/ν›„λ₯Ό κΈ°μ€€μœΌλ‘œ ν•΄λ‹Ή μ‹œμ κΉŒμ§€λ§Œ Redo λ˜λŠ” Undo λ₯Ό μˆ˜ν–‰ν•œλ‹€.
  • 그림자 νŽ˜μ΄μ§• 회볡 기법Shadow Paging Recovery 은 νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘λ˜λŠ” μ‹œμ μ— μ‹€ν–‰λ˜λŠ” λ©”λͺ¨λ¦¬ μƒμ˜ Current Page Table κ³Ό λ™μΌν•œ Shadow Page Table λ₯Ό 물리 λ””μŠ€ν¬μ— μƒμ„±ν•œλ‹€. λ§Œμ•½ νŠΈλžœμž­μ…˜μ΄ 성곡할 경우 Current Page Table 을 μ·¨ν•˜κ³ , μ‹€νŒ¨ν•  경우 Shadow Page Table 을 μ·¨ν•œλ‹€.




Reference

  1. β€œACID properties of transactions.” IBM. Jan. 10, 2023, ACID.
  2. β€œνŠΈλžœμž­μ…˜.” ν•΄μ‹œλ„·. Dec. 19, 2022, νŠΈλžœμž­μ…˜.
  3. β€œλ°μ΄ν„°λ² μ΄μŠ€ 회볡.” ITμœ„ν‚€. Oct. 22, 2020, λ°μ΄ν„°λ² μ΄μŠ€ 회볡.