Skip to content

Latest commit

Β 

History

History
82 lines (63 loc) Β· 7.65 KB

File metadata and controls

82 lines (63 loc) Β· 7.65 KB

νŠΈλžœμž­μ…˜μ΄λž€

논리적인 μž‘μ—… 셋을 λͺ¨λ‘ μ™„λ²½ν•˜κ²Œ μ²˜λ¦¬ν•˜κ±°λ‚˜, λ˜λŠ” μ²˜λ¦¬ν•˜μ§€ λͺ»ν–ˆμ„ 경우 원 μƒνƒœλ‘œ 볡ꡬ해 μž‘μ—…μ˜ μΌλΆ€λ§Œ μ μš©λ˜λŠ” ν˜„μƒμ΄ λ°œμƒν•˜μ§€ μ•Šκ²Œ λ§Œλ“€μ–΄μ£ΌλŠ” κΈ°λŠ₯이닀. - 즉 완전성을 보μž₯ν•΄μ£ΌλŠ”κ²ƒ!! μ‚¬μš©μžμ˜ μž…μž₯에선 μž‘μ—…μ˜ 논리적 μž‘μ—…λ‹¨μœ„λ‘œ μ΄ν•΄ν•˜κ³ 

μ‹œμŠ€ν…œμ˜ μž…μž₯에선 데이터듀을 μ ‘κ·Ό λ˜λŠ” λ³€κ²½ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ λ‹¨μœ„λ‘œ μ΄ν•΄ν•œλ‹€.

νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€κΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” μž‘μ—…λ‹¨μœ„(λ₯Ό κ΅¬μ„±ν•˜λŠ” μ—°μ‚°λ“€μ˜ μ§‘ν•©)

μ—¬κΈ°μ„œ DB의 μƒνƒœλ³€ν™”λž€ SQLμ§ˆμ˜μ–΄λ₯Ό 톡해 db에 μ ‘κ·Όν•˜λŠ”κ²ƒμ„ μ˜λ―Έν•˜λŠ”λ° select, insert, delete, update κ°€ μžˆλ‹€.

  • μœ„μ—μ„œ λ§ν•˜λŠ” μž‘μ—…λ‹¨μœ„λŠ” - λ§Žμ€ SQL λͺ…령문듀을 μ‚¬λžŒμ΄ μ •ν•˜λŠ” 기쀀에 따라 μ •ν•˜λŠ”κ²ƒμ„ λ§ν•œλ‹€. 예) Aκ³„μ’Œμ—μ„œ Bκ³„μ’Œλ‘œ λˆμ„ 이체할 λ•Œ
  1. Aκ³„μ’Œμ˜ μž”μ•‘μ„ ν™•μΈν•œλ‹€.
  2. Aκ³„μ’Œμ—μ„œ 이체할 κΈˆμ•‘μ„ λΊ€ λ‚˜λ¨Έμ§€λ₯Ό μ €μž₯ν•œλ‹€.
  3. Bκ³„μ’Œμ˜ μž”μ•‘μ„ ν™•μΈν•œλ‹€.
  4. Bκ³„μ’Œμ—μ„œ 이체할 κΈˆμ•‘μ„ λ”ν•œ κΈˆμ•‘μ„ μ €μž₯ν•œλ‹€.

