μ¬λ¬ μ₯λΉμμ λμκ°λ κ²μ μλ²λ€μ΄ κ°μ λ°μ΄ν°λ₯Ό λ³κ²½νλ €κ³ κ²½μνλ μν©μμλ λ°μ΄ν° 무결μ±μ 보μ₯νκΈ° μ½μ§ μμ΅λλ€. DBMSλ₯Ό λ¨ νλλ§ μ¬μ©νλ€λ©΄ DBMSκ° μ 곡νλ νΈλμμ κΈ°λ₯μ μ΄μ©νλ©΄ λμ§λ§, μ¬λ¬ DBMS μ₯λΉμ λλμ΄ μ μ₯λμ΄ μλ λ°μ΄ν°λ₯Ό ν¨κ» λ³κ²½νλ©΄μ λ°μ΄ν° 무결μ±μ μ μ§νλ €λ©΄ λλ¨ν λΉμ©μ΄ λ§μ΄ λλλ€.
μ€λ²λ°μΈ μλ² μμ§ 2λ μ κΈ(lock) κΈ°λ° λΉκ΄μ λκΈ°νλ₯Ό μ¬μ©ν©λλ€. μμ§μ΄ μ 곡νλ APIλ₯Ό μ¬μ©ν΄μ νλ‘κ·Έλλ°νλ©΄, λ°μ΄ν° 무결μ±μ μ μ§νλ©΄μ μ¬λ¬ λνλ¨ΌνΈμ κΈλ‘λ² ν μ΄λΈμ ν©μ΄μ Έ μλ λ°μ΄ν°λ₯Ό ν¨κ» λ³κ²½ν μ μμ΅λλ€.
- λνλ¨ΌνΈ νλνλκ° μ κΈ λ¨μμ λλ€.
- κ° κΈλ‘λ² ν μ΄λΈμ ν€ νλνλκ° μ κΈ λ¨μμ λλ€.
β» λνλ¨ΌνΈ μμ λ€μ΄μλ νΉμ λ°μ΄ν°λ§μ μ κΈ μλ μμ΅λλ€.
β» κΈλ‘λ² ν
μ΄λΈμ μ΄λ€ ν€λ₯Ό κ°λ νμ΄ μμ§ μ‘΄μ¬νμ§ μλλΌλ, κ·Έ ν€λ₯Ό μ κΈ μ μμ΅λλ€.
β» μμ§ μμ±νμ§ μμ λνλ¨ΌνΈλ μ κΈ μ μμ΅λλ€.
λ°μ΄ν°λ₯Ό μ½κ³ μ°κΈ° μν΄μλ Transaction κ°μ²΄λ₯Ό ν΅ν΄μΌ ν©λλ€. μμ§ μ κΈμ νλνμ§ μμ λ°μ΄ν°μ μ κ·Όνλ €κ³ νλ©΄ μμ§μ΄ μ΄λ₯Ό κ°μ§νμ¬ μμΈλ₯Ό λ°μμν€λ―λ‘, μ΄λ€ λ°μ΄ν°λ₯Ό 건λ릴 κ²μΈμ§ Transaction κ°μ²΄μ 미리 μλ €μ€μΌ ν©λλ€.
νΈλμμ
μ μμν λ κ·Έ νΈλμμ
μ΄ κ±΄λ릴 μμ μΈ λͺ¨λ μ κΈ λ¨μ(λνλ¨ΌνΈ id, κΈλ‘λ² ν
μ΄λΈ ν€)λ₯Ό Transaction κ°μ²΄μ μ λ¬νμ¬ μ κΈμ νλν©μλ€. μ΄ μ κΈμ νλμ μλΉμ€μ μ°Έμ¬νλ λͺ¨λ κ²μμλ²κ° ν¨κ» κ΄λ¦¬νλ κ²μΌλ‘, μ κΈμ νλν νΈλμμ
μ΄ λλκΈ° μ κΉμ§λ μ κ·Ό λ°μ΄ν°λ₯Ό λ€λ₯Έ κ³³μμ 건λ릴 μ μμ΅λλ€.
Transaction κ°μ²΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μ½κ³ λ³κ²½νλλ°, μ΄ λ΄μ©μ μ€μ μ μ₯μμ μ¦μ λ°μλμ§ μμ΅λλ€. 무μμ μ΄λ»κ² λ³κ²½ν μ§ λͺ¨λ λ΄μ©μ κ²°μ νκ³ λμ Commit()μ νΈμΆν΄μΌλ§ λΉλ‘μ μμ§μ΄ DBMSμ 쿼리λ₯Ό λ°μ‘ν©λλ€.
νλμ LockSpec κ°μ²΄μ μ¬λ¬ μ κΈ λ¨μλ₯Ό νκΊΌλ²μ μ§μ νμ¬ μ κΈμ νλνλ κ²½μ°, μμ§μ΄ LockEscalationOrderλ₯Ό λ°λΌ μ κΈ μμλ₯Ό μλμΌλ‘ μ λ ¬ν΄μ νλν΄μ€λλ€. μ΄λ€ λ°μ΄ν°λ₯Ό 건λλ¦΄μ§ λ―Έλ¦¬ μκ³ μλ κ²½μ°, νΈλμμ
μ μμν λ μ΄μ κ°μ λ°©λ²μΌλ‘ κ·Έ νΈλμμ
μ΄ κ±΄λ릴 μ μλ λͺ¨λ λμμ μμ§μ μλ €μ£Όλ κ²μ κΆμ₯ν©λλ€.
κ·Έλ¬λ κΈλ‘λ² ν
μ΄λΈμ μ‘°νν΄μ κ·Έλ‘λΆν° λνλ¨ΌνΈ idλ₯Ό μ»λ λ±, μ΄λ€ λ°μ΄ν°λ₯Ό 건λλ¦΄μ§ νΈλμμ
μ μΌλΆ μ§νν΄μΌλ§ μκ² λλ κ²½μ°μλ νΈλμμ
μ€κ°μ μ κΈμ μΆκ°λ‘ νλν΄μΌ ν©λλ€. λ¨, κ²μ μ 체μμ μΌκ΄μ± μλ μμλ‘ μ κΈμ νλνλ€λ κ²μ 보μ₯νκΈ° μν΄, μ κΈ μΆκ° νλμ΄ κ°λ₯ν κ΄κ³λ₯Ό 미리 .schema νμΌμ λͺ
μν΄μΌ ν©λλ€. μνμμ LockEscalationOrderλ₯Ό κ²μν΄ λ³΄μΈμ.
.schema νμΌμμ λͺ μμ μΌλ‘ νμ©νμ§ μμ μμλ‘ μ κΈμ μΆκ°λ‘ νλνλ €κ³ μλνλ©΄ μμ§μ΄ μ΄λ₯Ό κ°μ§νμ¬ μμΈλ₯Ό λ°μμν΅λλ€. μ΄κ²μ λ°λλ½μ λ°©μ§νκΈ° μν μ₯μΉμ λλ€.
νΈλμμ
μμμ λνλ¨ΌνΈλ₯Ό μλ‘ μμ±νλ©΄ LockEscalationOrder μ€μ κ³Ό 무κ΄νκ² μλμΌλ‘ μ κΈμ νλν©λλ€. μλ‘ μμ±ν λνλ¨ΌνΈμ idλ₯Ό λ€λ₯Έ κ³³μΌλ‘ μ λ¬νμ¬ λ³λμ νΈλμμ
μμ μ κΈμ νλνλ €κ³ μλνμ§ μλ μ΄μ λ°λλ½μ΄ μΌμ΄λ κ°λ₯μ±μ μκΈ° λλ¬Έμ μμΈμ μΌλ‘ μ΄λ° κ·μΉμ νμ©νμ΅λλ€.
κ·Έλ¬λ―λ‘, νΈλμμ μμμ μλ‘ μμ±ν λνλ¨ΌνΈμ idλ νΈλμμ μ΄ λλκΈ° μ μλ λ€λ₯Έ κ³³μμ μ μ μλλ‘ νμμμ€.
μ§κ΄μ μΌλ‘ μ΄ν΄νκΈ° μ΄λ €μΈ μ μλ λ΄μ©μ΄λ, μ ν¬λ₯Ό λ―ΏμΌμμμ€. νμν μ κΈμ κ·Έλκ·Έλ νλνλλ‘ λ‘μ§ μ½λλ₯Ό μμ±νμλ©΄ μ§μ₯λ¬Έμ΄ μ΄λ¦΄ κ²μ λλ€.
νΈμΆ 'λλ' ν¨μμμλ μνλ λ°μ΄ν°μ μ κΈμ μ΄λ―Έ νλν μνλΌκ³ κ°μ νκ³ νλ‘κ·Έλλ°νμ μΌ ν©λλ€. μμ§μ΄ μ κΈ νλ μ¬λΆλ₯Ό κ²μ¬ν΄μ€ κ²μ΄λ νμΈ μμ μ μμ§μ λ§‘κΈ°μλ©΄ λ©λλ€. μ κΈ νλμ νΈλμμ μ μμν λ°λ‘ κ·Έ νΈμΆ κΉμ΄, νΉμ ν λ¨κ³ μ μ λμμλ§ μΌμ΄λμΌ ν©λλ€.
νμν μ κΈμ μ§μ νλνλ μ½λλ μμ λ‘κ² λΆλ¬ μ°κΈ° λλ¨ν μ΄λ ΅μ΅λλ€(composableνμ§ μμ΅λλ€). μΌλ°μ μΌλ‘ μ΄λ° μ½λλ λ°λλ½μ μ λ°νκΈ° μ½μ΅λλ€. μ€λ²λ°μΈ μλ²μμ§ 2μ DB μ κΈμ νλ μμλ₯Ό μμ§μμ κ²μ¬ν΄ μ£Όλ―λ‘ μ€μ λ‘λ λ°λλ½ λμ κ°λ° λ¨κ³μμ LockEscalationOrder μλ° μμΈκ° λ°μνκ² λ©λλ€λ§ μμ¬νμλ©΄ μλ©λλ€. λ°λλ½μ μΌμ΄λμ§ μλλΌλ μ μ§λ³΄μνκΈ° λλ¨ν μ΄λ €μΈ κ²μ
λλ€.
- νλμ λνλ¨ΌνΈμ λν λ³κ²½μ DBMS νΈλμμ μ μ΄μ©ν΄μ μμμ μΌλ‘ μΌμ΄λ©λλ€.
- νλμ κΈλ‘λ² ν μ΄λΈ ν€μ λν λ³κ²½λ DBMS νΈλμμ μ μ΄μ©ν΄μ μμμ μΌλ‘ μΌμ΄λ©λλ€.
- DBMSκ° λΉμ μ μ’ λ£λκ±°λ, νΈλμμ μ μ€ννλ κ²μμλ²κ° λΉμ μ μ’ λ£λκ±°λ, κ²μμλ²μ DBMS κ°μ μ°κ²°μ΄ λΉμ μμ μΌλ‘ λκΈ°λ κ²½μ°, μ 체 νΈλμμ μμ μΌλΆ λ½ λ¨μμ λ³κ²½μ¬νμ λλ½λκ³ μΌλΆλ§ 컀λ°λ μλ μμ΅λλ€.
- μ νλͺ©μμ μΈκΈν κ²½μ°λ₯Ό μ μΈνλ©΄
Transactionκ°μ²΄λ₯Ό ν΅ν΄ 컀λ°ν λ΄μ©μ λͺ¨λ μμ νκ² μ μ₯λ©λλ€.
μ μ λ±μ μν©μλ νΈλμμ μ μΌλΆλΆλ§ 컀λ°λλ κ²½μ°κ° μλλ‘ ν μ μμ΅λλ€. μ¦, λ³κ²½μ¬ν μ μ²΄κ° μ»€λ°λκ±°λ μλλ©΄ μ무κ²λ 컀λ°λμ§ μμμ 보μ₯νκ² νλ κ²μ λλ€. λ°μ΄ν° 무결μ±μ΄ κΉ¨μ§λ μΌμ μ€μ΄λ€μ§λ§ κΈ°λ³Έ λ³΄νΈ μμ€λ³΄λ€ DBμ λΆνλ₯Ό λ κ°νκ³ νΈλμμ μ»€λ° μ μ°¨κ° μ€λ 걸립λλ€. κ²μ νλ‘κ·Έλλ¨Έκ° μ±λ₯κ³Ό λ°μ΄ν° λ³΄νΈ κ°λ μ¬μ΄μμ νΈλ μ΄λ μ€νλ₯Ό μ ννκ² νλ κ²μ λλ€.
μΌλ°μ μΌλ‘ κ²μμμ μ΄ μ λλ‘ κ°λ ₯ν λ³΄νΈ μμ€μ΄ μꡬλλ κ²½μ°λ λλ¬Όλ€κ³ νλ¨νμ¬ μμ§ κ΅¬ννμ§ μκ³ μμ΅λλ€.