DBMSμ—μ„œ 데이터λ₯Ό λ‹€λ£¨λŠ” 논리적인 μž‘μ—…μ˜ λ‹¨μœ„

 
 

  • νŠΈλžœμž­μ…˜μ„ μ •μ˜ν•˜λŠ” 이유
    • DBμ—μ„œ 데이터λ₯Ό λ‹€λ£°λ•Œ μž₯μ• κ°€ 일어날 λ•Œ 데이터λ₯Ό λ³΅κ΅¬ν•˜λŠ” μž‘μ—…μ˜ λ‹¨μœ„κ°€ λœλ‹€.
    • DBμ—μ„œ μ—¬λŸ¬ μž‘μ—…μ΄ λ™μ‹œμ— 같은 데이터λ₯Ό λ‹€λ£° λ•Œ μž‘μ—…μ„ μ„œλ‘œ λΆ„λ¦¬ν•˜λŠ” λ‹¨μœ„κ°€ λœλ‹€.

 

  • νŠΈλžœμž­μ…˜μ€ 전체가 μˆ˜ν–‰λ˜κ±°λ‚˜ λ˜λŠ” μ „ν˜€ μˆ˜ν–‰λ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€. (all or nothing)
    ex) 은행 이체 업무
BEGIN  
1\. Aκ³„μ’Œμ—μ„œ 10,000원을 μΈμΆœν•˜λŠ” UPDATEλ¬Έ  
2\. Bκ³„μ’Œμ—μ„œ 10,000원을 μž…κΈˆν•˜λŠ” UPDATEλ¬Έ  
END  

 
 

  • νŠΈλžœμž­μ…˜μ˜ μˆ˜ν–‰ κ³Όμ •
  1. νŠΈλžœμž­μ…˜ 1을 μƒμ„±ν•œλ‹€
  2. νŠΈλžœμž­μ…˜ 2λ₯Ό  μƒμ„±ν•œλ‹€
  3. T1의 값을 DBμ—μ„œ μ£ΌκΈ°μ–΅μž₯치 λ²„νΌλ‘œ μ½μ–΄μ˜¨λ‹€
  4. T2의 값을 DBμ—μ„œ μ£ΌκΈ°μ–΅μž₯치 λ²„νΌλ‘œ μ½μ–΄μ˜¨λ‹€
  5. T1μ—μ„œ λ„μ„œ 가경을 7100μ›μœΌλ‘œ μ—…λ°μ΄νŠΈ ν•œλ‹€
  6. T2μ—μ„œ λ„μ„œ 가격 +100원 κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈ ν•œλ‹€
  7. T1값을 μ£ΌκΈ°μ–΅μž₯치 λ²„νΌμ—μ„œ DB에 κΈ°λ‘ν•œλ‹€ (COMMIT) 
  8. T2값을 μ£ΌκΈ°μ–΅μž₯치 λ²„νΌμ—μ„œ DB에 κΈ°λ‘ν•œλ‹€ (COMMIT)

 

  • νŠΈλžœμž­μ…˜μ˜ μ„±μ§ˆ (ACID)
    • μ›μžμ„± (Atomicity) : νŠΈλžœμž­μ…˜μ— ν¬ν•¨λœ μž‘μ—…μ€ μ „λΆ€ μˆ˜ν–‰λ˜κ±°λ‚˜ μ „λΆ€ μˆ˜ν–‰λ˜μ§€ μ•Šμ•„μ•Όν•œλ‹€. all or nothing
    • 일관성 (Consistency) : νŠΈλžœμž­μ…˜μ„ μˆ˜ν–‰ν•˜κΈ° μ „μ΄λ‚˜ ν›„λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€λŠ” 항상 μΌκ΄€λœ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Όν•œλ‹€.
    • 고립성 (Isolation) : μˆ˜ν–‰ 쀑인 νŠΈλžœμž­μ…˜μ— λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ 끼어듀어 λ³€κ²½ 쀑인 데이터값을 ν›Όμ†ν•˜λŠ” 일이 μ—†μ–΄μ•Όν•œλ‹€.
    • 지속성 (Durability) : μˆ˜ν–‰μ„ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œν•œ νŠΈλžœμž­μ…˜μ€ λ³€κ²½ν•œ 데이터λ₯Ό 영ꡬ히 μ €μž₯ν•΄μ•Όν•œλ‹€.

 

  • λ™μ‹œμ„± μ œμ–΄ (concurrency control)
    • νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— μˆ˜ν–‰λ  λ•Œ, 일관성을 ν•΄μΉ˜μ§€ μ•Šλ„λ‘ νŠΈλžœμž­μ…˜μ˜ 데이터 접근을 μ œμ–΄ν•˜λŠ” DBMS의 κΈ°λŠ₯ 
μƒν™©νŠΈλžœμž­μ…˜1νŠΈλžœμž­μ…˜2λ°œμƒλ¬Έμ œλ™μ‹œ μ ‘κ·Ό
상황1읽기읽기문제 μ—†μŒν—ˆμš©
상황2μ½κΈ°μ“°κΈ°μ˜€μ† 읽기, 반볡 λΆˆκ°€λŠ₯ 읽기, μœ λ Ήλ°μ΄ν„° μ½κΈ°ν—ˆμš©/λΆˆκ°€ 쀑 선택
상황3쓰기쓰기갱신손싀(μ ˆλŒ€ ν—ˆμš©ν•˜λ©΄ μ•ˆ 됨)ν—ˆμš©λΆˆκ°€ (Lock을 이용)

 
 
 

  • κ°±μ‹  손싀 (lost update)
    • λ‘κ°œμ˜ νŠΈλžœμž­μ…˜μ΄ ν•œ 개의 데이터λ₯Ό λ™μ‹œμ— κ°±μ‹ (update)ν•  λ•Œ λ°œμƒ
    • λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ ˆλŒ€ λ°œμƒν•˜λ©΄ μ•ˆλ˜λŠ” ν˜„μƒ
    • T2μ—μ„œ 잘λͺ» 된 κ²°κ³Όλ₯Ό λ§Œλ“  λ‹€μŒ T1의 κ°±μ‹  μž‘μ—…μ„ λ¬΄νš¨ν™” ν•˜κ³  덧쓰기 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ²Œ 될 수 μžˆλ‹€.
      μ΄λ•Œ T1μ—μ„œ 갱신손싀 문제 κ°€ λ°œμƒν•œλ‹€.

 

  • 락(Lock)
    • 갱신손싀 문제λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ μƒλŒ€λ°© νŠΈλžœμž­μ…˜μ΄ 데이터λ₯Ό μ‚¬μš©ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό μ•Œ 수 μžˆλŠ” κ·œμΉ™μ΄ ν•„μš”ν•˜λ‹€
    • 데이터λ₯Ό μˆ˜μ • μ€‘μ΄λΌλŠ” 사싀을 μ•Œλ¦¬λŠ” λ°©λ²•μ˜ 잠금μž₯μΉ˜μ΄λ‹€
    • 곡유락 (LS, shared lock) : 읽기
      배타락 (LX, exclusive lock) : 읽고 μ“°κΈ°
μš”μ²­ / μƒνƒœLS μƒνƒœLX μƒνƒœ
LS μš”μ²­ν—ˆμš©λŒ€κΈ°
LX μš”μ²­λŒ€κΈ°λŒ€κΈ°

 
 
 

+ Recent posts