μœ„ μ˜ˆμ‹œλŠ” μΆœκΈˆμ— λŒ€ν•œ UPDATE와 μž…κΈˆμ— λŒ€ν•œ UPDATE문이 μ‚¬μš©μ΄ λ˜μ—ˆλŠ”λ° 이λ₯Ό ν†΅ν‹€μ–΄μ„œ κ³„μ’Œμ΄μ²΄λΌλŠ” ν•˜λ‚˜μ˜ νŠΈλž™μž­μ…˜μ„ κ΅¬μ„±ν•œκ²ƒμ΄λ‹€.

ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ€ Commitλ˜κ±°λ‚˜ Rollbackλ˜λŠ”λ°

  • Commit - μž…μΆœκΈˆ UPDATE λͺ¨λ‘ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜λŠ”κ²ƒ (μ •μƒμ μœΌλ‘œ μ™„λ£Œλœλ‹€λ©΄ 연산을 마치고 μ΅œμ’…μ μœΌλ‘œλŠ” νŠΈλžœμž­μ…˜ κ΄€λ¦¬μžμ—κ²Œ μ•Œλ €μ€€λ‹€.)

  • Rollback - μž‘μ—… λ‹¨μœ„μ— μ†ν•˜λŠ” 쿼리쀑 ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•œλ‹€λ©΄ λͺ¨λ“  쿼리문을 μ·¨μ†Œν•˜κ³  μ΄μ „μƒνƒœλ‘œ λŒλ €λ†“λŠ”κ²ƒμ„ 의미 (이 λ•ŒλŠ” ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ„ μž¬μ‹œμž‘ν•˜κ±°λ‚˜ νκΈ°ν•œλ‹€.)

νŠΈλžœμž­μ…˜ νŠΉμ§•(ACID) - νŠΈλžœμž­μ…˜μ€ μ•„λž˜μ˜ 4κ°€μ§€ νŠΉμ§•μ„ λ§Œμ‘±ν•΄μ•Όν•œλ‹€.

  • μ›μžμ„±(Atomicity) νŠΈλžœμž­μ…˜μ΄ DB에 λͺ¨λ‘ λ°˜μ˜λ˜κ±°λ‚˜, μ „ν˜€ λ°˜μ˜λ˜μ§€ μ•Šμ•„μ•Όν•œλ‹€. 즉 쀑간에 였λ₯˜κ°€ λ°œμƒν•œλ‹€λ©΄ νŠΈλžœμž­μ…˜μ— ν•΄λ‹Ήν•˜λŠ” μ–΄λ– ν•œ μž‘μ—…λ„ μˆ˜ν–‰λ˜μ„œλŠ” μ•ˆλœλ‹€.
  • 일관성(Consistency) νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλœ λ‹€μŒμ˜ μƒνƒœμ—μ„œλ„ νŠΈλžœμž­μ…˜μ΄ μΌμ–΄λ‚˜κΈ° μ „μ˜ 상황과 λ™μΌν•˜κ²Œ λ°μ΄ν„°μ˜ 일관성을 보μž₯ν•΄μ•Ό ν•œλ‹€.
  • 고립성(Isolation) 각각의 νŠΈλžœμž­μ…˜μ€ μ„œλ‘œ 간섭없이 λ…λ¦½μ μœΌλ‘œ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•œλ‹€. 즉 μ–΄λ–€ νŠΈλžœμž­μ…˜λ„ λ‹€λ₯Έ νŠΈλžœμž­μ…˜ 연산에 끼어듀 수 μ—†λ‹€.
  • 지속성(Durability) νŠΈλžœμž­μ…˜μ΄ μ •μƒμ μœΌλ‘œ μ’…λ£Œλœ λ‹€μŒμ—λŠ” 영ꡬ적으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— μž‘μ—…μ˜ κ²°κ³Όκ°€ μ €μž₯λ˜μ–΄μ•Ό ν•œλ‹€.

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

transaction

  • Active(ν™œλ™) νŠΈλžœμž­μ…˜μ˜ ν™œλ™ μƒνƒœ. νŠΈλžœμž­μ…˜μ΄ 싀행쀑이며 λ™μž‘μ€‘μΈ μƒνƒœ
  • Partially committed(λΆ€λΆ„ μ™„λ£Œ) νŠΈλžœμž­μ…˜μ˜ commit λͺ…령이 λ„μ°©ν•œ μƒνƒœ, νŠΈλžœμž­μ…˜μ˜ commit이전 sql문이 μ‹€ν–‰λ˜κ³  commit만 λ‚¨μ€μƒνƒœ = 즉 commit λͺ…령이 μ‹€ν–‰λ˜κΈ° 직전 μƒνƒœ
  • Failed(μž₯μ• ) νŠΈλžœμž­μ…˜ μ‹€νŒ¨ μƒνƒœ. νŠΈλžœμž­μ…˜μ΄ 더이상 μ •μƒμ μœΌλ‘œ μ§„ν–‰ν•  수 μ—†λŠ” μƒνƒœ
  • Committed(μ™„λ£Œ) νŠΈλžœμž­μ…˜ μ™„λ£Œμƒνƒœ
  • Aborted(철회) νŠΈλžœμž­μ…˜ μ·¨μ†Œ μƒνƒœ. νŠΈλžœμž­μ…˜μ΄ μ·¨μ†Œλ˜κ³  νŠΈλžœμž­μ…˜ μ‹€ν–‰ 이전 λ°μ΄ν„°λ‘œ λŒμ•„κ°„ μƒνƒœ

