νλ°νΈμλ λΆμ° νΈλμμ μ‘°μ λ§μ€ν°νκΈ°. 볡μλ ₯ μλ λ€μ€ μλΉμ€ μ ν리μΌμ΄μ ꡬμΆμ μν κ³Όμ , ν΄κ²°μ± λ° λͺ¨λ² μ¬λ‘λ₯Ό μμ보μΈμ.
νλ°νΈμλ λΆμ° νΈλμμ μ½λλ€μ΄ν°: λ€μ€ μλΉμ€ νΈλμμ κ΄λ¦¬
νλ μννΈμ¨μ΄ κ°λ° νκ²½, νΉν λ§μ΄ν¬λ‘μλΉμ€μ 볡μ‘ν νλ°νΈμλ μν€ν μ² μμμμ μ¬λ¬ μλΉμ€μ κ±ΈμΉ νΈλμμ μ κ΄λ¦¬νλ κ²μ μ€μν κ³Όμ μ λλ€. μ΄ κ²μλ¬Όμμλ λ°μ΄ν° μΌκ΄μ±κ³Ό μμ€ν 볡μλ ₯μ 보μ₯νκΈ° μν ν΄κ²°μ± κ³Ό λͺ¨λ² μ¬λ‘μ μ΄μ μ λ§μΆ° νλ°νΈμλ λΆμ° νΈλμμ μ‘°μ μ 볡μ‘μ±μ νꡬν©λλ€.
λΆμ° νΈλμμ μ κ³Όμ
νν ACID(μμμ±, μΌκ΄μ±, κ³ λ¦½μ±, μ§μμ±) νΈλμμ μ΄λΌκ³ λΆλ¦¬λ μ ν΅μ μΈ λ°μ΄ν°λ² μ΄μ€ νΈλμμ μ λ¨μΌ λ°μ΄ν°λ² μ΄μ€ λ΄μμ λ°μ΄ν° λ³κ²½μ κ΄λ¦¬νλ μ λ’°ν μ μλ λ°©λ²μ μ 곡ν©λλ€. κ·Έλ¬λ λΆμ° νκ²½μμλ μ΄λ¬ν 보μ₯μ λ¬μ±νκΈ°κ° λ 볡μ‘ν΄μ§λλ€. κ·Έ μ΄μ λ λ€μκ³Ό κ°μ΅λλ€:
- μμμ±(Atomicity): νΈλμμ μ λͺ¨λ λΆλΆμ΄ μ±κ³΅νκ±°λ μ무κ²λ μ±κ³΅νμ§ μλλ‘ λ³΄μ₯νλ κ²μ μ¬λ¬ μλΉμ€μ μμ μ΄ λΆμ°λμ΄ μμ λ μ΄λ ΅μ΅λλ€. ν μλΉμ€μμμ μ€ν¨λ μμ€ν μ μΌκ΄μ± μλ μνλ‘ λ¨κΈΈ μ μμ΅λλ€.
- μΌκ΄μ±(Consistency): μ¬λ¬ λ€λ₯Έ μλΉμ€μ κ±Έμ³ λ°μ΄ν° 무결μ±μ μ μ§νλ €λ©΄ μ μ€ν μ‘°μ κ³Ό λ°μ΄ν° λκΈ°ν μ λ΅μ΄ νμν©λλ€.
- κ³ λ¦½μ±(Isolation): λμ νΈλμμ μ΄ μλ‘ κ°μνλ κ²μ λ°©μ§νλ κ²μ νΈλμμ μ΄ μ¬λ¬ μλΉμ€λ₯Ό ν¬ν¨ν λ λ μ΄λ ΅μ΅λλ€.
- μ§μμ±(Durability): 컀λ°λ νΈλμμ μ΄ μμ€ν μ₯μ μμλ μꡬμ μμ 보μ₯νλ €λ©΄ κ°λ ₯ν λ°μ΄ν° 볡μ λ° λ³΅κ΅¬ λ©μ»€λμ¦μ΄ νμν©λλ€.
μ΄λ¬ν κ³Όμ λ μ μμκ±°λ νλ«νΌμμ μ£Όλ¬Ένλ κ²κ³Ό κ°μ λ¨μΌ μ¬μ©μ μνΈμμ©μ΄ κ²°μ μλΉμ€, μ¬κ³ μλΉμ€, λ°°μ‘ μλΉμ€ λ° μ μ¬μ μΌλ‘ λ€λ₯Έ μ¬λ¬ μλΉμ€μ κ±Έμ³ μμ μ νΈλ¦¬κ±°ν λ λ°μν©λλ€. μ΄λ¬ν μλΉμ€ μ€ νλκ° μ€ν¨νλ©΄ μ 체 νΈλμμ μ λ¬Έμ κ° μ겨 μ¬μ©μ κ²½νμ λΆμΌμΉμ λ°μ΄ν° λ¬΄κ²°μ± λ¬Έμ λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
λΆμ° νΈλμμ κ΄λ¦¬μμ νλ°νΈμλμ μ± μ
λ°±μλκ° μ’ μ’ νΈλμμ κ΄λ¦¬μ μ£Όλ μ± μμ μ§μ§λ§, νλ°νΈμλλ μ΄λ¬ν 볡μ‘ν μνΈμμ©μ μ‘°μ νκ³ μ€μΌμ€νΈλ μ΄μ νλ λ° μ€μν μν μ ν©λλ€. νλ°νΈμλλ μΌλ°μ μΌλ‘ λ€μμ μνν©λλ€:
- νΈλμμ μμ: νλ°νΈμλλ μ’ μ’ λΆμ° νΈλμμ μ ꡬμ±νλ μΌλ ¨μ μμ μ νΈλ¦¬κ±°ν©λλ€.
- μ¬μ©μ νΌλλ°± μ 곡: νλ°νΈμλλ νΈλμμ μνμ λν μ€μκ° νΌλλ°±μ μ¬μ©μμκ² μ 곡ν μ± μμ΄ μμ΅λλ€. μ¬κΈ°μλ λ‘λ© νμκΈ°, μ±κ³΅ λ©μμ§ λ° μ μ΅ν μ€λ₯ λ©μμ§ νμκ° ν¬ν¨λ©λλ€.
- μ€λ₯ μν μ²λ¦¬: νλ°νΈμλλ μ€λ₯λ₯Ό μ°μνκ² μ²λ¦¬νκ³ μ¬μ©μμκ² μ€ν¨ν μμ μ¬μλ λλ νΈλμμ μ·¨μμ κ°μ μ μ ν 볡ꡬ μ΅μ μ μ 곡ν΄μΌ ν©λλ€.
- API νΈμΆ μ€μΌμ€νΈλ μ΄μ : νλ°νΈμλλ μ νν νΈλμμ κ΄λ¦¬ μ λ΅μ λ°λΌ νΈλμμ μ κ΄λ ¨λ λ€μν λ§μ΄ν¬λ‘μλΉμ€μ νΉμ μμλ‘ API νΈμΆμ ν΄μΌ ν©λλ€.
- μν κ΄λ¦¬: νλ°νΈμλλ νΈλμμ μ μνλ₯Ό μΆμ νλ©°, μ΄λ μ¬μλ, λ‘€λ°± λ° μ¬μ©μ μνΈμμ©μ μ²λ¦¬νλ λ° μ€μν©λλ€.
λΆμ° νΈλμμ κ΄λ¦¬λ₯Ό μν μν€ν μ² ν¨ν΄
μ¬λ¬ μν€ν μ² ν¨ν΄μ΄ λΆμ° νΈλμμ μ κ³Όμ λ₯Ό ν΄κ²°ν©λλ€. λ κ°μ§ μΈκΈ° μλ μ κ·Ό λ°©μμ μ¬κ°(Saga) ν¨ν΄κ³Ό 2λ¨κ³ 컀λ°(2PC) νλ‘ν μ½μ λλ€. κ·Έλ¬λ 2PC νλ‘ν μ½μ λΈλ‘νΉ νΉμ±κ³Ό μ±λ₯ λ³λͺ© νμ κ°λ₯μ± λλ¬Έμ νλ λΆμ° μμ€ν μλ μΌλ°μ μΌλ‘ κΆμ₯λμ§ μμ΅λλ€.
μ¬κ° ν¨ν΄
μ¬κ° ν¨ν΄μ μΌλ ¨μ λ‘컬 νΈλμμ μ λλ€. κ° νΈλμμ μ λ¨μΌ μλΉμ€μ λ°μ΄ν°λ₯Ό μ λ°μ΄νΈν©λλ€. νΈλμμ μ€ νλκ° μ€ν¨νλ©΄ μ¬κ°λ μ΄μ νΈλμμ μ μν΄ μ΄λ£¨μ΄μ§ λ³κ²½ μ¬νμ λλ리기 μν΄ λ³΄μ νΈλμμ μ μ€νν©λλ€. μ¬κ°λ λ κ°μ§ λ°©μμΌλ‘ ꡬνλ μ μμ΅λλ€:
- μ½λ μ€κ·ΈλνΌ κΈ°λ° μ¬κ°(Choreography-based Sagas): μ΄ μ κ·Ό λ°©μμμλ κ° μλΉμ€κ° λ€λ₯Έ μλΉμ€μ μ΄λ²€νΈλ₯Ό μμ νκ³ κ·Έμ λ°λΌ λ°μν©λλ€. μ€μ μ½λλ€μ΄ν°κ° μμΌλ©° μλΉμ€κ° μ§μ ν΅μ ν©λλ€. μ΄ μ κ·Ό λ°©μμ λμ μμ¨μ±μ μ 곡νμ§λ§ μμ€ν μ΄ μ»€μ§μ λ°λΌ κ΄λ¦¬νκ³ λλ²κΉ νκΈ° μ΄λ €μΈ μ μμ΅λλ€.
- μ€μΌμ€νΈλ μ΄μ κΈ°λ° μ¬κ°(Orchestration-based Sagas): μ΄ μ κ·Ό λ°©μμμλ μ€μ μ€μΌμ€νΈλ μ΄ν°κ° νΈλμμ μ‘°μ μ λ΄λΉν©λλ€. μ€μΌμ€νΈλ μ΄ν°λ μλΉμ€μ λͺ λ Ήμ 보λ΄κ³ κ²°κ³Όλ₯Ό μ²λ¦¬ν©λλ€. μ΄ μ κ·Ό λ°©μμ λ λ§μ μ μ΄λ₯Ό μ 곡νκ³ λ³΅μ‘ν νΈλμμ μ κ΄λ¦¬νκΈ° μ½κ² λ§λλλ€.
μμ: νκ³΅νΈ μμ½ νκ³΅νΈ μμ½ μλΉμ€λ₯Ό μμν΄ λ³΄μμμ€. μ¬κ°(μ€μΌμ€νΈλ μ΄μ κΈ°λ°)λ λ€μ λ¨κ³λ₯Ό ν¬ν¨ν μ μμ΅λλ€:
- νλ°νΈμλκ° νΈλμμ μ μμν©λλ€.
- μ€μΌμ€νΈλ μ΄ν°κ° 'κ°μ©μ± μλΉμ€'λ₯Ό νΈμΆνμ¬ νκ³΅νΈ κ°μ©μ±μ νμΈν©λλ€.
- μ€μΌμ€νΈλ μ΄ν°κ° 'κ²°μ μλΉμ€'λ₯Ό νΈμΆνμ¬ κ²°μ λ₯Ό μ²λ¦¬ν©λλ€.
- μ€μΌμ€νΈλ μ΄ν°κ° 'μμ½ μλΉμ€'λ₯Ό νΈμΆνμ¬ μ’μμ μμ½ν©λλ€.
- μ΄ λ¨κ³ μ€ νλλΌλ μ€ν¨νλ©΄ μ€μΌμ€νΈλ μ΄ν°λ λ³κ²½ μ¬νμ λ‘€λ°±νκΈ° μν΄ λ³΄μ νΈλμμ (μ: κ²°μ νλΆ, μμ½ ν΄μ )μ νΈλ¦¬κ±°ν©λλ€.
μ¬λ°λ₯Έ ν¨ν΄ μ ν
μ½λ μ€κ·ΈλνΌ κΈ°λ°κ³Ό μ€μΌμ€νΈλ μ΄μ κΈ°λ° μ¬κ° λλ λ€λ₯Έ μ κ·Ό λ°©μ κ°μ μ νμ λ€μμ ν¬ν¨ν μμ€ν μ νΉμ μꡬ μ¬νμ λ°λΌ λ¬λΌμ§λλ€:
- νΈλμμ μ 볡μ‘μ±: κ°λ¨ν νΈλμμ μ κ²½μ° μ½λ μ€κ·ΈλνΌλ‘ μΆ©λΆν μ μμ΅λλ€. μλ§μ μλΉμ€κ° κ΄λ ¨λ 볡μ‘ν νΈλμμ μ κ²½μ° μ€μΌμ€νΈλ μ΄μ μ΄ λ λμ μ μ΄λ₯Ό μ 곡ν©λλ€.
- μλΉμ€ μμ¨μ±: μ½λ μ€κ·ΈλνΌλ μλΉμ€κ° μ§μ ν΅μ νλ―λ‘ λ ν° μλΉμ€ μμ¨μ±μ μ΄μ§ν©λλ€.
- μ μ§λ³΄μμ± λ° λλ²κΉ : μ€μΌμ€νΈλ μ΄μ μ λλ²κΉ μ λ¨μννκ³ νΈλμμ νλ¦μ μ΄ν΄νκΈ° μ½κ² λ§λλλ€.
- νμ₯μ± λ° μ±λ₯: κ° ν¨ν΄μ μ±λ₯ μν₯μ κ³ λ €νμμμ€. μ€μΌμ€νΈλ μ΄μ μ μ€μ μ₯μ μ§μ κ³Ό μ μ¬μ μΈ λ³λͺ© νμμ μ λ°ν μ μμ΅λλ€.
νλ°νΈμλ ꡬν: μ£Όμ κ³ λ € μ¬ν
λΆμ° νΈλμμ κ΄λ¦¬λ₯Ό μν κ°λ ₯ν νλ°νΈμλλ₯Ό ꡬννλ €λ©΄ μ¬λ¬ μμλ₯Ό μ μ€νκ² κ³ λ €ν΄μΌ ν©λλ€:
1. μ€λ₯ μ²λ¦¬ λ° λ³΅μλ ₯
λ©±λ±μ±(Idempotency): μμ μ λ©±λ±μ±μ΄ μμ΄μΌ ν©λλ€. μ¦, μ¬λ¬ λ² μ€νν΄λ λ¨μΌ μ€νκ³Ό λμΌν κ²°κ³Όλ₯Ό μμ±ν΄μΌ ν©λλ€. μ΄λ μ¬μλλ₯Ό μ²λ¦¬νλ λ° μ€μν©λλ€. μλ₯Ό λ€μ΄, μ¬μλκ° νμν κ²½μ° 'κ²°μ μλΉμ€'κ° κ³ κ°μκ² λ λ² μ²κ΅¬νμ§ μλλ‘ ν΄μΌ ν©λλ€. κ³ μ ν νΈλμμ IDλ₯Ό μ¬μ©νμ¬ μ¬μλλ₯Ό ν¨κ³Όμ μΌλ‘ μΆμ νκ³ κ΄λ¦¬νμμμ€.
μ¬μλ λ©μ»€λμ¦: μΌμμ μΈ μ₯μ λ₯Ό μ²λ¦¬νκΈ° μν΄ μ§μ λ°±μ€ν(exponential backoff)λ₯Ό ν¬ν¨ν κ°λ ₯ν μ¬μλ λ©μ»€λμ¦μ ꡬννμμμ€. μλΉμ€μ μ€λ₯μ μ±κ²©μ λ°λΌ μ¬μλ μ μ± μ ꡬμ±νμμμ€.
μν· λΈλ μ΄μ»€(Circuit Breakers): μ°μμ μΈ μ₯μ λ₯Ό λ°©μ§νκΈ° μν΄ μν· λΈλ μ΄μ»€ ν¨ν΄μ ν΅ν©νμμμ€. μλΉμ€κ° μ§μμ μΌλ‘ μ€ν¨νλ©΄ μν· λΈλ μ΄μ»€κ° 'μ΄λ¦¬κ³ ' μΆκ° μμ²μ λ§μ μλΉμ€κ° 볡ꡬλ μ μλλ‘ ν©λλ€. νλ°νΈμλλ μν·μ΄ μ΄λ Έμ λλ₯Ό κ°μ§νκ³ μ μ νκ² μ²λ¦¬ν΄μΌ ν©λλ€(μ: μ¬μ©μ μΉνμ μΈ μ€λ₯ λ©μμ§ νμ λλ λμ€μ λ€μ μλνλλ‘ νμ©).
νμμμ(Timeouts): 무νμ λκΈ°νλ κ²μ λ°©μ§νκΈ° μν΄ API νΈμΆμ μ μ ν νμμμμ μ€μ νμμμ€. μ΄λ λ€νΈμν¬ λ¬Έμ κ° νν λΆμ° μμ€ν μμ νΉν μ€μν©λλ€.
보μ νΈλμμ : μ€ν¨ν μμ μ ν¨κ³Όλ₯Ό λλ리기 μν΄ λ³΄μ νΈλμμ μ ꡬννμμμ€. νλ°νΈμλλ μ΄λ¬ν 보μ μ‘°μΉλ₯Ό νΈλ¦¬κ±°νλ λ° μ€μν μν μ ν©λλ€. μλ₯Ό λ€μ΄, κ²°μ κ° μ²λ¦¬λ ν μ’μ μμ½μ΄ μ€ν¨νλ©΄ κ²°μ λ₯Ό νλΆν΄μΌ ν©λλ€.
2. μ¬μ©μ κ²½ν(UX)
μ€μκ° νΌλλ°±: μ¬μ©μμκ² νΈλμμ μ§ν μν©μ λν μ€μκ° νΌλλ°±μ μ 곡νμμμ€. λ‘λ© νμκΈ°, μ§νλ₯ νμμ€ λ° μ μ΅ν μν λ©μμ§λ₯Ό μ¬μ©νμ¬ μ¬μ©μμκ² μ 보λ₯Ό μ 곡νμμμ€. νΈλμμ μ΄ μλ£λ λκΉμ§ λΉ νλ©΄μ 보μ¬μ£Όκ±°λ μ무κ²λ νμνμ§ μλ κ²μ νΌνμμμ€.
λͺ νν μ€λ₯ λ©μμ§: λ¬Έμ λ₯Ό μ€λͺ νκ³ μ¬μ©μμκ² μ€ν κ°λ₯ν μ§μΉ¨μ μ 곡νλ λͺ ννκ³ κ°κ²°ν μ€λ₯ λ©μμ§λ₯Ό νμνμμμ€. κΈ°μ μ μΈ μ λ¬Έ μ©μ΄λ₯Ό νΌνκ³ λ¬Έμ λ₯Ό μ¬μ΄ μΈμ΄λ‘ μ€λͺ νμμμ€. μ¬μ©μκ° μ¬μλ, μ·¨μ λλ μ§μνμ λ¬Έμν μ μλ μ΅μ μ μ 곡νλ κ²μ κ³ λ €νμμμ€.
νΈλμμ μν κ΄λ¦¬: νΈλμμ μνλ₯Ό λͺ ννκ² νμ νκ³ μμ΄μΌ ν©λλ€. μ΄λ μ¬μλ, λ‘€λ°± λ° μ νν νΌλλ°± μ 곡μ μ€μν©λλ€. μν λ¨Έμ μ΄λ λ€λ₯Έ μν κ΄λ¦¬ κΈ°μ μ μ¬μ©νμ¬ νΈλμμ μ μ§ν μν©μ μΆμ νμμμ€. νλ°νΈμλκ° νμ¬ μνλ₯Ό μ ννκ² λ°μνλλ‘ νμμμ€.
μ μΈκ³ μ¬μ©μλ₯Ό μν UI/UX λͺ¨λ² μ¬λ‘ κ³ λ €: νλ°νΈμλλ₯Ό λμμΈν λ λ¬Ένμ μ°¨μ΄μ μΈμ΄ μ₯λ²½μ μΌλμ λμμμ€. μΈν°νμ΄μ€κ° λͺ¨λ μ§μμ μ¬μ©μμκ² νμ§νλκ³ μ κ·Ό κ°λ₯νλλ‘ νμμμ€. 보νΈμ μΌλ‘ μ΄ν΄λλ μμ΄μ½κ³Ό μκ°μ λ¨μλ₯Ό μ¬μ©νμ¬ μ¬μ©μ±μ ν₯μμν€μμμ€. μ λ°μ΄νΈλ₯Ό μμ½νκ±°λ λ§κ°μΌμ μ 곡ν λ μκ°λ μ°¨μ΄λ₯Ό κ³ λ €νμμμ€.
3. νλ°νΈμλ κΈ°μ λ° λꡬ
μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬: μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬(μ: Redux, Zustand, Vuex)λ₯Ό μ¬μ©νμ¬ νΈλμμ μνλ₯Ό ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νμμμ€. μ΄λ₯Ό ν΅ν΄ νλ°νΈμλμ λͺ¨λ λΆλΆμ΄ νμ¬ μνμ μ κ·Όν μ μμ΅λλ€.
API μ€μΌμ€νΈλ μ΄μ λΌμ΄λΈλ¬λ¦¬: μ¬λ¬ μλΉμ€μ API νΈμΆμ νκ³ λ°μ΄ν° νλ¦μ κ΄λ¦¬νλ νλ‘μΈμ€λ₯Ό λ¨μννκΈ° μν΄ API μ€μΌμ€νΈλ μ΄μ λΌμ΄λΈλ¬λ¦¬λ νλ μμν¬(μ: Apollo Federation, AWS AppSync) μ¬μ©μ κ³ λ €νμμμ€. μ΄λ¬ν λꡬλ νλ°νΈμλμ λ°±μλ μλΉμ€ κ°μ μνΈμμ©μ κ°μννλ λ° λμμ΄ λ μ μμ΅λλ€.
λΉλκΈ° μμ : μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ°¨λ¨νμ§ μλλ‘ λΉλκΈ° μμ (μ: Promises, async/await)μ μ¬μ©νμμμ€. μ΄λ λ°μμ± μκ³ μ¬μ©μ μΉνμ μΈ κ²½νμ 보μ₯ν©λλ€.
ν μ€νΈ λ° λͺ¨λν°λ§: νλ°νΈμλμ μ λ’°μ±μ 보μ₯νκΈ° μν΄ λ¨μ ν μ€νΈ, ν΅ν© ν μ€νΈ, μλν¬μλ ν μ€νΈλ₯Ό ν¬ν¨ν μ² μ ν ν μ€νΈλ₯Ό ꡬννμμμ€. λͺ¨λν°λ§ λꡬλ₯Ό μ¬μ©νμ¬ νλ°νΈμλμ μ±λ₯μ μΆμ νκ³ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νμμμ€.
4. λ°±μλ κ³ λ € μ¬ν
μ¬κΈ°μ μ£Όλ μ΄μ μ νλ°νΈμλμ΄μ§λ§, λ°±μλμ λμμΈμ νλ°νΈμλ νΈλμμ κ΄λ¦¬μ μ€μν μν₯μ λ―ΈμΉ©λλ€. λ°±μλλ λ€μμ μνν΄μΌ ν©λλ€:
- μΌκ΄λ API μ 곡: APIλ μ μ μλκ³ , λ¬Έμνλκ³ , μΌκ΄μ±μ΄ μμ΄μΌ ν©λλ€.
- λ©±λ±μ± ꡬν: μλΉμ€λ μ μ¬μ μΌλ‘ μ€λ³΅λ μμ²μ μ²λ¦¬νλλ‘ μ€κ³λμ΄μΌ ν©λλ€.
- λ‘€λ°± κΈ°λ₯ μ 곡: μλΉμ€λ 보μ νΈλμμ μ΄ νμν κ²½μ° μμ μ λλ릴 μ μλ κΈ°λ₯μ΄ μμ΄μΌ ν©λλ€.
- μ΅μ’ μΌκ΄μ± μμ©: λ§μ λΆμ° μλ리μ€μμ μ격ν μ¦μ μΌκ΄μ±μ νμ κ°λ₯νμ§ μμ΅λλ€. λ°μ΄ν°κ° μ΅μ’ μ μΌλ‘ μΌκ΄μ±μ μ μ§νλλ‘ λ³΄μ₯νκ³ κ·Έμ λ°λΌ νλ°νΈμλλ₯Ό μ€κ³νμμμ€. λ°μ΄ν° μΆ©λ μνμ μ€μ΄κΈ° μν΄ λκ΄μ μ κΈκ³Ό κ°μ κΈ°μ μ μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
- νΈλμμ μ½λλ€μ΄ν°/μ€μΌμ€νΈλ μ΄ν° ꡬν: νΉν νλ°νΈμλκ° νΈλμμ μ μ€μΌμ€νΈλ μ΄μ ν λ λ°±μλμμ νΈλμμ μ½λλ€μ΄ν°λ₯Ό μ¬μ©νμμμ€.
μ€μ©μ μΈ μμ: μ μμκ±°λ μ£Όλ¬Έ
μ μμκ±°λ νλ«νΌμμ μ£Όλ¬Ένλ μ€μ μμλ₯Ό μ΄ν΄λ³΄λ©° νλ°νΈμλ μνΈμμ©κ³Ό μ¬κ° ν¨ν΄(μ€μΌμ€νΈλ μ΄μ κΈ°λ°)μ μ¬μ©ν μλΉμ€ μ‘°μ μ 보μ¬λλ¦¬κ² μ΅λλ€:
- μ¬μ©μ νλ: μ¬μ©μκ° "μ£Όλ¬ΈνκΈ°" λ²νΌμ ν΄λ¦ν©λλ€.
- νλ°νΈμλ μμ: νλ°νΈμλλ μ¬μ©μ μνΈμμ© μ μ€μΌμ€νΈλ μ΄ν° μν μ νλ μλΉμ€μ API μλν¬μΈνΈλ₯Ό νΈμΆνμ¬ νΈλμμ μ μμν©λλ€.
- μ€μΌμ€νΈλ μ΄ν° λ‘μ§: λ°±μλμ μλ μ€μΌμ€νΈλ μ΄ν°λ 미리 μ μλ μΌλ ¨μ μμ μ λ°λ¦ λλ€:
- κ²°μ μλΉμ€: μ€μΌμ€νΈλ μ΄ν°λ κ²°μ μλΉμ€μ κ²°μ λ₯Ό μ²λ¦¬νλλ‘ νΈμΆν©λλ€. μμ²μλ μ μ©μΉ΄λ μ 보, μ²κ΅¬μ§ μ£Όμ, μ£Όλ¬Έ μ΄μ‘μ΄ ν¬ν¨λ μ μμ΅λλ€.
- μ¬κ³ μλΉμ€: κ·Έλ° λ€μ μ€μΌμ€νΈλ μ΄ν°λ μ¬κ³ μλΉμ€μ μν κ°μ©μ±μ νμΈνκ³ κ°μ© μλμ μ€μ΄λλ‘ νΈμΆν©λλ€. μ΄ API νΈμΆμλ μ£Όλ¬Έμ ν¬ν¨λ μν λͺ©λ‘κ³Ό μλμ΄ ν¬ν¨λ μ μμ΅λλ€.
- λ°°μ‘ μλΉμ€: μ€μΌμ€νΈλ μ΄ν°λ λ°°μ‘ μλΉμ€μ λ°°μ‘ λΌλ²¨μ μμ±νκ³ λ°°μ‘μ μμ½νλλ‘ νΈμΆν©λλ€. μ¬κΈ°μλ λ°°μ‘ μ£Όμ, λ°°μ‘ μ΅μ , μ£Όλ¬Έ μΈλΆ μ λ³΄κ° ν¬ν¨λ μ μμ΅λλ€.
- μ£Όλ¬Έ μλΉμ€: λ§μ§λ§μΌλ‘ μ€μΌμ€νΈλ μ΄ν°λ μ£Όλ¬Έ μλΉμ€μ λ°μ΄ν°λ² μ΄μ€μ μ£Όλ¬Έ κΈ°λ‘μ μμ±νμ¬ μ£Όλ¬Έμ κ³ κ°, μν, λ°°μ‘ μ 보μ μ°κ²°νλλ‘ νΈμΆν©λλ€.
- μ€λ₯ μ²λ¦¬ λ° λ³΄μ: μ΄ μμ μ€μ μλΉμ€ μ€ νλλΌλ μ€ν¨νλ©΄:
- μ€μΌμ€νΈλ μ΄ν°λ μ€ν¨λ₯Ό μλ³νκ³ λ³΄μ νΈλμμ μ μμν©λλ€.
- μ¬κ³ λλ λ°°μ‘ μμ μ΄ μ€ν¨ν κ²½μ° κ²°μ λ₯Ό νλΆνκΈ° μν΄ κ²°μ μλΉμ€κ° νΈμΆλ μ μμ΅λλ€.
- κ²°μ κ° μ€ν¨ν κ²½μ° μ¬κ³ λ₯Ό 보좩νκΈ° μν΄ μ¬κ³ μλΉμ€κ° νΈμΆλ©λλ€.
- νλ°νΈμλ νΌλλ°±: νλ°νΈμλλ κ° μλΉμ€ νΈμΆ μνμ λν μ
λ°μ΄νΈλ₯Ό μ€μΌμ€νΈλ μ΄ν°λ‘λΆν° λ°μ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό κ·Έμ λ°λΌ μ
λ°μ΄νΈν©λλ€.
- μμ²μ΄ μ§νλλ λμ λ‘λ© νμκΈ°κ° νμλ©λλ€.
- μλΉμ€κ° μ±κ³΅μ μΌλ‘ μλ£λλ©΄ νλ°νΈμλλ μ±κ³΅μ μΈ λ¨κ³λ₯Ό νμν©λλ€.
- μ€λ₯κ° λ°μνλ©΄ νλ°νΈμλλ μ€λ₯ λ©μμ§λ₯Ό νμνκ³ μ¬μ©μμκ² μ£Όλ¬Έ μ¬μλ λλ μ·¨μμ κ°μ μ΅μ μ μ 곡ν©λλ€.
- μ¬μ©μ κ²½ν: μ¬μ©μλ μ£Όλ¬Έ κ³Όμ λ΄λ΄ μκ°μ νΌλλ°±μ λ°μΌλ©° νΈλμμ μ§ν μν©μ λν μ 보λ₯Ό κ³μ λ°μ΅λλ€. μλ£ μ, μ£Όλ¬Έ νμΈ λ° λ°°μ‘ μΈλΆ μ 보μ ν¨κ» μ±κ³΅ λ©μμ§κ° νμλ©λλ€(μ: "μ£Όλ¬Έμ΄ νμΈλμμ΅λλ€. μ£Όλ¬Ένμ μνμ 2-3 μμ μΌ λ΄μ λ°°μ‘λ©λλ€.").
μ΄ μλ리μ€μμ νλ°νΈμλλ νΈλμμ μ μμμμ λλ€. λ°±μλμ μλ APIμ μνΈμμ©νλ©°, μ΄ APIλ λ€μ μ μλ μ¬κ° ν¨ν΄μ μ¬μ©νμ¬ λ€λ₯Έ λ§μ΄ν¬λ‘μλΉμ€μ μνΈμμ©ν©λλ€.
νλ°νΈμλ λΆμ° νΈλμμ κ΄λ¦¬λ₯Ό μν λͺ¨λ² μ¬λ‘
νλ°νΈμλ λΆμ° νΈλμμ μ‘°μ μ μ€κ³νκ³ κ΅¬νν λ μΌλμ λμ΄μΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€:
- μ¬λ°λ₯Έ ν¨ν΄ μ ν: νΈλμμ μ 볡μ‘μ±κ³Ό κ° μλΉμ€μ νμν μμ¨μ± μ λλ₯Ό μ μ€νκ² νκ°νμμμ€. κ·Έμ λ°λΌ μ½λ μ€κ·ΈλνΌ λλ μ€μΌμ€νΈλ μ΄μ μ μ ννμμμ€.
- λ©±λ±μ± μμ©: μλΉμ€κ° μ€λ³΅ μμ²μ μ°μνκ² μ²λ¦¬νλλ‘ μ€κ³νμμμ€.
- κ°λ ₯ν μ¬μλ λ©μ»€λμ¦ κ΅¬ν: 볡μλ ₯μ μν΄ μ§μ λ°±μ€νμ μν· λΈλ μ΄μ»€λ₯Ό ν¬ν¨νμμμ€.
- μ¬μ©μ κ²½ν(UX) μ°μ μμ μ§μ : μ¬μ©μμκ² λͺ ννκ³ μ μ΅ν νΌλλ°±μ μ 곡νμμμ€.
- μν κ΄λ¦¬ μ¬μ©: μ μ ν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ νΈλμμ μνλ₯Ό ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νμμμ€.
- μ² μ ν ν μ€νΈ: ν¬κ΄μ μΈ λ¨μ, ν΅ν© λ° μλν¬μλ ν μ€νΈλ₯Ό ꡬννμμμ€.
- λͺ¨λν°λ§ λ° κ²½κ³ : μ μ¬μ μΈ λ¬Έμ λ₯Ό μ¬μ μ μλ³νκΈ° μν΄ ν¬κ΄μ μΈ λͺ¨λν°λ§ λ° κ²½κ³ μμ€ν μ μ€μ νμμμ€.
- 보μ μ°μ : μ μ ν μΈμ¦ λ° μΈκ° λ©μ»€λμ¦μΌλ‘ λͺ¨λ API νΈμΆμ 보νΈνμμμ€. TLS/SSLμ μ¬μ©νμ¬ ν΅μ μ μνΈννμμμ€. λ°±μλμμ λ°μ λͺ¨λ λ°μ΄ν°λ₯Ό κ²μ¦νκ³ λ³΄μ μ·¨μ½μ μ λ°©μ§νκΈ° μν΄ μ λ ₯μ μ΄κ· μ²λ¦¬νμμμ€.
- λ¬Έμν: λ μ¬μ΄ μ μ§λ³΄μμ ν₯ν κ°λ°μ μν΄ λͺ¨λ API μλν¬μΈνΈ, μλΉμ€ μνΈμμ© λ° νΈλμμ νλ¦μ λ¬Έμννμμμ€.
- μ΅μ’ μΌκ΄μ± κ³ λ €: μ¦κ°μ μΈ μΌκ΄μ±μ΄ νμ κ°λ₯νμ§ μμ μ μλ€λ μ΄ν΄λ₯Ό λ°νμΌλ‘ μ€κ³νμμμ€.
- λ‘€λ°± κ³ν: νΈλμμ μ ν λ¨κ³κ° μ€ν¨ν κ²½μ° λ³κ²½ μ¬νμ λλ리기 μν 보μ νΈλμμ μ΄ μ€λΉλμ΄ μλμ§ νμΈνμμμ€.
κ³ κΈ μ£Όμ
1. λΆμ° μΆμ
νΈλμμ μ΄ μ¬λ¬ μλΉμ€μ κ±Έμ³ μκΈ° λλ¬Έμ λλ²κΉ κ³Ό λ¬Έμ ν΄κ²°μ μν΄ λΆμ° μΆμ μ΄ μ€μν΄μ§λλ€. Jaegerλ Zipkinκ³Ό κ°μ λꡬλ₯Ό μ¬μ©νλ©΄ νΈλμμ μ κ΄λ ¨λ λͺ¨λ μλΉμ€μ κ±Έμ³ μμ²μ νλ¦μ μΆμ ν μ μμ΄ μ±λ₯ λ³λͺ© νμκ³Ό μ€λ₯λ₯Ό λ μ½κ² μλ³ν μ μμ΅λλ€. μλΉμ€ κ²½κ³λ₯Ό λμ΄ λ‘κ·Έμ μμ²μ μ°κ΄μν€κΈ° μν΄ μΌκ΄λ μΆμ ν€λλ₯Ό ꡬννμμμ€.
2. μ΅μ’ μΌκ΄μ± λ° λ°μ΄ν° λκΈ°ν
λΆμ° μμ€ν μμ λͺ¨λ μλΉμ€μ κ±Έμ³ κ°λ ₯ν μΌκ΄μ±μ λ¬μ±νλ κ²μ μ’ μ’ λΉμ©μ΄ λ§μ΄ λ€κ³ μ±λ₯μ μν₯μ λ―ΈμΉ©λλ€. μμ€ν μ΄ λΉλκΈ°μ μΌλ‘ λ°μ΄ν° λκΈ°νλ₯Ό μ²λ¦¬νλλ‘ μ€κ³νμ¬ μ΅μ’ μΌκ΄μ±μ μμ©νμμμ€. μ΄λ²€νΈ κΈ°λ° μν€ν μ²μ λ©μμ§ ν(μ: Kafka, RabbitMQ)λ₯Ό μ¬μ©νμ¬ μλΉμ€ κ°μ λ°μ΄ν° λ³κ²½ μ¬νμ μ ννμμμ€. λμ μ λ°μ΄νΈλ₯Ό μ²λ¦¬νκΈ° μν΄ λκ΄μ μ κΈκ³Ό κ°μ κΈ°μ μ¬μ©μ κ³ λ €νμμμ€.
3. λ©±λ±μ± ν€
λ©±λ±μ±μ 보μ₯νκΈ° μν΄ μλΉμ€λ κ° νΈλμμ μ λν λ©±λ±μ± ν€λ₯Ό μμ±νκ³ μ¬μ©ν΄μΌ ν©λλ€. μ΄ ν€λ μμ²μ μ€λ³΅ μ²λ¦¬λ₯Ό λ°©μ§νλ λ° μ¬μ©λ©λλ€. νλ°νΈμλλ κ³ μ ν λ©±λ±μ± ν€λ₯Ό μμ±νμ¬ κ° μμ²κ³Ό ν¨κ» λ°±μλμ μ λ¬ν μ μμ΅λλ€. λ°±μλλ μ΄ ν€λ₯Ό μ¬μ©νμ¬ μ¬λ¬ λ² μμ λλλΌλ κ° μμ²μ΄ ν λ²λ§ μ²λ¦¬λλλ‘ λ³΄μ₯ν©λλ€.
4. λͺ¨λν°λ§ λ° κ²½κ³
λΆμ° νΈλμμ μ μ±λ₯κ³Ό μνλ₯Ό μΆμ νκΈ° μν΄ κ°λ ₯ν λͺ¨λν°λ§ λ° κ²½κ³ μμ€ν μ ꡬμΆνμμμ€. μ€ν¨ν νΈλμμ μ, μ§μ° μκ°, κ° μλΉμ€μ μ±κ³΅λ₯ κ³Ό κ°μ μ£Όμ μ§νλ₯Ό λͺ¨λν°λ§νμμμ€. λ¬Έμ λ μ΄μ μ§νκ° μμ λ νμ μ리λλ‘ κ²½κ³ λ₯Ό μ€μ νμμμ€. λμ보λλ₯Ό μ¬μ©νμ¬ νΈλμμ νλ¦μ μκ°ννκ³ μ±λ₯ λ³λͺ© νμμ μλ³νμμμ€.
5. λ°μ΄ν° λ§μ΄κ·Έλ μ΄μ μ λ΅
λͺ¨λ리μ μ ν리μΌμ΄μ μμ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²λ‘ λ§μ΄κ·Έλ μ΄μ ν λ, μ ν λ¨κ³ λμ λΆμ° νΈλμμ μ μ²λ¦¬νκΈ° μν΄ νΉλ³ν μ£Όμκ° νμν©λλ€. ν κ°μ§ μ κ·Ό λ°©μμ λͺ¨λ리μμ΄ μ¬μ ν μ μ리μ μλ λμ μλ‘μ΄ μλΉμ€κ° μ μ§μ μΌλ‘ λμ λλ "μ€νΈλκΈλ¬ νΌκ·Έ ν¨ν΄(strangler fig pattern)"μ μ¬μ©νλ κ²μ λλ€. λ λ€λ₯Έ κΈ°μ μ λ§μ΄κ·Έλ μ΄μ μ€μ λͺ¨λ리μκ³Ό μλ‘μ΄ λ§μ΄ν¬λ‘μλΉμ€ κ°μ λ³κ²½ μ¬νμ μ‘°μ νκΈ° μν΄ λΆμ° νΈλμμ μ μ¬μ©νλ κ²μ λλ€. λ€μ΄νμκ³Ό λ°μ΄ν° λΆμΌμΉλ₯Ό μ΅μννκΈ° μν΄ λ§μ΄κ·Έλ μ΄μ μ λ΅μ μ μ€νκ² μ€κ³νμμμ€.
κ²°λ‘
νλ°νΈμλ μν€ν μ²μμ λΆμ° νΈλμμ μ κ΄λ¦¬νλ κ²μ κ°λ ₯νκ³ νμ₯ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆνλ λ° λ³΅μ‘νμ§λ§ νμμ μΈ μΈ‘λ©΄μ λλ€. κ³Όμ λ₯Ό μ μ€νκ² κ³ λ €νκ³ , μ¬κ° ν¨ν΄κ³Ό κ°μ μ μ ν μν€ν μ² ν¨ν΄μ μ±ννκ³ , μ¬μ©μ κ²½νμ μ°μ μνλ©°, μ€λ₯ μ²λ¦¬, μ¬μλ λ©μ»€λμ¦ λ° λͺ¨λν°λ§μ λν λͺ¨λ² μ¬λ‘λ₯Ό ꡬνν¨μΌλ‘μ¨, μ¬μ©μμ μμΉμ κ΄κ³μμ΄ μ λ’°ν μ μκ³ μΌκ΄λ κ²½νμ μ 곡νλ 볡μλ ₯ μλ μμ€ν μ λ§λ€ μ μμ΅λλ€. λΆμ§λ°ν κ³νκ³Ό ꡬνμ ν΅ν΄ νλ°νΈμλ λΆμ° νΈλμμ μ‘°μ μ κ°λ°μκ° νλ μ ν리μΌμ΄μ μ λμμμ΄ μ¦κ°νλ μꡬμ λ§μΆ° νμ₯ν μ μλ μμ€ν μ ꡬμΆν μ μλλ‘ ν©λλ€.