Skip to content

Files

Latest commit

 

History

History
64 lines (32 loc) Β· 3.51 KB

ACID.md

File metadata and controls

64 lines (32 loc) Β· 3.51 KB

ACID

[TOC]

ACIDλž€

ACIDλŠ” λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμž­μ…˜μ΄ μ•ˆμ „ν•˜κ²Œ μˆ˜ν–‰λœλ‹€λŠ” 것을 보μž₯ν•˜κΈ° μœ„ν•œ μ„±μ§ˆμ„ κ°€λ¦¬ν‚€λŠ” μ•½μ–΄λ””λ‹€.

νŠΈλžœμž­μ…˜μ—λŠ” 4κ°€μ§€μ˜ νŠΉμ„±μ΄ μžˆλ‹€.

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

  • νŠΈλžœμž­μ…˜μ˜ μž‘μ—…μ΄ λΆ€λΆ„μ μœΌλ‘œ μ‹€ν–‰λ˜κ±°λ‚˜ μ€‘λ‹¨λ˜μ§€ μ•ŠλŠ” 것을 보μž₯ν•˜λŠ” 것을 λ§ν•œλ‹€.
  • 즉, All oro Nothing의 κ°œλ…μœΌλ‘œμ¨ μž‘μ—… λ‹¨μœ„λ₯Ό μΌλΆ€λΆ„λ§Œ μ‹€ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

μ›μžμ„± 보μž₯

νŠΈλžœμž­μ…˜μ—μ„œ μ›μžμ„±μ€ μˆ˜ν–‰ν•˜κ³  μžˆλŠ” νŠΈλžœμž­μ…˜μ— μ˜ν•΄ λ³€κ²½λœ 내역을 μœ μ§€ν•˜λ©΄μ„œ, 이전에 commit된 μƒνƒœλ₯Ό μž„μ‹œ μ˜μ—­μ— λ”°λ‘œ μ €μž₯ν•¨μœΌλ‘œμ¨ 보μž₯ν•œλ‹€.

ν˜„μž¬ μˆ˜ν–‰ν•˜κ³  μžˆλŠ” νŠΈλžœμž­μ…˜μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ ν˜„μž¬ 내역을 날렀버리고 μž„μ‹œ μ˜μ—­μ— μ €μž₯ν–ˆλ˜ μƒνƒœλ‘œ rollbackν•œλ‹€.

이전 데이터듀이 μž„μ‹œλ‘œ μ €μž₯λ˜λŠ” μ˜μ—­μ„ λ‘€λ°± μ„Έκ·Έλ¨ΌνŠΈλΌκ³  ν•˜λ©°, ν˜„μž¬ μˆ˜ν–‰ν•˜κ³  μžˆλŠ” νŠΈλžœμž­μ…˜μ— μ˜ν•΄ μƒˆλ‘­κ²Œ λ³€κ²½λ˜λŠ” 내역을 λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ΄λΌκ³  ν•œλ‹€. νŠΈλžœμž­μ…˜μ˜ μ›μžμ„±μ€ λ‘€λ°± μ„Έκ·Έλ¨ΌνŠΈμ— μ˜ν•΄ 보μž₯λœλ‹€κ³  ν•  수 μžˆλ‹€.

였λ₯˜κ°€ λ°œμƒν•˜λ©΄ rollback을 ν•˜λŠ”λ°, νŠΈλžœμž­μ…˜μ˜ 길이가 길어지면 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” 뢀뢄도 λ‹€μ‹œ μ²˜μŒλΆ€ν„° μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•œλ‹€. λ”°λΌμ„œ ν™•μ‹€ν•œ 뢀뢄에 λŒ€ν•΄μ„œλŠ” rollback이 λ˜μ§€ μ•Šλ„λ‘ 쀑간 μ €μž₯ 지점인 save pointλ₯Ό 지정할 수 μžˆλ‹€. save pointλ₯Ό 지정할 수 μžˆλ‹€. save pointλ₯Ό μ§€μ •ν•˜λ©΄ rollbackν•  λ•Œ save point 이전은 ν™•μ‹€ν•˜λ‹€κ³  κ°„μ£Όν•˜κ³  κ·Έ 이후뢀터 μ§„ν–‰ν•˜κ²Œ λœλ‹€.