νŠΈλžœμž­μ…˜ μ‚¬μš©ν•  λ•Œ μ£Όμ˜ν•  점

νŠΈλžœμž­μ…˜μ€ κΌ­ ν•„μš”ν•œ μ΅œμ†Œμ˜ μ½”λ“œμ—λ§Œ μž‘μ„±ν•˜λŠ”κ²Œ μ’‹λ‹€.(νŠΈλžœμž­μ…˜μ˜ λ²”μœ„λ₯Ό μ΅œμ†Œν™”μ‹œμΌœλΌ) 일반적으둜 λ°μ΄ν„°λ² μ΄μŠ€μ˜ 컀λ„₯μ…˜μ€ κ°œμˆ˜κ°€ μ œν•œμ μΈλ°, 각 λ‹¨μœ„ ν”„λ‘œκ·Έλž¨μ΄ 컀λ„₯μ…˜μ„ μ†Œμœ ν•˜λŠ” μ‹œκ°„μ΄ κΈΈμ–΄μ§„λ‹€λ©΄ μ‚¬μš©κ°€λŠ₯ν•œ μ—¬μœ  컀λ„₯μ…˜μ˜ κ°œμˆ˜λŠ” μ€„μ–΄λ“€κ²Œ λœλ‹€. κ·ΈλŸ¬λ‹€ μ–΄λŠ μˆœκ°„λΆ€ν„°λŠ” 각 λ‹¨μœ„ ν”„λ‘œκ·Έλž¨μ—μ„œ 컀λ„₯μ…˜μ„ κ°€μ Έκ°€κΈ° μœ„ν•΄ κΈ°λ‹€λ €μ•Ό ν•˜λŠ” 상황이 λ°œμƒν•  μˆ˜λ„ μžˆλ‹€.

νŠΈλžœμž­μ…˜ κ²©λ¦¬μˆ˜μ€€

Isolation Level

  • νŠΈλžœμž­μ…˜μ—μ„œ 일관성이 μ—†λŠ” 데이터λ₯Ό ν—ˆμš©ν•˜λ„λ‘ ν•˜λŠ” μˆ˜μ€€

Isolation Level 의 ν•„μš”μ„±

  • λ°μ΄ν„°λ² μ΄μŠ€λŠ” ACID 같이 νŠΈλžœμž­μ…˜μ΄ μ›μžμ μ΄λ©΄μ„œλ„ 독립적인 μˆ˜ν–‰μ„ ν•˜λ„λ‘ ν•œλ‹€.
  • κ·Έλž˜μ„œ Locking μ΄λΌλŠ” κ°œλ…μ΄ λ“±μž₯ν•œλ‹€.
    • νŠΈλžœμž­μ…˜μ΄ DBλ₯Ό λ‹€λ£¨λŠ” λ™μ•ˆ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ κ΄€μ—¬ν•˜μ§€ λͺ»ν•˜κ²Œ λ§‰λŠ” 것
  • ν•˜μ§€λ§Œ 무쑰건적인 Locking으둜 λ™μ‹œμ— μˆ˜ν–‰λ˜λŠ” λ§Žμ€ νŠΈλžœμž­μ…˜λ“€μ„ μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ˜λ©΄ DB의 μ„±λŠ₯은 λ–¨μ–΄μ§€κ²Œ λœλ‹€.
  • λ°˜λŒ€λ‘œ 응닡성을 높이기 μœ„ν•΄ Locking λ²”μœ„λ₯Ό 쀄인닀면 잘λͺ»λœ 값이 처리 될 μ—¬μ§€κ°€ μžˆλ‹€.
  • κ·Έλž˜μ„œ μ΅œλŒ€ν•œ 효율적인 Locking 방법이 ν•„μš”ν•˜λ‹€.

