[MSA] 5. MSAμ νΈλμμ μ΄μΌκΈ° 1 - νΈλμμ μ μ΄ν΄μ MSAμμ λ°λΌλ³΄λ νΈλμμ
μ΄ κΈμ μμ±νκΈ° μ μ μ΄λ€ μ λͺ©μ λΆμ¬μΌ ν μ§ λ§μ κ³ λ―Όμ νμμ΅λλ€. MSAμμ νΈλμμ μ λ¬Έμ λ νμ¬ λλλκ³ μλ κ°μ₯ ν° λ¬Έμ λΌκ³ ν μ μμ΅λλ€.
μ΄λ² ν¬μ€νΈμμλ νΈλμμ μ κΈ°λ³Έ μ΄μΌκΈ°μ λͺ¨λ리μμ νΈλμμ , MSAμμ νΈλμμ μ λν΄ μ λ§ κΉκ² λ€λ€λ³΄λ μκ°μ κ°μ Έλ³΄λλ‘ νκ² μ΅λλ€. 3 ννΈλ‘ λλμ΄ μ§νλ μμ μ΄λ©° 1λ²μ§Έ ννΈμμλ νΈλμμ μ λν κΈ°λ³Έμ μ΄μΌκΈ° νκ³ , λͺ¨λ리μμ νΈλμμ μ λ€λ€λ³΄κ³ μ ν©λλ€.
What is Transaction ?
νΈλμμ μ΄λ, λ°μ΄ν°λ² μ΄μ€μ μνλ₯Ό λ³νμν€κΈ° μν΄ μννλ μμ μ λ¨μλ₯Ό λ§ν©λλ€. λ°μ΄ν°λ² μ΄μ€μμ λνμ μΌλ‘ κ°λ₯ν μμ μλ κ²μ(SELECT), μμ (UPDATE), μ½μ (INSERT), μμ (DELETE)κ° μμ΅λλ€. μ΄ μ€μμ λ°μ΄ν°λ² μ΄μ€μ λ³νλ₯Ό κ°λ¦¬ν€λ μμ μλ μμ , μ½μ , μμ κ° μκ³ , μ΄λ€ μμ μ μνν λλ λ°λμ νΈλμμ μ΄ λ°λΌμ΅λλ€.
νΈλμμ μ΄ μνλ λ€μλ μ»€λ° νΉμ λ‘€λ°±μ΄ μ§νλ©λλ€.
κ·Έλ°λ°, λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ₯Ό μ½μ , μμ , μμ ν λ μ μ΄λ¬ν 볡μ‘ν κ³Όμ μ μ§ννλ κ²μΌκΉμ?
λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©νκΈ° μ΄μ μμ μ°λ¦¬κ° λ°μ΄ν°λ₯Ό μ μ₯ν λλ νμΌμ΄λΌλ κ²μ μ¬μ©νμμ΅λλ€. κ·Έλ¬λ λ¨μΌ νμΌ νλμ λ§μ κ²μ 보κ΄νκ±°λ κ΄κ³κ° μλ λ°μ΄ν°λ€μ 맀ννλ λ° μμ΄ μ¬λ¬ κ°μ νμΌμ μ¬μ©ν΄μΌ νκ³ , μ΄λ€μ νμΌμ κ°κ° λΆλ¬μ€λ κ²μ λ§μ 리μμ€λ₯Ό μ¬μ©ν¨κ³Ό λμμ νλ‘κ·Έλλ°μ μμ΄ λ§μ λΆνΈν¨μ μ΄λνμ΅λλ€.
μλ₯Ό λ€μ΄ μνμ κ³μ’ μ΄μ²΄λ₯Ό 보면, λ§μ μ¬λλ€μ΄ νκΈ μΈμΆκΈ° νΉμ ATMμ μ¬μ©νμ¬ κ³μ’ μ΄μ²΄λ₯Ό νκ² λ©λλ€. μ΄λ€μ μνμμκ² μ λ¬νλ λ°©μμ΄ μλ, κΈ°κ³κ° ν΄μ£Όλ κ²μ λλ€. κ·Έλ°λ°, κ³μ’ μ΄μ²΄ μ€μ κΈ°κ³κ° κ³ μ₯μ΄ λκ±°λ, μ΄λ μμ€ν μ μ€λ₯κ° λ°μνμ¬ μΉ΄λκ° λμ€μ§ μκ±°λ κΈ°κ³κ° λ©μΆ κ²½μ° λ΄ λμ μ΄λ»κ² λλ κ²μΌκΉμ?
λ§μ½, νμΌμμ μ΄λ¬ν λ¬Έμ κ° λ°μνλ€λ©΄, κ·Έ κ²½λ‘λ₯Ό μΆμ νκΈ°κ° κ΅μ₯ν μ΄λ ΅μ΅λλ€. μλ₯Ό λ€μ΄ A νμΌμ΄ λμ κ³μ’μ΄κ³ B νμΌμ΄ μλλ°©μ κ³μ’λΌλ©΄ A νμΌμμλ μ΄λ―Έ κ·Έ λμ΄ λΉ μ Έλκ°λ€κ³ κΈ°λ‘ λμ΄ μμ§λ§, μ€κ°μ μ€λ₯κ° λ°μνκΈ° λλ¬Έμ B νμΌμμλ κ·Έλ¬ν κΈ°λ‘μ μ°Ύμλ³Ό μ μκΈ° λλ¬Έμ λλ€. μ΄λ¬ν λ¬Έμ λ λ°μ΄ν°μ μμμ±μμ μ΄λ―Έ κ·Έ κΈ°λ₯μ μμ€ν κ²μ΄ λ©λλ€.
κ·Έλ¦ΌμΌλ‘ μ½κ² μ€λͺ ν΄λ³΄μλ©΄, A κ³μ’μμλ 5,000μμ΄ μ΄μ²΄ λμλ€λ κΈ°λ‘μ΄ μμ§λ§ μ€κ°μ κΈ°κ³μμ μ€λ₯κ° λ°μνλ©΄μ B κ³μ’μλ κ·Έ κΈ°λ‘μ΄ λ¨μ§ μμΌλ―λ‘ A κ³μ’μ μλ 5,000μμ μ 보λ₯Ό μ μ° μμ€ν μμ μ°Ύμ μ μκΈ° λλ¬Έμ λ¬Έμ κ° λ©λλ€.
μ΄λ¬ν λ¬Έμ λλ¬Έμ μ겨λ λ°μ΄ν°λ² μ΄μ€μ νΈλμμ μ μλμ κ°μ νΉμ§μ κ°μ§κ³ μμ΅λλ€.
- Atomicity (μμμ±)
νΈλμμ μ°μ°μ λ°μ΄ν°λ² μ΄μ€μ λͺ¨λ λ°μμ΄ λλμ§, μλλ©΄ μ ν λ°μλμ§ μμμΌ ν¨. - Consistency (μΌκ΄μ±)
νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ μλ£κ° λμλ€λ©΄, μΈμ λ μΌκ΄μ± μλ μνλ‘ λ³νλ¨. - Isolation (λ
립μ±, 격리μ±)
λ μ΄μμ νΈλμμ μ΄ λμμ λ³ν μ€ν λλ κ²½μ°, μ΄λ νλμ νΈλμμ μ€ν μ€μ λ€λ₯Έ νΈλμμ μ°μ°μ΄ μ€νλ μ μμ. - Durablity (μμμ±, μ§μμ±)
μ±κ³΅μ μΌλ‘ μλ£λ νΈλμμ μ κ²°κ³Όλ μμ€ν μ μ€λ₯κ° λ°μν΄λ μꡬμ μΌλ‘ λ°μλμ΄μΌ ν¨.
μμ μν©μ νκΈ°ν μ μλ νΉμ§μλ λ°μ΄ν°λ² μ΄μ€ μμμ±μ΄ μμ΅λλ€. κ³μ’ μ΄μ²΄λ₯Ό μννλ μ€μ κΈ°κ³μ λ¬Έμ κ° λ°μνμ¬ μ λλ‘ μνλμ§ μμμ κ²½μ°, λͺ¨λ λ°μ΄ν°λ² μ΄μ€μ κ·Έ κΈ°λ‘ μ¬νμ λ°μλμ§ μμμΌ ν©λλ€.
κ·Έλ λ€λ©΄ νΈλμμ μ μ΄λ€ κΈ°λ₯μΌλ‘ μ΄λ¬ν νΉμ§μ λ°νν μ μλ κ²μΌκΉμ?νΈλμμ μ μ°μ°κ³Ό μνλ‘ λλμ΄, ν΄λΉ μ°μ°μ λ°λΌ λ°νλλ μνκ° μμ΅λλ€. λ§μ½ νΈλμμ μ°μ° μν μ€, λ¬Έμ κ° λ°μνλ€λ©΄ μλ£, κ·Έλ μ§ μμΌλ©΄ μ€ν¨λ₯Ό λ°νν©λλ€. μ΄λ¬ν κ²°κ³Όλ₯Ό λ°μ΄ν°λ² μ΄μ€μ νΈλμμ κ΄λ¦¬μκ° μ€μμ μ‘΄μ¬νμ¬ κ΄λ¦¬νκ² λ©λλ€.
νΈλμμ μ μ°μ°κ³Ό μ μνλ‘ 4κ°μ§μ νΉμ§μ λͺ¨λ λ°νν μ μμ΅λλ€. νΈλμμ μ΄ μ±κ³΅νλ€λ©΄, κ·Έ λ΄μ©μ λ°μνκ³ μ±κ³΅μ΄ μλ λ€λ₯Έ μ‘μ μ΄ μ·¨ν΄μ§λ€λ©΄ λ°μνμ§ μλ λ°©ν₯μΌλ‘ μ½κ² μμμ±μ μ§ν¬ μ μμ£ .
κ° μνμ λν΄ κ°λ¨ν μμλ³΄κ² μ΅λλ€.
- Active (νλ): νΈλμμ μ΄ μ€ν μ€μΈ μν
- Failed (μ€ν¨): νΈλμμ μ€νμ μ€λ₯κ° λ°μν μν (μ΄ λ, μ€νλ νΈλμμ μ μ€λ¨λ¨)
- Aborted (μ² ν): νΈλμμ μ΄ λΉμ μμ μΌλ‘ μ’ λ£λμ΄ Rollback μ°μ°μ μνν μν
- Partially Commited (λΆλΆμ μλ£): νΈλμμ μ΄ λ§μ§λ§ μ°μ°κΉμ§ μ μμ μΌλ‘ λμλ¨. (μ»€λ° μ°μ° μ )
- Commited (μλ£): νΈλμμ μ΄ μ±κ³΅μ μΌλ‘ μ’ λ£λ¨. (μ»€λ° μ°μ° λ.)
μ¬κΈ°μ μ£Όμν΄μΌ ν μ μ λΆλΆμ μλ£μ μλ£μΈλ°, λΆλΆμ μλ£λ νΈλμμ μ°μ°μ΄ μ μμ μΌλ‘ λͺ¨λ μνλμμ§λ§ μ»€λ° μ°μ° μ μ΄λΌκ³ νμλμ΄ μμ΅λλ€. μ΄ λ§μ μ°μ°μ λλ¬μ§λ§ μμ§ μꡬμ μΌλ‘ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λμ΄ μλ μνλ μλλΌλ μ μ λλ€. μ΄ μ§μ λΆν° μ ν리μΌμ΄μ μμ λ¬΄κ²°μ± λ±μ κ²μ¦νλ λ¨κ³λ₯Ό κ±°μΉλ λ± λ€λ₯Έ λ³λμ λ‘μ§μ μνν μ μκ³ , κ·Έ νμ μ»€λ° λͺ λ Ήμ΄ λ¨μ΄μ§λ©΄ κ·Έ λλ λ°μ΄ν°λ² μ΄μ€μ μꡬμ μΌλ‘ μ μ₯μ΄ λ©λλ€.
Transaction in Monolithic Architecture
μ΄λ² ν¬μ€νΈμ λ©μΈμ νΈλμμ μ΄ μλ λ§μ΄ν¬λ‘ μλΉμ€ μν€ν μ²μ νΈλμμ μ λλ€. κ·Έλ¬λ μ°λ¦¬λ μ΄ λΆλΆμ μ§κΈ° μ μ, MSAμ νΈλμμ μ΄ μ λ³κ°μ νμ΄νμ΄ λμκ³ , κΈ°μ‘΄μ λͺ¨λ리μκ³Ό μ΄λ»κ² λ€λ₯΄λ©° κΈ°μ‘΄μ λͺ¨λ리μμ μ λ°μλ€μΌ μ μλμ§, μ μ€κ³λ₯Ό λ³λλ‘ ν΄μΌνλμ§λ₯Ό μ’ λ μκΈ°ν΄λ³΄κ³ μ μ΄λ² νμ΄νμ λ§λ€μμ΅λλ€.
λͺ¨λ리μ μν€ν μ²λ₯Ό κ°μ§ μ ν리μΌμ΄μ μμ νΈλμμ μ μ΄λ»κ² μ²λ¦¬ν κΉμ?
λͺ¨λ리μ μν€ν μ²μ κ²½μ°, λ°μ΄ν°λ² μ΄μ€μ νΈλμμ μ μμ‘΄νκ² λ©λλ€. DBμμ μ 곡νλ νΈλμμ μ μμμ λ§ν λ―μ΄ 4κ°μ§μ νΉμ§μ μ μ 곡νκ² λ©λλ€.
μ΄λ° κ²μ΄ κ°λ₯ν μ΄μ λ λͺ¨λ리μ μν€ν μ²λ₯Ό κ°μ§ μ ν리μΌμ΄μ μ νλμ λ°μ΄ν°λ² μ΄μ€λ‘ μ΄μνκΈ° λλ¬Έμ λλ€. κ·Έλ κΈ° λλ¬Έμ DBμμ κ°κ° ν μ΄λΈμ΄ RelationShip(κ΄κ³)λ₯Ό κ°μ§κ³ μμ΄λ κ·Έ μλ¬λ₯Ό μμμ μ²λ¦¬ν΄μ£ΌκΈ° λλ¬Έμ μ°λ¦¬λ μ΄μ μ 곡ν΄μ£Όλ ORM νΉμ 쿼리λ₯Ό μ¬μ©νλ©΄ μ΄λ¬ν νΈλμμ μ λν΄μ μ κ²½μ°μ§ μμλ λ©λλ€.
Transaction in Micro Service Architecture
κ·Έλ λ€λ©΄ λ§μ΄ν¬λ‘ μλΉμ€ μν€ν μ²λ μ΄λ¨κΉμ?
λ§μ΄ν¬λ‘ μλΉμ€ μν€ν μ²λ κ° μλΉμ€λ³λ‘ μΈμ€ν΄μ€λ₯Ό λΆλ¦¬νλ ννμ λλ€. μ΄ λ§μ, μ΄μ μ°κ²°λμ΄ μλ Database Server μΈμ€ν΄μ€ λν λΆλ¦¬μν¨λ€λ κ²μ λλ€. μ¦ μνλ λ°μ΄ν°λ₯Ό DBμμ λ½μ μ°λ κ²μ΄ μλ κ°μμ APIμμ κ°μ Έμ€λ ννμ΄λ©° κ° μλΉμ€λ μμ λ§μ λ°μ΄ν°λ₯Ό κ°μ§κ³ μκ³ , κ·Έ λ°μ΄ν°λ§μ λ½μ μ μλλ‘ λΆμ°μ μν¨ κ²μ΄μ§μ.
κ·Έλ°λ°, μ΄ μ€κ³λ λ¬Έμ μ μ΄ μμ΅λλ€. κΈ°μ‘΄μ ν μ΄λΈμ κ΄κ³κ° νλμ λ°μ΄ν°λ² μ΄μ€ μλ² μΈμ€ν΄μ€μ νΈλμμ μμ κ΄λ¦¬λμλ κ²λ€μ΄ μΈμ€ν΄μ€ λ§μ λΆλ¦¬λλ©΄μ DBμ νΈλμμ κΈ°λ₯μ΄ μ μν μ νμ§ λͺ»νκ² λλ©° μ΄λ₯Ό μ λλ‘ νμ§ λͺ»ν¨μΌλ‘μ¨ λ°μ΄ν°μ μΌκ΄μ±κ³Ό μμμ±μ 보μ₯ λ°μ μ μλ€λ λ¨μ μ΄ μκΉλλ€.
κ·Έλ λ€λ©΄ μ΄λ¬ν λ§μ΄ν¬λ‘ μλΉμ€ μν€ν μ²μμ νΈλμμ μ ν μ μλ λ°©λ²μλ μ΄λ€ κ²λ€μ΄ μμκΉμ?
κ°μ₯ μΌλ°μ μΌλ‘ λ κ° μ΄μμ μ ν리μΌμ΄μ νΉμ λΆλ¦¬λμ΄ μλ μλΉμ€κ° κ°κ°μ λ°μ΄ν°λ² μ΄μ€λ₯Ό κ°μ§ κ²½μ°, μ΄λ νλμ νΈλμμ μΌλ‘ λ¬Άμ μ μλ Two-Phase CommitμΌλ‘ κ΄λ¦¬ν μ μμ΅λλ€. μ΄ μμ κΈ°μ‘΄μ λͺ¨λ리μ μν€ν μ²μ²λΌ Transaction κ΄λ¦¬μκ° μ‘΄μ¬νμ¬ μ΄ λ§€λμ κ° νΈλμμ μ μνλ₯Ό κ΄λ¦¬ν¨μΌλ‘μ¨ DB νΈλμμ μ 보μ₯ν μ μμ΅λλ€.
κ·Έλ¬λ λ§μ΄ν¬λ‘ μλΉμ€ μν€ν μ²μμ μ λ°©λ²μ νκ³κ° μμ΅λλ€. μλνλ©΄ κ° μ ν리μΌμ΄μ μ΄ λͺ¨λ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ₯Ό μ΄λ€λ©΄ μκΈ°κ° λ€λ₯΄κ² μ§λ§ NoSQLμ μ¬μ©νλ λ±μ μν©μ΄ λ°μν μλ μκ³ , λμ±μ΄ Transaction κ΄λ¦¬μλ κ° DBμ SQL μΏΌλ¦¬λ‘ λ°μνμ¬μΌ μ ν¨νμ§λ§ λ§μ΄ν¬λ‘ μλΉμ€ μν€ν μ²λ 리μμ€λ₯Ό κ°μ Έμ€κΈ° μν΄ APIλ₯Ό νΈμΆνκΈ° λλ¬Έμ μ΄ λ°©λ²μ μ μ©νκΈ°μλ λ¬΄λ¦¬κ° μμ΅λλ€.
λΆμ° νΈλμμ μ€μ κ°μ₯ λ리 μλ €μ§ ν¨ν΄ μ€μ Saga ν¨ν΄μ΄ μμ΅λλ€. Saga ν¨ν΄μ λ¨μΌ μλΉμ€ λ΄ λ°μ΄ν°λ₯Ό κ°±μ νλ μΌλ ¨μ λ‘컬 νΈλμμ μ λλ€. 첫 λ²μ§Έ νΈλμμ μ΄ μλ£λ λ€, λ λ²μ§Έ νΈλμμ μ κ²½μ°λ μ΄μ μμ μλ£μ μν΄ νΈλ¦¬κ±° λλ λ°©μμΌλ‘ ꡬμ±λμ΄ μμ΄, λͺ¨λ μλΉμ€λ€μ΄ λ©μμ§ μμ‘΄νλ λ°©λ² λ±μ κ³ μν΄μΌ ν©λλ€.
λ€μ ν¬μ€νΈμμ Two-Phase Commitκ³Ό Saga ν¨ν΄μ λν΄ μμΈν λ€λ€λ³΄λλ‘ νκ² μ΅λλ€.
'Architecture > MSA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[MSA] 7. MSAμ νΈλμμ μ΄μΌκΈ° 3 - μ΄λ²€νΈ μμ±κ³Ό CQRS (3) | 2021.03.21 |
---|---|
[MSA] 6. MSAμ νΈλμμ μ΄μΌκΈ° 2 - Two-Phase commitκ³Ό Saga (0) | 2020.11.02 |
[MSA] - 4. Circuit Breakerλ₯Ό μ΄μ©ν μ₯μ μ²λ¦¬ (0) | 2020.03.11 |
[MSA] - 3. νμν μλΉμ€λ₯Ό μ°Ύμμ£Όλ Service Discovery (0) | 2020.01.27 |
[MSA] - 2. API Gatewayκ° νμν μ΄μ (0) | 2020.01.08 |