λ Όλ¦¬μ μΈ μμ μ μ λͺ¨λ μλ²½νκ² μ²λ¦¬νκ±°λ, λλ μ²λ¦¬νμ§ λͺ»νμ κ²½μ° μ μνλ‘ λ³΅κ΅¬ν΄ μμ μ μΌλΆλ§ μ μ©λλ νμμ΄ λ°μνμ§ μκ² λ§λ€μ΄μ£Όλ κΈ°λ₯μ΄λ€. - μ¦ μμ μ±μ 보μ₯ν΄μ£Όλκ²!! μ¬μ©μμ μ μ₯μμ μμ μ λ Όλ¦¬μ μμ λ¨μλ‘ μ΄ν΄νκ³
μμ€ν μ μ μ₯μμ λ°μ΄ν°λ€μ μ κ·Ό λλ λ³κ²½νλ νλ‘κ·Έλ¨μ λ¨μλ‘ μ΄ν΄νλ€.
νΈλμμ μ λ°μ΄ν°λ² μ΄μ€μ μνλ₯Ό λ³νμν€κΈ° μν΄ μννλ μμ λ¨μ(λ₯Ό ꡬμ±νλ μ°μ°λ€μ μ§ν©)
μ¬κΈ°μ DBμ μνλ³νλ SQLμ§μμ΄λ₯Ό ν΅ν΄ dbμ μ κ·Όνλκ²μ μλ―Ένλλ° select, insert, delete, update κ° μλ€.
- μμμ λ§νλ μμ λ¨μλ - λ§μ SQL λͺ λ Ήλ¬Έλ€μ μ¬λμ΄ μ νλ κΈ°μ€μ λ°λΌ μ νλκ²μ λ§νλ€. μ) Aκ³μ’μμ Bκ³μ’λ‘ λμ μ΄μ²΄ν λ
- Aκ³μ’μ μμ‘μ νμΈνλ€.
- Aκ³μ’μμ μ΄μ²΄ν κΈμ‘μ λΊ λλ¨Έμ§λ₯Ό μ μ₯νλ€.
- Bκ³μ’μ μμ‘μ νμΈνλ€.
- Bκ³μ’μμ μ΄μ²΄ν κΈμ‘μ λν κΈμ‘μ μ μ₯νλ€.
μ μμλ μΆκΈμ λν UPDATEμ μ κΈμ λν UPDATEλ¬Έμ΄ μ¬μ©μ΄ λμλλ° μ΄λ₯Ό ν΅νμ΄μ κ³μ’μ΄μ²΄λΌλ νλμ νΈλμμ μ ꡬμ±νκ²μ΄λ€.
νλμ νΈλμμ μ Commitλκ±°λ Rollbackλλλ°
-
Commit - μ μΆκΈ UPDATE λͺ¨λ μ±κ³΅μ μΌλ‘ μλ£λλκ² (μ μμ μΌλ‘ μλ£λλ€λ©΄ μ°μ°μ λ§μΉκ³ μ΅μ’ μ μΌλ‘λ νΈλμμ κ΄λ¦¬μμκ² μλ €μ€λ€.)
-
Rollback - μμ λ¨μμ μνλ μΏΌλ¦¬μ€ νλλΌλ μ€ν¨νλ€λ©΄ λͺ¨λ 쿼리문μ μ·¨μνκ³ μ΄μ μνλ‘ λλ €λλκ²μ μλ―Έ (μ΄ λλ ν΄λΉ νΈλμμ μ μ¬μμνκ±°λ νκΈ°νλ€.)
- μμμ±(Atomicity) νΈλμμ μ΄ DBμ λͺ¨λ λ°μλκ±°λ, μ ν λ°μλμ§ μμμΌνλ€. μ¦ μ€κ°μ μ€λ₯κ° λ°μνλ€λ©΄ νΈλμμ μ ν΄λΉνλ μ΄λ ν μμ λ μνλμλ μλλ€.
- μΌκ΄μ±(Consistency) νΈλμμ μ΄ μλ£λ λ€μμ μνμμλ νΈλμμ μ΄ μΌμ΄λκΈ° μ μ μν©κ³Ό λμΌνκ² λ°μ΄ν°μ μΌκ΄μ±μ 보μ₯ν΄μΌ νλ€.
- κ³ λ¦½μ±(Isolation) κ°κ°μ νΈλμμ μ μλ‘ κ°μμμ΄ λ 립μ μΌλ‘ μνλμ΄μΌ νλ€. μ¦ μ΄λ€ νΈλμμ λ λ€λ₯Έ νΈλμμ μ°μ°μ λΌμ΄λ€ μ μλ€.
- μ§μμ±(Durability) νΈλμμ μ΄ μ μμ μΌλ‘ μ’ λ£λ λ€μμλ μꡬμ μΌλ‘ λ°μ΄ν°λ² μ΄μ€μ μμ μ κ²°κ³Όκ° μ μ₯λμ΄μΌ νλ€.
- 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)κ³Ό νΈλμμ μ μλ‘ λΉμ·ν κ°λ κ°μ§λ§ μ¬μ€ μ κΈμ λμμ±μ μ μ΄νκΈ° μν κΈ°λ₯μ΄κ³ νΈλμμ μ λ°μ΄ν°μ μ ν©μ±μ 보μ₯νκΈ° μν κΈ°λ₯μ΄λ€. μ κΈμ μ¬λ¬ 컀λ₯μ μμ λμμ λμΌν μμμ μμ²ν κ²½μ° μμλλ‘ ν μμ μλ νλμ 컀λ₯μ λ§ λ³κ²½ν μ μκ² ν΄μ£Όλ μν μ νλ€. μ¬κΈ°μ μμμ λ μ½λλ ν μ΄λΈμ λ§νλ€. μ΄μλ μ‘°κΈ λ€λ₯΄κ² νΈλμμ μ κΌ μ¬λ¬ κ°μ λ³κ²½ μμ μ μννλ μΏΌλ¦¬κ° μ‘°ν©λμμ λλ§ μλ―Έμλ κ°λ μ μλλ€. νΈλμμ μ νλμ λ Όλ¦¬μ μΈ μμ μ μ€ νλμ μΏΌλ¦¬κ° μλ λ κ° μ΄μμ μΏΌλ¦¬κ° μλ κ΄κ³μμ΄ λ Όλ¦¬μ μΈ μμ μ μμ²΄κ° 100% μ μ©λκ±°λ μ무κ²λ μ μ©λμ§ μμμΌ ν¨μ 보μ₯νλ κ²μ΄λ€. μλ₯Ό λ€λ©΄ HW μλ¬ λλ SW μλ¬μ κ°μ λ¬Έμ λ‘ μΈν΄ μμ μ μ€ν¨κ° μμ κ²½μ°, νΉλ³ν λμ± μ΄ νμνκ² λλλ° μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νλ κ²μ΄λ€.