Isolation Level의 μ’…λ₯˜(0 ~ 3κΉŒμ§€ 총 4단계) Read Uncommitted (레벨 0)

  • SELECT λ¬Έμž₯이 μˆ˜ν–‰λ˜λŠ” λ™μ•ˆ ν•΄λ‹Ή 데이터에 Shared Lock이 걸리지 μ•ŠλŠ” LevelνŠΈλžœμž­μ…˜μ— μ²˜λ¦¬μ€‘μΈ ν˜Ήμ€ 아직 μ»€λ°‹λ˜μ§€ μ•Šμ€ 데이터λ₯Ό λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ μ½λŠ” 것을 ν—ˆμš©ν•œλ‹€.λ”°λΌμ„œ, μ–΄λ–€ μ‚¬μš©μžκ°€ AλΌλŠ” 데이터λ₯Ό BλΌλŠ” λ°μ΄ν„°λ‘œ λ³€κ²½ν•˜λŠ” λ™μ•ˆ λ‹€λ₯Έ μ‚¬μš©μžλŠ” 아직 μ™„λ£Œλ˜μ§€ μ•Šμ€(Uncommitted ν˜Ήμ€ Dirty) νŠΈλžœμž­μ…˜μ΄μ§€λ§Œ λ³€κ²½λœ 데이터인 Bλ₯Ό 읽을 수 μžˆλ‹€.λ°μ΄ν„°λ² μ΄μŠ€μ˜ 일관성을 μœ μ§€ν•  수 μ—†λ‹€.

Read Committed (레벨 1)

  • SELECT λ¬Έμž₯이 μˆ˜ν–‰λ˜λŠ” λ™μ•ˆ ν•΄λ‹Ή 데이터에 Shared Lock이 κ±Έλ¦¬λŠ” LevelνŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰λ˜λŠ” λ™μ•ˆ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ μ ‘κ·Όν•  수 μ—†μ–΄ λŒ€κΈ°ν•˜κ²Œ λœλ‹€.Commit이 이루어진 νŠΈλžœμž­μ…˜λ§Œ μ‘°νšŒν•  수 μžˆλ‹€.λ”°λΌμ„œ, μ–΄λ–€ μ‚¬μš©μžκ°€ AλΌλŠ” 데이터λ₯Ό BλΌλŠ” λ°μ΄ν„°λ‘œ λ³€κ²½ν•˜λŠ” λ™μ•ˆ λ‹€λ₯Έ μ‚¬μš©μžλŠ” ν•΄λ‹Ή 데이터에 μ ‘κ·Όν•  수 μ—†λ‹€.SQL Serverκ°€ Default둜 μ‚¬μš©ν•˜λŠ” Isolation Level

Repeatable Read (레벨 2)

  • νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ SELECT λ¬Έμž₯이 μ‚¬μš©ν•˜λŠ” λͺ¨λ“  데이터에 Shared Lock이 κ±Έλ¦¬λŠ” LevelνŠΈλžœμž­μ…˜μ΄ λ²”μœ„ λ‚΄μ—μ„œ μ‘°νšŒν•œ λ°μ΄ν„°μ˜ λ‚΄μš©μ΄ 항상 동일함을 보μž₯ν•œλ‹€.λ”°λΌμ„œ, λ‹€λ₯Έ μ‚¬μš©μžλŠ” κ·Έ μ˜μ—­μ— ν•΄λ‹Ήλ˜λŠ” 데이터에 λŒ€ν•œ μˆ˜μ •μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€.

