Transaction
in DB
π‘ Transaction μ΄λ?
βͺ DBμμνλ₯Ό λ³νμν€κΈ° μν΄μ μννλ μμ μ λ¨μ
βͺ λ μ΄μ μͺΌκ°€ μ μλ μ 무 μ²λ¦¬μ μ΅μ λ¨μ
βͺ λ©λͺ¨λ¦¬μ λͺ¨λ λ³νλ₯Ό νλμ μμ λ¨μλ‘ λ¬Άλλ€. νλλΌλ μ€ν¨νλ©΄ μ μ²΄κ° μ€ν¨
βͺ μ±κ³΅ νΉμ μ€ν¨ λκ°μ κ²°κ³Όλ§ μ‘΄μ¬.
μλ₯Ό λ€λ©΄, Aκ° Bμκ² 10000μμ μ΄μ²΄νλ€. νμ§λ§ μμ΄νμ΄ μ°κ²°μ λ¬Έμ λ‘ μ΄μ²΄λ₯Ό μ€ν¨νλ€.
μ΄λ΄ κ²½μ° Bμ ν΅μ₯μ 10000μμ΄ μ΄μ²΄λμ§ μμκΈ° λλ¬Έμ, μ΄μ²΄κ° μ±λ¦½λμ§ μλλ€.
μ΄ μ²λΌ Aκ° λμ μ΄μ²΄νλ νμμ Bκ° λμ λ°λ νμλ λ³κ°λ‘ λΆλ¦¬ λ μ μλ€.
λ€μλ§ν΄, μμ κ°μ μΌμ΄μ€λ νλμ κ±°λλ΄μμΌλ‘ μ²λ¦¬λμ΄μΌ νλ λ¨μΌ κ±°λμ΄λ€.
μ΄λ° κ±°λμ μ΅μ λ¨μλ₯Ό νΈλμμ μ΄λΌκ³ νλ€. νΈλμμ μ΄ μλ£ λμμ κ²½μ°λ§,
commitμ νκ³ , λ¬Έμ κ° λ°ννμ λλ λ‘€λ°±(λ€μ Aμ κ³μ’μ 10000μμ΄ λ€μ΄κ°λ€.)μ νλ€.
π‘ Transactionμ μ±μ§ - ACID
1. Atomicity (μμμ±)
νλμ νΈλ μμ λ΄μ λͺ¨λ λͺ λ Ήμ μ λΆ μ±κ³΅ν΄μΌ νλ€. β λΆλΆμ μΌλ‘ μ€νλλ©΄ μλλ μ±μ§
μ΄λ νλλΌλ μ μμ μΌλ‘ μλνμ§ μμΌλ©΄, νΈλμμ μ μ€ν¨νλ€.
μμ μμμμλ μ μ μλ―μ΄, μ΄μ²΄κ° μ€ν¨νλ©΄ μ€ν¨λ‘ λμκ°μΌνλ€λ κ²μ΄ Atomicityμ΄λ€.
SQLμμλ λ§μ°¬κ°μ§μ΄λ€. νΉμ query(μ§μλ¬Έ)λ₯Ό μ€νν λ μ€ν¨νλ λΆλΆμ΄ μλ€λ©΄ μ λΆ μ€ν¨νλ€.
2. Consistency (μΌκ΄μ±)
νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ μ΄λ£¨μ΄μ§λ©΄, μΈμ λ μΌκ΄μ± μλ λ°μ΄ν°λ² μ΄μ€ μνλ‘ λ³νλμ΄μΌ
νλ€. μ¦, λ°μ΄ν°λ² μ΄μ€μ μ μ½μ΄λ κ·μΉμ μκ±°ν λ°μ΄ν°λ² μ΄μ€μ¬μΌ νλ€λ λ» μ΄λ€.
μλ₯Ό λ€μ΄ βκ° κ³ κ°λ€μ μ΄λ¦μ΄ μμ΄μΌνλ€β λΌλ μ μ½μ΄ μλ DBμ μλ€κ³ νλ©΄,
- Case 1 : μ΄λ¦ μλ μλ‘μ΄ κ³ κ°μ μΆκ°νλ 쿼리
- Case 2 : κΈ°μ‘΄ κ³ κ°μ μ΄λ¦μ μμ νλ 쿼리
μμ νΈλμμ λ€μ βκ° κ³ κ°λ€μ μ΄λ¦μ΄ μμ΄μΌνλ€βλΌλ λ³Έλ DBμ μ μ½μ μλ°°νλ€.
μ΄λ° νΈλμμ μ΄νμ λ°μ΄ν°λ² μ΄μ€μ μνλ μΌκ΄λμ§ μμμ§λ€.
Movieμ Video ν μ΄λΈμ΄ μμ λ Video ν μ΄λΈμ κΈ°λ³Έ ν€(primary key)μΈ movie_idκ°
μΈλν€λ‘ μ‘΄μ¬νλ€κ³ κ°μ ν΄λ΄€λ€. λ§μ½ movie_idμ μ μ½ μ‘°κ±΄μ΄ Movie ν μ΄λΈμμ λ³κ²½λλ©΄,
Video ν μ΄λΈμμλ movie_idκ° λ³κ²½λμ΄μΌ νλ€.
3. Isolation (κ³ λ¦½μ±)
νλμ νΈλ μμ μ΄ λ€λ₯Έ νΈλμμ κ³Ό λ 립λμ΄μΌ νλ€λ νΉμ±μ΄λ€.
μ¦, νΈλμμ λΌλ¦¬ μλ‘ κ°μν μ μλ€.
λν μνμ€μΈ νΈλμμ μ΄ μμ ν μλ£λ λκΉμ§ λ€λ₯Έ νΈλμμ μ μνκ²°κ³Όλ₯Ό μ°Έμ‘°ν μ μλ€.
μ½κ² λ§ν΄ κ° νΈλμμ μ μμ€ν λ΄μμΈ λμμ μνλκ³ μλ λ€λ₯Έ νΈλμμ λ€μ μ μ μλ€.
μλ₯Ό λ€μ΄, λμ ν΅μ₯ μκ³ λ 10000μμ΄λ€. κ·Όλ° μΉκ΅¬A μκ² 7000μμ© λ³΄λ΄μ€μΌνκ³ ν΄λ³΄μ.
μΉκ΅¬ Aμκ² 7000μμ 보λ΄λ λμ€, κ΅ν΅λΉ 10000μμ΄ κ²°μ λ μ μμκΉ? μ λ λΆκ°νλ€.
μ΄κ² κ³ λ¦½μ±μ ν¨κ³ΌμΈ κ² κ°λ€.
μκ³ κ° 10000μμΈ ν΅μ₯μμ β7000μ μ‘κΈβκ³Ό β10000μ μΆκΈβμ λμμ μΌμ΄λμ μλλ€.
7000μ μ‘κΈμ΄ μ΄λ€μ§κ³ κ΅ν΅λΉλ λ―Έλ©μ΄ λ κ²μ΄λ€.
μ΄λ κ² κ° νμλ€μ μλ‘ κ°μν μ μκ³ , μλ‘ μ΄λ€ μ°μ°μ νλμ§λ μ μ μλ€.
4. Durability (μ§μμ±)
νλμ νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ μνλμλ€λ©΄ ν΄λΉ νΈλμμ μ λν λ‘κ·Έ(κΈ°λ‘)κ° λ¨κ³ ,
βλ°νμ μ€λ₯βλ βμμ€ν μ€λ₯βκ° λ°μνλλΌλ ν΄λΉ κΈ°λ‘μ μꡬμ μ΄μ΄μΌ νλ€λ νΉμ±μ΄λ€.
μλ₯Ό λ€μ΄, μΉκ΅¬μκ² 10000μμ μ΄μ²΄ νλλ°, ν΄λΉ μν μ΄νμ μ€λ₯κ° λ°μν΄ μ΄νμ΄ μ’ λ£κ°
λλ€κ³ κ°μ ν΄λ΄€λ€. λ§μ½ βνΈλμμ λ‘κ·Έ(μ΄μ²΄λ΄μ)βκ° λ¨μ§ μλ λ€λ©΄ λμ 10000μμ
μ΄λλ‘ κ°λμ§ μ λ μμκ° μλ€.
μ΄λ° λΆμμ¬λ₯Ό λ°©μ§νκΈ° μν΄μ λͺ¨λ νΈλμμ
μ λ‘κ·Έλ‘ λ¨κ²¨μ Έ μμ€ν
μ₯μ λ°μ μ μν
λ‘
λλ릴 μ μμ΄μΌ νλ€. λν λͺ¨λ νΈλμμ μ λ‘κ·Έμ λͺ¨λ κ²μ΄ μ μ₯λ νμλ§ μ μμ μΌλ‘
μ²λ¦¬λ βcommit μνβ λ‘ κ³ λ €λ μ μλ€.
π‘ Transaction μ°μ°
1. Commit
Commit μ°μ°μ λͺ¨λ μμ λ€μ μ μμ μΌλ‘ μ²λ¦¬νκ² λ€κ³ νμ νλ λͺ λ Ήμ΄λ‘μ, μ²λ¦¬κ³Όμ μ
DBμ μꡬν μ μ₯νλ κ²μ λ§νλ€. μ¦, νλμ νΈλμμ κ³Όμ μ μ’ λ£νλ κ²μ΄λ€.
κ·Έλ¦¬κ³ Commitμ μννλ©΄ μ΄μ λ°μ΄ν°κ° μμ ν μ λ°μ΄νΈλλ€.
2. Rollback
μμ μ€ λ¬Έμ κ° λ°μνμ¬ νΈλμμ μ μ²λ¦¬κ³Όμ μμ λ°μν λ³κ²½μ¬νμ μ·¨μνλ λͺ λ Ήμ΄λ€.
ν΄λΉ νΈλμμ μ μΌλΆκ° μ μμ μΌλ‘ μ²λ¦¬λλ€ νλλΌλ, νΈλμμ μ μμμ±μ ꡬννκΈ°
μν΄ ν΄λΉ νΈλμμ μ΄ νν λͺ¨λ μ°μ°μ μ·¨μνλ€λ νΉμ§μ κ°μ§κ³ μλ€.
ν΄λΉ μ°μ°μ νΈλμμ μ΄ μμλκΈ° μ΄μ μ μνλ‘ λλλ¦°λ€.
μ¦, λ§μ§λ§ Commitμ μλ£ν μμ μΌλ‘ λ€μ λμκ°λ€. Commitνμ¬ μ μ₯ν κ²λ§ 볡ꡬνλ€.
Rollbackμμλ ν΄λΉ νΈλμμ μ μ¬μμνκ±°λ νκΈ°νλ€.
3. Save Point
μμμ μ₯ λλ λΆλΆμ μ₯κ³Ό κ°μ λ§₯λ½μΌλ‘ μ΄ν΄ν μ μλ€. λ³΄ν΅ λ‘€λ°±μ λͺ μνλ©΄
μ½μ ,μμ ,μ λ°μ΄νΈ λ±μ μμ μ μ²΄κ° μ·¨μλλλ°, save pointλ μ μ²΄κ° μλ νΉμ λΆλΆμμ
νΈλμμ μ μ·¨μνκΈ° μν΄ μ¬μ©νλ€. save pointλ₯Ό μ°λ©΄ νμ¬μ νΈλμμ μ μκ² λΆν νλ
κ²μ΄ κ°λ₯νλ€. Save pointλ μ¬λ¬ κ°μ SQLλ¬Έμ μ€νμ μννλ νΈλμμ μ κ²½μ°μ
μ¬μ©μκ° νΈλμμ μ€κ° λ¨κ³μμ save pointλ₯Ό μ§μ ν μ μλ€.
Save pointλ₯Ό μ¬μ©νλ €λ©΄ μ·¨μνλ €λ μ§μ μ λͺ μν λ€, κ·Έ μ§μ κΉμ§ μμ μ μ·¨μνλ μμΌλ‘
μ¬μ©νλλ° μ΄ μ§μ μ save pointλΌκ³ νλ€.
save pointλ₯Ό μ§μ ν λ€ rollback to save point name
μ μ€ννλ©΄ ν΄λΉ save point
μ§μ κΉμ§ μ²λ¦¬ν μ§μ μ΄ λ‘€λ°±λλ€.
π‘ Transaction μν
Active (νλ) : νΈλμμ μ΄ μ€νμ€μΈ μν.
Failed (μ€ν¨) : νΈλμμ μ€νμ μ€λ₯κ° λ°μνμ¬ μ€λ¨λ μν.
Aborted (μ² ν) : νΈλμμ μ΄ λΉμ μμ μΌλ‘ μ’ λ£λμ΄ Rollback μ°μ°μ μνν μν.
Partially Committed (λΆλΆμλ£) : Commit μ°μ°μ΄ μ€νλκΈ° μ§μ μ μν
Committed (μλ£) : Commit μ°μ°μ μ€νν νμ μν