1. κ°μ
λ©ν°μ€λ λ νλ‘κ·Έλλ°μ΄λ λ€μ€ νΈλμμ μ μ²λ¦¬νλ λ°μ΄ν°λ² μ΄μ€ νκ²½μμ κ°μ₯ νΌνκ³ μΆμ λ¬Έμ μ€ νλκ° λ°λ‘ **λ°λλ½(Deadlock, κ΅μ°© μν)**μ λλ€. λ κ° μ΄μμ νλ‘μΈμ€λ νΈλμμ μ΄ μλ‘κ° μ μ νκ³ μλ μμ(Lock)μ κΈ°λ€λ¦¬λ©° 무νν λκΈ°νλ μνλ₯Ό λ§ν©λλ€. μ΄ κΈμμλ λ°λλ½μ΄ μ λ°μνκ³ μ΄λ»κ² ν΄κ²°ν μ μλμ§ μ λ¦¬ν΄ λ΄ λλ€.
2. λ°λλ½μ 4κ°μ§ λ°μ 쑰건
λ°λλ½μ΄ λ°μνλ €λ©΄ λ€μ 4κ°μ§ μ‘°κ±΄μ΄ λͺ¨λ μΆ©μ‘±λμ΄μΌ ν©λλ€. νλλΌλ κΉ¨μ§λ©΄ λ°λλ½μ λ°μνμ§ μμ΅λλ€. (μ½νλ§ μ‘°κ±΄, Coffman conditions)
- μνΈ λ°°μ (Mutual Exclusion): ν λ²μ ν νλ‘μΈμ€λ§ ν΄λΉ μμμ μ¬μ©ν μ μμ΄μΌ ν©λλ€. (DBμ λ°°ν λ½)
- μ μ μ λκΈ° (Hold and Wait): μ΅μν νλμ μμμ μ μ ν μνμμ λ€λ₯Έ νλ‘μΈμ€κ° μ μ νκ³ μλ μμμ μΆκ°λ‘ κΈ°λ€λ €μΌ ν©λλ€.
- λΉμ μ (No Preemption): λ€λ₯Έ νλ‘μΈμ€κ° μ μ ν μμμ κ°μ λ‘ λΊμ μ μμ΄μΌ ν©λλ€.
- νν λκΈ° (Circular Wait): νλ‘μΈμ€λ€μ΄ μνμ μ΄λ£¨λ©° μλ‘μ μμμ λκΈ°ν΄μΌ ν©λλ€. (Aλ Bμ μμμ, Bλ Aμ μμμ λκΈ°)
3. DB νΈλμμ μμμ λ°λλ½ μλ리μ€
κ°μ₯ ννκ² λ°μνλ DB λ°λλ½μ μλ‘ λ€λ₯Έ νΈλμμ μ΄ μκ°λ¦° μμλ‘ λ½μ νλνλ €κ³ ν λ λ°μν©λλ€.
sequenceDiagram participant Tx1 as νΈλμμ 1 (μ¬μ©μ A) participant Tx2 as νΈλμμ 2 (μ¬μ©μ B) participant ResA as μμ A (Account 1) participant ResB as μμ B (Account 2) Tx1->>ResA: 1. Lock νλ (μ μ ) Tx2->>ResB: 2. Lock νλ (μ μ ) Tx1->>ResB: 3. Lock μμ² (Tx2κ° ν΄μ ν λκΉμ§ λκΈ°) Tx2->>ResA: 4. Lock μμ² (Tx1μ΄ ν΄μ ν λκΉμ§ λκΈ°) Note over Tx1,Tx2: π₯ 무ν λκΈ° (Deadlock)
μ μλ리μ€μμ Tx1μ ResBλ₯Ό κΈ°λ€λ¦¬κ³ , Tx2λ ResAλ₯Ό κΈ°λ€λ¦¬λ©° μλ‘κ° λλκΈ°λ§μ μμν κΈ°λ€λ¦½λλ€. RDBMSλ λ³΄ν΅ λ°λλ½ κ°μ§κΈ°(Deadlock Detector)κ° μμ΄μ μ΄λ° μν λκΈ°λ₯Ό κ°μ§νλ©΄ νΈλμμ μ€ νλλ₯Ό λ‘€λ°±(Rollback)μμΌ λ°λλ½μ κΉΉλλ€.
4. λ°λλ½ ν΄κ²° λ° μλ°© λ°©λ²
λ°λλ½μ κ°μ§νκ³ λ‘€λ°±μν€λ λΉμ©μ΄ λͺΉμ ν¬κΈ° λλ¬Έμ, μ μ΄μ λ°μνμ§ μλλ‘ μλ°©νλ κ²μ΄ κ°μ₯ μ’μ΅λλ€.
4-1. μΌκ΄λ λ½ νλ μμ κ°μ (Lock Ordering)
κ°μ₯ νμ€ν μλ°© λ°©λ²μ λλ€. νν λκΈ°(Circular Wait) 쑰건μ κΉ¨λ¨λ¦¬λ λ°©μμ λλ€. λͺ¨λ νΈλμμ μ΄ νμ κ°μ μμλ‘ μμ(ν μ΄λΈμ΄λ λ μ½λ)μ μ κ·Όνλλ‘ κ°μ ν©λλ€. μλ₯Ό λ€μ΄, μ¬λ¬ κ³μ’λ₯Ό μ λ°μ΄νΈν΄μΌ νλ€λ©΄ νμ PK(ID)κ° μμ μμλλ‘ λ½μ νλνλλ‘ λ‘μ§μ μμ±ν©λλ€.
4-2. νΈλμμ λ²μ μ΅μν
νΈλμμ μ΄ κΈΈμ΄μ§μλ‘ μμμ μ μ νλ(Hold) μκ°μ΄ κΈΈμ΄μ§λλ€. μΈλΆ API νΈμΆ λ± μκ°μ΄ μ€λ 걸리λ μμ μ νΈλμμ λ°μΌλ‘ λΉΌκ³ , DB νΈλμμ μ μ΅λν μ§§κ³ κ°κ²°νκ² μ μ§ν©λλ€.
4-3. λ½ νμμμ (Lock Timeout) μ€μ
μμν λκΈ°νλ κ²μ λ§κΈ° μν΄ λ½μ κΈ°λ€λ¦¬λ μ΅λ μκ°μ μ€μ ν©λλ€. νμμμμ΄ λ°μνλ©΄ μμΈκ° λμ Έμ§κ³ νΈλμμ μ΄ λ‘€λ°±λμ΄ λ€λ₯Έ νλ‘μΈμ€κ° μ§νλ μ μκ² ν©λλ€.
λ°λλ½μ μμ€ν μ΄ λ³΅μ‘ν΄μ§μλ‘ λΉλ²νκ² λ§μ£ΌμΉλ λ¬Έμ μ λλ€. λΉμ¦λμ€ λ‘μ§μ μ€κ³ν λ **βμ΄λ€ μμλ‘ μμμ μ κΈ κ²μΈκ°β**λ₯Ό νμ κ³ λ―Όνλ μ΅κ΄μ΄ νμν©λλ€.