Serializable (레벨 3)

  • νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ SELECT λ¬Έμž₯이 μ‚¬μš©ν•˜λŠ” λͺ¨λ“  데이터에 Shared Lock이 κ±Έλ¦¬λŠ” Levelμ™„λ²½ν•œ 읽기 일관성 λͺ¨λ“œλ₯Ό μ œκ³΅ν•œλ‹€.λ”°λΌμ„œ, λ‹€λ₯Έ μ‚¬μš©μžλŠ” κ·Έ μ˜μ—­μ— ν•΄λ‹Ήλ˜λŠ” 데이터에 λŒ€ν•œ μˆ˜μ • 및 μž…λ ₯이 λΆˆκ°€λŠ₯ν•˜λ‹€.

Isolation level 쑰정은 λ™μ‹œμ„±μ΄ μ¦κ°€λ˜λŠ”λ° λ°˜ν•΄ 데이터 무결성에 λ¬Έμ œκ°€ λ°œμƒν•  수 있고, λ°μ΄ν„°μ˜ 무결성을 μœ μ§€ν•˜λŠ” 데 λ°˜ν•΄ λ™μ‹œμ„±μ΄ λ–¨μ–΄μ§ˆ 수 μžˆλ‹€. 레벨이 λ†’μ•„μ§ˆμˆ˜λ‘ λΉ„μš©μ΄ λ†’μ•„μ§„λ‹€.

νŠΈλžœμž­μ…˜κ³Ό Lock

잠금(Lock)κ³Ό νŠΈλžœμž­μ…˜μ€ μ„œλ‘œ λΉ„μŠ·ν•œ κ°œλ… κ°™μ§€λ§Œ 사싀 μž κΈˆμ€ λ™μ‹œμ„±μ„ μ œμ–΄ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯이고 νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°μ˜ 정합성을 보μž₯ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯이닀. μž κΈˆμ€ μ—¬λŸ¬ 컀λ„₯μ…˜μ—μ„œ λ™μ‹œμ— λ™μΌν•œ μžμ›μ„ μš”μ²­ν•  경우 μˆœμ„œλŒ€λ‘œ ν•œ μ‹œμ μ—λŠ” ν•˜λ‚˜μ˜ 컀λ„₯μ…˜λ§Œ λ³€κ²½ν•  수 있게 ν•΄μ£ΌλŠ” 역할을 ν•œλ‹€. μ—¬κΈ°μ„œ μžμ›μ€ λ ˆμ½”λ“œλ‚˜ ν…Œμ΄λΈ”μ„ λ§ν•œλ‹€. μ΄μ™€λŠ” 쑰금 λ‹€λ₯΄κ²Œ νŠΈλžœμž­μ…˜μ€ κΌ­ μ—¬λŸ¬ 개의 λ³€κ²½ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 쿼리가 μ‘°ν•©λ˜μ—ˆμ„ λ•Œλ§Œ μ˜λ―ΈμžˆλŠ” κ°œλ…μ€ μ•„λ‹ˆλ‹€. νŠΈλžœμž­μ…˜μ€ ν•˜λ‚˜μ˜ 논리적인 μž‘μ—… μ…‹ 쀑 ν•˜λ‚˜μ˜ 쿼리가 μžˆλ“  두 개 μ΄μƒμ˜ 쿼리가 μžˆλ“  관계없이 논리적인 μž‘μ—… μ…‹ μžμ²΄κ°€ 100% μ μš©λ˜κ±°λ‚˜ 아무것도 μ μš©λ˜μ§€ μ•Šμ•„μ•Ό 함을 보μž₯ν•˜λŠ” 것이닀. 예λ₯Ό λ“€λ©΄ HW μ—λŸ¬ λ˜λŠ” SW μ—λŸ¬μ™€ 같은 문제둜 인해 μž‘μ—…μ— μ‹€νŒ¨κ°€ μžˆμ„ 경우, νŠΉλ³„ν•œ λŒ€μ±…μ΄ ν•„μš”ν•˜κ²Œ λ˜λŠ”λ° μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 것이닀.