일관성 (Consistency)

  • νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜λ©΄ 일관적인 DBμƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 것을 λ§ν•œλ‹€.
  • μ—¬κΈ°μ„œμ˜ μΌκ΄€μ„±μ΄λž€ μž‘μ—… μ „ ν›„ λͺ¨λ‘ ν•œ 컬럼의 데이터 νƒ€μž…μ΄ μœ μ§€λ˜μ–΄μ•Ό ν•œλ‹€λŠ” 것이닀.

일관성 보μž₯

νŠΈλžœμž­μ…˜μ—μ„œ 일관성은 νŠΈλžœμž­μ…˜ μˆ˜ν–‰ μ „, 후에 데이터 λͺ¨λΈμ˜ λͺ¨λ“  μ œμ•½μ‘°κ±΄(PK, FK...)을 λ§Œμ‘±ν•˜λŠ” 것을 톡해 보μž₯ν•œλ‹€.

즉, ν•œ ν…Œμ΄λΈ”μ—μ„œ PK의 μ œμ•½μ‘°κ±΄μ΄ λ³€κ²½λ˜λ©΄ λ‹€λ₯Έ ν…Œμ΄λΈ”μ—μ„œ FK의 μ œμ•½μ‘°κ±΄λ„ λ³€κ²½λ˜μ–΄μ•Ό ν•œλ‹€. ν•œ μͺ½μ˜ ν…Œμ΄λΈ”μ—λ§Œ 데이터 변경사항이 이루어지면 μ•ˆλ˜λŠ” 것이닀.

μ–΄λ–€ μ΄λ²€νŠΈμ™€ 쑰건이 λ°œμƒν–ˆμ„ λ•Œ, 트리거λ₯Ό 톡해 보μž₯ν•œλ‹€.

νŠΈλ¦¬κ±°λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ΄ μžλ™μ μœΌλ‘œ μˆ˜ν–‰ν•  λ™μž‘μ„ λͺ…μ‹œν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

격리성 (Isolation)

  • νŠΈλžœμž­μ…˜ μˆ˜ν–‰ μ‹œ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ μž‘μ—…μ΄ 끼어듀지 λͺ»ν•˜λ„둝 보μž₯ν•˜λŠ” 것을 λ§ν•œλ‹€.
  • νŠΈλžœμž­μ…˜λΌλ¦¬λŠ” μ„œλ‘œλ₯Ό κ°„μ„­ν•  수 μ—†λ‹€.

격리성(고립성) 보μž₯

νŠΈλžœμž­μ…˜μ΄ 고립성을 보μž₯ν•˜λŠ” 방법에 λŒ€ν•΄ μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” 병행 νŠΈλžœμž­μ…˜μ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„μ•Ό ν•œλ‹€.

1. 병행 처리(concurrent processing)

CPUκ°€ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ²˜λ¦¬ν•˜λŠ” κ²ƒμ²˜λŸΌ, νŠΈλžœμž­μ…˜μ— 정해진 μ‹œκ°„μ„ ν• λ‹Ήν•΄μ„œ μž‘μ—…μ„ ν•˜λ‹€κ°€ λΆ€μ—¬λœ μ‹œκ°„μ΄ λλ‚˜λ©΄, λ‹€λ₯Έ νŠΈλž™μž­μ…˜μ„ μ‹€ν–‰ν•˜λŠ” 이런 λ°©μ‹μœΌλ‘œ νŠΈλžœμž­μ…˜λ“€μ„ μ‘°κΈˆμ”© μ²˜λ¦¬ν•˜λŠ” 것을 λ§ν•œλ‹€.

그런데 μ΄λ ‡κ²Œ 되면 λ§Žμ€ νŠΈλžœμž­μ…˜λ“€μ΄ μ‘°κΈˆμ”© μ²˜λ¦¬λ˜λŠ” κ³Όμ •μ—μ„œ κ³΅ν†΅λœ 데이터λ₯Ό μ‘°μž‘ν•˜κ²Œ λ˜λŠ”λ°, 이 경우 데이터가 ν˜Όλž€μŠ€λŸ¬μ›Œ 질 수 μžˆλ‹€.

지속성 (Durability)

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