ν΅μ¬ λ©μμ§ ν¨ν΄μ μ΄ν΄νκ³ κ΅¬ννμ¬ νμ μμ  μ΄λ²€νΈ κΈ°λ° μν€ν μ²μ λ―Έλ¬ν μ°¨μ΄λ₯Ό νμν©λλ€. μ΄ κ°μ΄λλ κ²¬κ³ ν λΆμ° μμ€ν μ μν κΈλ‘λ² μΈμ¬μ΄νΈμ μ€μ©μ μΈ μμ λ₯Ό μ 곡ν©λλ€.
νμ μμ  μ΄λ²€νΈ κΈ°λ° μν€ν μ² λ§μ€ν°νκΈ°: λ©μμ§ ν¨ν΄ ꡬν μ¬μΈ΅ λΆμ
νλ μννΈμ¨μ΄ κ°λ°, νΉν λ§μ΄ν¬λ‘μλΉμ€ λ° λΆμ° μμ€ν μ λΆμκ³Ό ν¨κ» μ΄λ²€νΈ κΈ°λ° μν€ν μ²(EDA)κ° μ§λ°°μ μΈ ν¨λ¬λ€μμΌλ‘ λ±μ₯νμ΅λλ€. EDAλ νμ₯μ±, 볡μλ ₯ λ° λ―Όμ²©μ± μΈ‘λ©΄μμ μλΉν μ΄μ μ μ 곡ν©λλ€. κ·Έλ¬λ μ§μ μΌλ‘ κ²¬κ³ νκ³ μ μ§ κ΄λ¦¬ κ°λ₯ν EDAλ₯Ό λ¬μ±νλ κ²μ μΈμ¬ν μ€κ³μ λ¬λ € μμΌλ©°, νΉν μ΄λ²€νΈκ° μ μ, ν΅μ λ° μ²λ¦¬λλ λ°©μκ³Ό κ΄λ ¨μ΄ μμ΅λλ€. μ¬κΈ°μ νμ μμ  μ΄λ²€νΈ κΈ°λ° μν€ν μ²μ κ°λ μ΄ μ€μν΄μ§λλ€. μ΄λ²€νΈλ₯Ό μμ€ν  μ 체μ κ±Έμ³ μλλ ꡬ쑰μ μλ―Έλ₯Ό μ λ¬νλλ‘ λ³΄μ₯ν¨μΌλ‘μ¨ λ°νμ μ€λ₯λ₯Ό ν¬κ² μ€μ΄κ³ λλ²κΉ μ λ¨μννλ©° μ λ°μ μΈ μμ€ν  μμ μ±μ ν₯μμν¬ μ μμ΅λλ€.
μ΄ ν¬κ΄μ μΈ κ°μ΄λμμλ ν¨κ³Όμ μΈ EDAμ κΈ°λ°μ΄ λλ μ€μν λ©μμ§ ν¨ν΄μ μ¬μΈ΅μ μΌλ‘ μ΄ν΄λ³΄κ³ νμ μμ μ μ€μ μ λκ³ μ΄λ₯Ό ꡬννλ λ°©λ²μ νꡬν©λλ€. λ€μν ν¨ν΄μ κ²ν νκ³ , μ΄μ κ³Ό μ μΆ©μ μ λ Όμνλ©°, μ  μΈκ³ μννΈμ¨μ΄ κ°λ°μ νΉμ§μΈ λ€μν κΈ°μ νκ²½ λ° μ΄μ νκ²½μ μΈμ νμ¬ κΈλ‘λ² μ²μ€μ μν μ€μ©μ μΈ κ³ λ € μ¬νμ μ 곡ν κ²μ λλ€.
κΈ°λ°: EDAμμ νμ μμ μ΄λ 무μμΈκ°?
νΉμ  ν¨ν΄μ μ΄ν΄λ³΄κΈ° μ μ μ΄λ²€νΈ κΈ°λ° μμ€ν μ λ§₯λ½μμ "νμ μμ "μ΄ λ¬΄μμ μλ―Ένλμ§ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. μ ν΅μ μΌλ‘ νμ μμ μ νλ‘κ·Έλλ° μΈμ΄κ° νμ μ€λ₯λ₯Ό λ°©μ§νλ λ₯λ ₯μ λ§ν©λλ€. EDAμμ νμ μμ μ μ΄ κ°λ μ μ΄λ²€νΈ μμ²΄λ‘ νμ₯ν©λλ€. μ΄λ²€νΈλ μμ€ν μμ λ°μν μΌμ λν μ¬μ€μ  μ§μ λ‘ μκ°ν μ μμ΅λλ€. νμ μμ  μ΄λ²€νΈλ λ€μμ 보μ₯ν©λλ€.
- λͺ νν μ μ: κ° μ΄λ²€νΈλ μ΄λ¦, μμ± λ° ν΄λΉ μμ±μ λ°μ΄ν° νμ μ μ§μ νλ μ μ μλ μ€ν€λ§λ₯Ό κ°μ§λλ€.
 - λΆλ³ ꡬ쑰: μ΄λ²€νΈμ ꡬ쑰μ λ°μ΄ν° νμ μ μ μλ ν κ³ μ λμ΄ μλΉ μλΉμ€λ₯Ό μ€λ¨μν¬ μ μλ μμμΉ λͺ»ν λ³κ²½μ λ°©μ§ν©λλ€.
 - κ³μ½μ  ν©μ: μ΄λ²€νΈλ μ΄λ²€νΈ μμ°μμ μλΉμ κ°μ κ³μ½ μν μ ν©λλ€. μμ°μλ νΉμ  νμ μ λ§λ μ΄λ²€νΈλ₯Ό 보λΈλ€κ³ 보μ₯νκ³ , μλΉμλ ν΄λΉ νμ μ μ΄λ²€νΈλ₯Ό κΈ°λν©λλ€.
 - μ ν¨μ± κ²μ¬: μμ°μ μΈ‘, μλΉμ μΈ‘ λλ λ©μμ§ λΈλ‘컀 μμ€μμ μ΄λ²€νΈκ° μ μλ νμ μ λΆν©νλμ§ μ ν¨μ±μ κ²μ¬νλ λ©μ»€λμ¦μ΄ μ‘΄μ¬ν©λλ€.
 
EDAμμ νμ μμ μ λ¬μ±νλ κ²μ λ¨μν κ°λ ₯ν νμ μ νλ‘κ·Έλλ° μΈμ΄λ₯Ό μ¬μ©νλ κ² μ΄μμ λλ€. μ΄λ μ΄λ²€νΈ μ μ, μ§λ ¬ν, μμ§λ ¬ν λ° μ 체 μμ€ν μ κ±ΈμΉ μ ν¨μ± κ²μ¬μ μμμ μΈ λ Έλ ₯μ μꡬνλ μ€κ³ μμΉμ λλ€. μλΉμ€κ° λ€λ₯Έ νμ μν΄ κ°λ°λκ³ , λ€λ₯Έ μΈμ΄λ‘ μμ±λλ©°, λ€μν μ§λ¦¬μ  μμΉμ λ°°ν¬λ μ μλ λΆμ° λΉλκΈ° νκ²½μμ μ΄ νμ μμ μ μ μ§ κ΄λ¦¬μ± λ° κ²¬κ³ μ±μ μ΄μμ΄ λ©λλ€.
EDAμμ νμ μμ μ΄ μ€μν μ΄μ λ 무μμΈκ°?
νμ μμ  μ΄λ²€νΈ κΈ°λ° μν€ν μ²μ μ΄μ μ λ€λ©΄μ μ΄λ©° 볡μ‘ν λΆμ° μμ€ν μ μ±κ³΅μ μλΉν μν₯μ λ―ΈμΉ©λλ€.
- λ°νμ μ€λ₯ κ°μ: κ°μ₯ λͺ λ°±ν μ΄μ μ λλ€. μλΉμκ° νΉμ  νλ(`orderId`(μ μ), `customerName`(λ¬Έμμ΄) λ±)λ₯Ό κ°μ§ `OrderPlaced` μ΄λ²€νΈλ₯Ό μμν λ νμ μμ μ `orderId`κ° λ¬Έμμ΄μΈ μ΄λ²€νΈλ₯Ό μμ νμ¬ μΆ©λμ΄λ μμμΉ λͺ»ν λμμ μ λ°νλ κ²μ λ°©μ§ν©λλ€.
 - κ°λ°μ μμ°μ± ν₯μ: κ°λ°μλ μμ νλ λ°μ΄ν°μ λν΄ νμ μ κ°μ§ μ μμ΄ κ΄λ²μν λ°©μ΄μ  μ½λ©, μλ λ°μ΄ν° μ ν¨μ± κ²μ¬ λ° μΆμΈ‘μ νμμ±μ΄ μ€μ΄λλλ€. μ΄λ κ°λ° μ£ΌκΈ°λ₯Ό λ¨μΆν©λλ€.
 - ν₯μλ μ μ§ κ΄λ¦¬μ±: μμ€ν μ΄ λ°μ ν¨μ λ°λΌ λ³κ²½ κ΄λ¦¬κ° μ©μ΄ν΄μ§λλ€. μ΄λ²€νΈ ꡬ쑰λ₯Ό μ λ°μ΄νΈν΄μΌ νλ κ²½μ°, λͺ νν μ€ν€λ§μ μ ν¨μ± κ²μ¬ κ·μΉμ ν΅ν΄ μ΄λ€ μμ°μμ μλΉμκ° μν₯μ λ°λμ§ λͺ ννκ² μ μ μμ΄ μ μ΄λ μ§νλ₯Ό μ΄μ§ν©λλ€.
 - λ λμ λλ²κΉ λ° κ΄μ°° κ°λ₯μ±: λ¬Έμ κ° λ°μν λ μ΄λ²€νΈ νλ¦μ μΆμ νλ κ²μ΄ λ κ°λ¨ν΄μ§λλ€. μ΄λ²€νΈμ μμ ꡬ쑰λ₯Ό μλ©΄ λ°μ΄ν° μμ λλ μμμΉ λͺ»ν λ³νμ΄ λ°μνμ μ μλ μμΉλ₯Ό μλ³νλ λ° λμμ΄ λ©λλ€.
 - ν΅ν© μ΄μ§: νμ μμ μ μλΉμ€ κ°μ λͺ νν API κ³μ½ μν μ ν©λλ€. μ΄λ λ€λ₯Έ ν λλ μΈλΆ ννΈλκ° μμ€ν κ³Ό ν΅ν©λλ μ΄κΈ°μ’ νκ²½μμ νΉν κ°μΉκ° μμ΅λλ€.
 - κ³ κΈ ν¨ν΄ νμ±ν: μ΄λ²€νΈ μμ± λ° CQRSμ κ°μ λ§μ κ³ κΈ EDA ν¨ν΄μ μ΄λ²€νΈμ 무결μ±κ³Ό μμΈ‘ κ°λ₯μ±μ ν¬κ² μμ‘΄ν©λλ€. νμ μμ μ μ΄λ¬ν κΈ°λ³Έ 보μ₯μ μ 곡ν©λλ€.
 
μ΄λ²€νΈ κΈ°λ° μν€ν μ²μ ν΅μ¬ λ©μμ§ ν¨ν΄
EDAμ ν¨κ³Όλ μ¬μ©νλ λ©μμ§ ν¨ν΄κ³Ό κΉμ΄ μ½ν μμ΅λλ€. μ΄λ¬ν ν¨ν΄μ κ΅¬μ± μμκ° μνΈ μμ©νλ λ°©μκ³Ό μ΄λ²€νΈκ° μμ€ν μ ν΅ν΄ νλ₯΄λ λ°©μμ κ²°μ ν©λλ€. λͺ κ°μ§ ν΅μ¬ ν¨ν΄κ³Ό νμ μμ μ μΌλμ λκ³ μ΄λ₯Ό ꡬννλ λ°©λ²μ μ΄ν΄λ³΄κ² μ΅λλ€.
1. λ°ν-ꡬλ (Pub/Sub) ν¨ν΄
λ°ν-ꡬλ ν¨ν΄μ λΉλκΈ° ν΅μ μ μ΄μμ λλ€. μ΄ ν¨ν΄μμ μ΄λ²€νΈ μμ°μ(κ²μμ)λ μμ μκ° λꡬμΈμ§ μμ§ λͺ»ν μ± μ΄λ²€νΈλ₯Ό λΈλ‘λμΊμ€νΈν©λλ€. μ΄λ²€νΈ μλΉμ(ꡬλ μ)λ νΉμ  μ νμ μ΄λ²€νΈμ λν κ΄μ¬μ νννκ³ μ€μ λ©μμ§ λΈλ‘컀λ‘λΆν° μμ ν©λλ€. μ΄λ μμ°μμ μλΉμλ₯Ό λΆλ¦¬νμ¬ λ 립μ μΈ νμ₯ λ° μ§νλ₯Ό κ°λ₯νκ² ν©λλ€.
Pub/Subμ νμ μμ  κ΅¬ν:
- μ€ν€λ§ λ μ§μ€νΈλ¦¬: μ΄λ Pub/Subμ νμ μμ μ μν κ°μ₯ μ€μν κ΅¬μ± μμλΌκ³ ν μ μμ΅λλ€. μ€ν€λ§ λ μ§μ€νΈλ¦¬(μ: Kafkaμ© Confluent Schema Registry, AWS Glue Schema Registry)λ μ΄λ²€νΈ μ€ν€λ§μ μ€μ μ μ₯μ μν μ ν©λλ€. μμ°μλ μ΄λ²€νΈ μ€ν€λ§λ₯Ό λ±λ‘νκ³ , μλΉμλ μ΄λ¬ν μ€ν€λ§λ₯Ό κ²μνμ¬ λ€μ΄μ€λ μ΄λ²€νΈλ₯Ό μ ν¨μ± κ²μ¬ν μ μμ΅λλ€.
 - μ€ν€λ§ μ μ μΈμ΄: Avro, Protobuf (Protocol Buffers) λλ JSON Schemaμ κ°μ νμ€νλ μ€ν€λ§ μ μ μΈμ΄λ₯Ό μ¬μ©ν©λλ€. μ΄λ¬ν μΈμ΄λ₯Ό ν΅ν΄ μ΄λ²€νΈ ꡬ쑰μ λ°μ΄ν° νμ μ 곡μμ μΌλ‘ μ μν μ μμ΅λλ€.
 - μ§λ ¬ν/μμ§λ ¬ν: μμ°μμ μλΉμκ° μ΄λ²€νΈ μ€ν€λ§λ₯Ό μΈμνλ νΈν κ°λ₯ν μ§λ ¬ λ³νκΈ° λ° μμ§λ ¬ λ³νκΈ°λ₯Ό μ¬μ©νλλ‘ ν©λλ€. μλ₯Ό λ€μ΄, Avroλ₯Ό μ¬μ©νλ κ²½μ° μ§λ ¬ λ³νκΈ°λ λ±λ‘λ μ€ν€λ§λ₯Ό μ¬μ©νμ¬ μ΄λ²€νΈλ₯Ό μ§λ ¬ννκ³ , μλΉμλ λμΌν μ€ν€λ§(λ μ§μ€νΈλ¦¬μμ κ²μ)λ₯Ό μ¬μ©νμ¬ μ΄λ₯Ό μμ§λ ¬νν©λλ€.
 - ν ν½ λͺ
λͺ
 κ·μΉ: μλ°ν λ§νλ©΄ νμ
 μμ μ μλμ§λ§, μΌκ΄λ ν ν½ λͺ
λͺ
μ μ΄λ²€νΈλ₯Ό ꡬμ±νκ³  νΉμ  ν ν½μμ μ΄λ€ μ’
λ₯μ μ΄λ²€νΈκ° μμλλμ§ λͺ
ννκ² νλ λ° λμμ΄ λ©λλ€(μ: 
orders.v1.OrderPlaced). - μ΄λ²€νΈ λ²μ  κ΄λ¦¬: μ΄λ²€νΈ μ€ν€λ§κ° μ§νν λ νμ μμ  λ©μ»€λμ¦μ λ²μ  κ΄λ¦¬λ₯Ό μ§μν΄μΌ ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ΄μ  λ²μ  λ° μ΄ν λ²μ  νΈνμ±μ 보μ₯νμ¬ μ΄μ  μλΉμκ° μ μ΄λ²€νΈλ₯Ό κ³μ μ²λ¦¬(μ μ¬μ  λ³ν ν¬ν¨)νκ³ μ μλΉμκ° μ΄μ  μ΄λ²€νΈλ₯Ό μ²λ¦¬ν μ μλλ‘ ν©λλ€.
 
κΈλ‘λ² μμ :
κΈλ‘λ² μ μ μκ±°λ νλ«νΌμ μκ°ν΄ 보μΈμ. κ³ κ°μ΄ μ±κ°ν¬λ₯΄μμ μ£Όλ¬Ένλ©΄ μ£Όλ¬Έ μλΉμ€(μμ°μ)κ° `OrderPlaced` μ΄λ²€νΈλ₯Ό κ²μν©λλ€. μ΄ μ΄λ²€νΈλ Avroλ₯Ό μ¬μ©νμ¬ μ§λ ¬νλκ³ μ€ν€λ§λ μ€μ μ€ν€λ§ λ μ§μ€νΈλ¦¬μ λ±λ‘λ©λλ€. κ³ κ°μ©μ± λ° μ μ§μ°μ μν΄ μ¬λ¬ μ§μμ λΆμ°λ Apache Kafkaμ κ°μ λ©μμ§ λΈλ‘컀λ μ΄ μ΄λ²€νΈλ₯Ό λ°°ν¬ν©λλ€. μ λ½μ μ¬κ³ μλΉμ€, λΆλ―Έμ λ°°μ‘ μλΉμ€, μμμμ μλ¦Ό μλΉμ€μ κ°μ λ€μν μλΉμ€κ° `OrderPlaced` μ΄λ²€νΈμ κ°μ ν©λλ€. κ° μλΉμ€λ μ€ν€λ§ λ μ§μ€νΈλ¦¬μμ `OrderPlaced` μ€ν€λ§λ₯Ό κ²μνκ³ μ΄λ₯Ό μ¬μ©νμ¬ λ€μ΄μ€λ μ΄λ²€νΈλ₯Ό μμ§λ ¬ν λ° μ ν¨μ± κ²μ¬νμ¬ μλΉμμ μ§λ¦¬μ  μμΉ λλ κΈ°λ³Έ κΈ°μ μ€νμ κ΄κ³μμ΄ λ°μ΄ν° 무결μ±μ 보μ₯ν©λλ€.
2. μ΄λ²€νΈ μμ± ν¨ν΄
μ΄λ²€νΈ μμ±μ λͺ¨λ μ ν리μΌμ΄μ  μν λ³κ²½μ λΆλ³ μ΄λ²€νΈ μνμ€λ‘ μ μ₯νλ ν¨ν΄μ λλ€. νμ¬ μνλ₯Ό μ§μ  μ μ₯νλ λμ μμ€ν μ λ°μν λͺ¨λ μ΄λ²€νΈμ λ‘κ·Έλ₯Ό μ μ₯ν©λλ€. κ·Έλ¬λ©΄ νμ¬ μνλ μ΄λ¬ν μ΄λ²€νΈλ₯Ό λ€μ μ€ννμ¬ μ¬κ΅¬μ±ν μ μμ΅λλ€. μ΄ ν¨ν΄μ μμ°μ€λ½κ² EDAμ μ ν©ν©λλ€.
μ΄λ²€νΈ μμ±μ νμ μμ  κ΅¬ν:
- λΆλ³ μ΄λ²€νΈ λ‘κ·Έ: μ΄λ²€νΈ μμ±μ ν΅μ¬μ μ΄λ²€νΈμ μΆκ° μ μ© λ‘κ·Έμ λλ€. κ° μ΄λ²€νΈλ μ μλ νμ κ³Ό νμ΄λ‘λλ₯Ό κ°μ§ 1κΈ μλ―Όμ λλ€.
 - μ격ν μ€ν€λ§ μν: Pub/Subμ μ μ¬νκ² λͺ¨λ μ΄λ²€νΈμ λν΄ κ°λ ₯ν μ€ν€λ§ μ μ μΈμ΄(Avro, Protobuf)λ₯Ό μ¬μ©νλ κ²μ΄ μ€μν©λλ€. μ΄λ²€νΈ λ‘κ·Έ μ체λ κΆκ·Ήμ μΈ μ§μ€μ μμ²μ΄ λλ©°, κ·Έ 무결μ±μ μΌκ΄λκ² νμ μ΄ μ§μ λ μ΄λ²€νΈμ λ¬λ € μμ΅λλ€.
 - μ΄λ²€νΈ λ²μ  κ΄λ¦¬ μ λ΅: μ ν리μΌμ΄μ μ΄ λ°μ ν¨μ λ°λΌ μ΄λ²€νΈλ λ³κ²½λ κ°λ₯μ±μ΄ λμ΅λλ€. μ μ μλ λ²μ  κ΄λ¦¬ μ λ΅μ΄ νμμ μ λλ€. μλΉμ(λλ μ½κΈ° λͺ¨λΈ)λ μ΄μ  μ΄λ²€νΈ λ²μ μ μ²λ¦¬νκ³ μ΅μ λ²μ μΌλ‘ λ§μ΄κ·Έλ μ΄μ ν μ μμ΄μΌ ν©λλ€.
 - μ΄λ²€νΈ μ¬μ€ν λ©μ»€λμ¦: μνλ₯Ό μ¬κ΅¬μ±νκ±°λ μ μ½κΈ° λͺ¨λΈμ λΉλν λ νμ μμ μ μ¬μ©νμ¬ μ΄λ²€νΈλ₯Ό λ€μ μ€ννλ κΈ°λ₯μ΄ μ€μν©λλ€. μ¬κΈ°μλ μμ§λ ¬νκ° μλ μ€ν€λ§μ λ°λΌ μ΄μ  μ΄λ²€νΈ λ°μ΄ν°λ₯Ό μ¬λ°λ₯΄κ² ν΄μνλμ§ νμΈνλ κ²μ΄ ν¬ν¨λ©λλ€.
 - κ°μ¬ κ°λ₯μ±: μ΄λ²€νΈ μμ±μμ μ΄λ²€νΈμ λΆλ³μ±μ νλ₯ν κ°μ¬ κ°λ₯μ±μ μ 곡ν©λλ€. νμ μμ μ κ°μ¬ μΆμ μ΄ μλ―Έ μκ³ μ νν¨μ 보μ₯ν©λλ€.
 
κΈλ‘λ² μμ :
κΈλ‘λ² κΈμ΅ κΈ°κ΄μ κ³μ  κ±°λλ₯Ό κ΄λ¦¬νκΈ° μν΄ μ΄λ²€νΈ μμ±μ μ¬μ©ν©λλ€. λͺ¨λ μ κΈ, μΆκΈ λ° μ΄μ²΄λ λΆλ³ μ΄λ²€νΈ(μ: `MoneyDeposited`, `MoneyWithdrawn`)λ‘ κΈ°λ‘λ©λλ€. μ΄λ¬ν μ΄λ²€νΈλ λΆμ°λ μΆκ° μ μ© λ‘κ·Έμ μ μ₯λλ©°, κ° μ΄λ²€νΈλ κ±°λ ID, κΈμ‘, ν΅ν λ° νμμ€ν¬νμ κ°μ μΈλΆ μ λ³΄λ‘ μ ννκ² νμ μ΄ μ§μ λ©λλ€. λ°λμ κ·μ  μ€μ λ΄λΉμκ° κ³ κ°μ κ³μ μ κ°μ¬ν΄μΌ νλ κ²½μ° ν΄λΉ κ³μ μ λν λͺ¨λ κ΄λ ¨ μ΄λ²€νΈλ₯Ό λ€μ μ€ννμ¬ μΈμ λ μ§ μ νν μνλ₯Ό μ¬κ΅¬μ±ν μ μμ΅λλ€. νμ μμ μ λ€μ μ€ν νλ‘μΈμ€κ° μ ννκ³ μ¬κ΅¬μ±λ κΈμ΅ λ°μ΄ν°κ° μ λ’°ν μ μμΌλ©° μ격ν κΈλ‘λ² κΈμ΅ κ·μ μ μ€μν¨μ 보μ₯ν©λλ€.
3. λͺ λ Ή-쿼리 μ± μ λΆλ¦¬ (CQRS) ν¨ν΄
CQRSλ λ°μ΄ν°λ₯Ό μ½λ μμ (쿼리)κ³Ό λ°μ΄ν°λ₯Ό μ λ°μ΄νΈνλ μμ (λͺ λ Ή)μ λΆλ¦¬ν©λλ€. EDA λ§₯λ½μμ λͺ λ Ήμ μ’ μ’ μν λ³κ²½μ νΈλ¦¬κ±°νκ³ μ΄λ²€νΈλ‘ μ΄μ΄μ§κ³ , 쿼리λ μ΄λ¬ν μ΄λ²€νΈμ μν΄ μ λ°μ΄νΈλλ νΉμ μ½κΈ° λͺ¨λΈμ μ½μ΅λλ€. μ΄ ν¨ν΄μ νμ₯μ± λ° μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
CQRSμ νμ μμ  κ΅¬ν:
- λͺ λ Ή λ° μ΄λ²€νΈ νμ : λͺ λ Ή(μν λ³κ²½ μλ)κ³Ό μ΄λ²€νΈ(μν λ³κ²½ μ¬μ€) λͺ¨λ μ격νκ² νμ μ΄ μ§μ λμ΄μΌ ν©λλ€. λͺ λ Ή μ€ν€λ§λ μμ μ μννλ λ° νμν μ 보λ₯Ό μ μνκ³ , μ΄λ²€νΈ μ€ν€λ§λ λ°μν μΌμ μ μν©λλ€.
 - λͺ λ Ή νΈλ€λ¬ λ° μ΄λ²€νΈ νΈλ€λ¬: λ€μ΄μ€λ λͺ λ Ήμ μ ν¨μ± κ²μ¬νκΈ° μν΄ λͺ λ Ή νΈλ€λ¬ λ΄μμ, κ·Έλ¦¬κ³ μ½κΈ° λͺ¨λΈμ μν΄ μ΄λ²€νΈλ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬νκΈ° μν΄ μ΄λ²€νΈ νΈλ€λ¬ λ΄μμ κ°λ ₯ν νμ κ²μ¬λ₯Ό ꡬνν©λλ€.
 - λ°μ΄ν° μΌκ΄μ±: CQRSλ λ³Έμ§μ μΌλ‘ λͺ λ Ή μΈ‘κ³Ό 쿼리 μΈ‘ κ°μ μ΅μ’ μΌκ΄μ±μ λμ νμ§λ§, μ΄ κ°κ²©μ μ°κ²°νλ μ΄λ²€νΈλ₯Ό μν νμ μμ μ μ½κΈ° λͺ¨λΈμ΄ μκ°μ΄ μ§λ¨μ λ°λΌ μ¬λ°λ₯΄κ³ μΌκ΄λκ² μ λ°μ΄νΈλλλ‘ νλ λ° μ€μν©λλ€.
 - λͺ λ Ή/μ΄λ²€νΈ μΈ‘ κ° μ€ν€λ§ μ§ν: λͺ λ Ή, μ΄λ²€νΈ λ° μ½κΈ° λͺ¨λΈ νλ‘μ μ μ λν μ€ν€λ§ μ§νλ₯Ό κ΄λ¦¬νλ €λ©΄ CQRS νμ΄νλΌμΈ μ 체μμ νμ 무결μ±μ μ μ§νκΈ° μν΄ μ μ€ν μ‘°μ μ΄ νμν©λλ€.
 
κΈλ‘λ² μμ :
λ€κ΅μ  λ¬Όλ₯ νμ¬λ μ°¨λ μ΄μμ κ΄λ¦¬νκΈ° μν΄ CQRSλ₯Ό μ¬μ©ν©λλ€. λͺ λ Ή μΈ‘μ 'νΈλ ν견' λλ 'λ°°μ‘ μν μ λ°μ΄νΈ'μ κ°μ μμ²μ μ²λ¦¬ν©λλ€. μ΄λ¬ν λͺ λ Ήμ΄ μ²λ¦¬λ ν `TruckDispatched` λλ `DeliveryStatusUpdated`μ κ°μ μ΄λ²€νΈκ° κ²μλ©λλ€. 쿼리 μΈ‘μ λ€μν λͺ©μ μ μν μ΅μ νλ μ½κΈ° λͺ¨λΈμ μ μ§ν©λλ€. νλλ (μ  μΈκ³ μ΄μ νμ΄ μλΉνλ) μ€μκ° μΆμ  λμ보λμ©μ΄κ³ , λ€λ₯Έ νλλ (μ  μΈκ³ κ²½μμ§μ΄ μ¬μ©νλ) κ³Όκ±° μ±λ₯ λΆμμ©μ΄λ©°, λ€λ₯Έ νλλ μ²κ΅¬μ©μ λλ€. νμ μμ ν `DeliveryStatusUpdated` μ΄λ²€νΈλ μ΄λ¬ν λ€μν μ½κΈ° λͺ¨λΈμ΄ λͺ¨λ μ ννκ³ μΌκ΄λκ² μ λ°μ΄νΈλλλ‘ λ³΄μ₯νμ¬ λλ₯ μ λ°μ λ€μν μ΄μ λ° μ λ΅μ  μꡬμ μ λ’°ν μ μλ λ°μ΄ν°λ₯Ό μ 곡ν©λλ€.
4. μ¬κ° ν¨ν΄
μ¬κ° ν¨ν΄μ λΆμ° νΈλμμ μμ μ¬λ¬ λ§μ΄ν¬λ‘μλΉμ€ κ°μ λ°μ΄ν° μΌκ΄μ±μ κ΄λ¦¬νλ λ°©λ²μ λλ€. κ° νΈλμμ μ λ¨μΌ μλΉμ€ λ΄μμ λ°μ΄ν°λ₯Ό μ λ°μ΄νΈνκ³ λ€μ λ‘컬 νΈλμμ μ νΈλ¦¬κ±°νλ μ΄λ²€νΈλ₯Ό κ²μνλ μΌλ ¨μ λ‘컬 νΈλμμ μ μ¬μ©ν©λλ€. λ‘컬 νΈλμμ μ΄ μ€ν¨νλ©΄ μ¬κ°λ μ΄μ  μμ μ λλ리기 μν΄ λ³΄μ νΈλμμ μ μ€νν©λλ€.
μ¬κ°μ νμ μμ  κ΅¬ν:
- μ μ μλ μ¬κ° λ¨κ³: μ¬κ°μ κ° λ¨κ³λ νΉμ  νμ μμ  μ΄λ²€νΈλ₯Ό ν΅ν΄ νΈλ¦¬κ±°λμ΄μΌ ν©λλ€. 보μ μμ λ λͺ ννκ² μ μλ νμ μμ  μ΄λ²€νΈ(μ: `OrderCreationFailed`)λ₯Ό ν΅ν΄ νΈλ¦¬κ±°λμ΄μΌ ν©λλ€.
 - μ¬κ° μν κ΄λ¦¬: μ¬κ°μ μν(μ΄λ€ λ¨κ³κ° νμ± μνμΈμ§, μ΄λ€ λ°μ΄ν°κ° μ²λ¦¬λμλμ§)λ₯Ό κ΄λ¦¬ν΄μΌ ν©λλ€. μ΄ μνλ μ΄λ²€νΈ κΈ°λ°μΈ κ²½μ°, μ¬κ° μ§νμ μ μ΄νλ μ΄λ²€νΈμ νμ μμ μ΄ κ°μ₯ μ€μν©λλ€.
 - 보μ μ΄λ²€νΈ νμ : 보μ μμ μ΄ μ ννκ³ μμΈ‘ κ°λ₯νλλ‘ λ³΄μ₯νκΈ° μν΄ λ³΄μ μ΄λ²€νΈκ° μΌλ° μ΄λ²€νΈλ§νΌ μ격νκ² μ μλκ³ νμ μ΄ μ§μ λμλμ§ νμΈν©λλ€.
 
κΈλ‘λ² μμ :
κ΅μ  μ¬ν μμ½ νλ«νΌμ νκ³΅νΈ μμ½, νΈν  μμ½, λ ν°μΉ΄ λ° κ²°μ  μ²λ¦¬λ₯Ό ν¬ν¨νλ 볡μ‘ν μμ½ νλ‘μΈμ€λ₯Ό μ€μΌμ€νΈλ μ΄μ ν©λλ€. μ΄λ¬ν μλΉμ€λ μ  μΈκ³μ μλ‘ λ€λ₯Έ λ°μ΄ν° μΌν°μ νΈμ€ν λ μ μμ΅λλ€. μ¬μ©μκ° ν¨ν€μ§λ₯Ό μμ½νλ©΄ μ¬κ°κ° μμλ©λλ€. `FlightBooked` μ΄λ²€νΈλ νΈν  μμ½ μμ²μ νΈλ¦¬κ±°ν©λλ€. νΈν  μμ½μ μ€ν¨νλ©΄ `HotelBookingFailed` μ΄λ²€νΈκ° κ²μλκ³ , μ΄λ νκ³΅νΈ μ·¨μ λ° νλΆ μ²λ¦¬λ₯Ό νΈλ¦¬κ±°νλ 보μ νΈλμμ μ νΈλ¦¬κ±°ν©λλ€. νμ μμ μ `FlightBooked` μ΄λ²€νΈκ° νΈν  μλΉμ€κ° μ§ννλ λ° νμν λͺ¨λ μΈλΆ μ 보λ₯Ό μ¬λ°λ₯΄κ² ν¬ν¨νκ³ , `HotelBookingFailed` μ΄λ²€νΈκ° λͺ¨λ κ΄λ ¨ μλΉμ€μ κ±Έμ³ νΉμ  λ‘€λ°± μμ μ νμμ±μ μ ννκ² μ νΈνμ¬ λΆλΆ μμ½ λ° μ¬μ μ  λΆμΌμΉλ₯Ό λ°©μ§νλλ‘ λ³΄μ₯ν©λλ€.
νμ μμ  EDAλ₯Ό μν λꡬ λ° κΈ°μ
νμ μμ  EDAλ₯Ό ꡬννλ €λ©΄ λꡬ λ° κΈ°μ μ μ μ€νκ² μ νν΄μΌ ν©λλ€.
- λ©μμ§ λΈλ‘컀: Apache Kafka, RabbitMQ, AWS SQS/SNS, Google Cloud Pub/Sub, Azure Service Bus. μ΄λ¬ν λΈλ‘컀λ λΉλκΈ° ν΅μ μ μ΄μ§ν©λλ€. νμ μμ μ μν΄μλ μ€ν€λ§ λ μ§μ€νΈλ¦¬μμ ν΅ν©μ΄ μ€μν©λλ€.
 - μ€ν€λ§ μ μ μΈμ΄:
 - Avro: μ»΄ν©νΈνκ³ ν¨μ¨μ μ΄λ©° μ€ν€λ§ μ§νμ μ ν©ν©λλ€. Kafkaμ λ리 μ¬μ©λ©λλ€.
 - Protobuf: ν¨μ¨μ±κ³Ό μ€ν€λ§ μ§ν κΈ°λ₯μμ Avroμ μ μ¬ν©λλ€. Googleμμ κ°λ°νμ΅λλ€.
 - JSON Schema: JSON λ¬Έμλ₯Ό μ€λͺ νκΈ° μν κ°λ ₯ν μ΄νμ λλ€. Avro/Protobufλ³΄λ€ μ₯ν©νμ§λ§ κ΄λ²μν νΈνμ±μ μ 곡ν©λλ€.
 - μ€ν€λ§ λ μ§μ€νΈλ¦¬: Confluent Schema Registry, AWS Glue Schema Registry, Azure Schema Registry. μ΄λ¬ν λ μ§μ€νΈλ¦¬λ μ€ν€λ§ κ΄λ¦¬λ₯Ό μ€μ μ§μ€ννκ³ νΈνμ± κ·μΉμ μνν©λλ€.
 - μ§λ ¬ν λΌμ΄λΈλ¬λ¦¬: Avro, Protobuf λλ μ μλ μ€ν€λ§μ ν¨κ» μλνλλ‘ μ€κ³λ νΉμ  JSON λΌμ΄λΈλ¬λ¦¬μμ μ 곡νλ λΌμ΄λΈλ¬λ¦¬μ λλ€.
 - νλ μμν¬ λ° λΌμ΄λΈλ¬λ¦¬: Akka, Axon Framework λλ .NET, Java λλ Node.js μνκ³ λ΄μ νΉμ  λΌμ΄λΈλ¬λ¦¬μ κ°μ΄ μ€ν€λ§ λ μ§μ€νΈλ¦¬ λ° λ©μμ§ λΈλ‘컀μ ν΅ν©λλ λ§μ νλ μμν¬λ νμ μμ  μ΄λ²€νΈ μ²λ¦¬λ₯Ό μν λ΄μ₯ μ§μμ μ 곡ν©λλ€.
 
κΈλ‘λ² νμ μμ  EDA ꡬνμ μν λͺ¨λ² μ¬λ‘
κΈλ‘λ² κ·λͺ¨λ‘ νμ μμ  EDAλ₯Ό μ±ννλ €λ©΄ λͺ¨λ² μ¬λ‘λ₯Ό μ€μν΄μΌ ν©λλ€.
- μ΄κΈ°μ μ΄λ²€νΈ μ μ νμ€ν: μλΉν κ°λ°μ΄ μμλκΈ° μ μ λͺ ννκ³ λ²μ μ΄ μ§μ λ μ΄λ²€νΈ μ€ν€λ§λ₯Ό μ μνλ λ° μκ°μ ν¬μν©λλ€. κ°λ₯ν κ²½μ° νμ€ μ΄λ²€νΈ λͺ¨λΈμ μ¬μ©ν©λλ€.
 - μ€ν€λ§ κ΄λ¦¬ μ€μ μ§μ€ν: μ€ν€λ§ λ μ§μ€νΈλ¦¬λ μ ν μ¬νμ΄ μλλΌ λ€μν ν λ° μλΉμ€ μ λ°μ μ€ν€λ§ μΌκ΄μ±μ 보μ₯νκΈ° μν νμ μ¬νμ λλ€.
 - μ€ν€λ§ μ ν¨μ± κ²μ¬ μλν: CI/CD νμ΄νλΌμΈμμ μλνλ κ²μ¬λ₯Ό ꡬννμ¬ μ μ΄λ²€νΈ μ μ λλ μμ°μ/μλΉμ μ½λκ° λ±λ‘λ μ€ν€λ§ λ° νΈνμ± κ·μΉμ μ€μνλμ§ νμΈν©λλ€.
 - μ΄λ²€νΈ λ²μ  κ΄λ¦¬ μ±ν: μ²μλΆν° μ€ν€λ§ μ§νλ₯Ό κ³νν©λλ€. μ΄λ²€νΈμ λν μλ―Έλ‘ μ  λ²μ  κ΄λ¦¬μ κ°μ κΈ°μ μ μ¬μ©νκ³ μλΉμκ° μ΄μ  λ²μ μ μ μμ μΌλ‘ μ²λ¦¬ν μ μλλ‘ ν©λλ€.
 - μ μ ν μ§λ ¬ν νμ μ ν: Avro/Protobuf(ν¨μ¨μ±, μ격ν νμ )μ JSON Schema(κ°λ μ±, κ΄λ²μν μ§μ) κ°μ μ μΆ©μ μ κ³ λ €ν©λλ€.
 - μ€ν€λ§ μλ°μ λν λͺ¨λν°λ§ λ° κ²½κ³ : μ€ν€λ§ λΆμΌμΉ λλ μ²λ¦¬λλ μλͺ»λ μ΄λ²€νΈ νμ΄λ‘λ μΈμ€ν΄μ€λ₯Ό κ°μ§νκ³ κ²½κ³ νλ λͺ¨λν°λ§μ ꡬνν©λλ€.
 - μ΄λ²€νΈ κ³μ½ λ¬Έμν: μ΄λ²€νΈ μ€ν€λ§λ₯Ό 곡μ κ³μ½μΌλ‘ μ·¨κΈνκ³ , νΉν μΈλΆ λλ ν κ° ν΅ν©μ μν΄ μ λ¬Έμνλμλμ§ νμΈν©λλ€.
 - λ€νΈμν¬ μ§μ° λ° μ§μ μ°¨μ΄ κ³ λ €: νμ μμ μ λ°μ΄ν° 무결μ±μ λ€λ£¨μ§λ§, λ©μμ§ λΈλ‘컀, μ€ν€λ§ λ μ§μ€νΈλ¦¬μ κ°μ κΈ°λ³Έ μΈνλΌκ° κΈλ‘λ² λ°°ν¬, μ§μ κ·μ  μ€μ λ° λ€μν λ€νΈμν¬ μ‘°κ±΄μ μ²λ¦¬νλλ‘ μν€ν μ²κ° μ€κ³λμλμ§ νμΈν©λλ€.
 - κ΅μ‘ λ° μ§μ 곡μ : μ§λ¦¬μ  μμΉμ κ΄κ³μμ΄ λͺ¨λ κ°λ° νμ΄ νμ μμ  EDAμ μμΉκ³Ό μ¬μ© μ€μΈ λꡬμ λν΄ κ΅μ‘λ°λλ‘ ν©λλ€.
 
κ³Όμ  λ° κ³ λ € μ¬ν
μ΄μ μ μλΉνμ§λ§, κΈλ‘λ² κ·λͺ¨λ‘ νμ μμ  EDAλ₯Ό ꡬννλ λ°λ μ΄λ €μμ΄ λ°λ¦ λλ€.
- μ΄κΈ° μ€λ²ν€λ: μ€ν€λ§ λ μ§μ€νΈλ¦¬λ₯Ό μ€μ νκ³ κ°λ ₯ν μ΄λ²€νΈ μ μ κ΄νμ μ립νλ €λ©΄ μ΄κΈ° μκ° λ° λ¦¬μμ€ ν¬μκ° νμν©λλ€.
 - μ€ν€λ§ μ§ν κ΄λ¦¬: ν΅μ¬ μ΄μ μ΄μ§λ§, λ§μ μλΉμκ° μλ λκ·λͺ¨ λΆμ° μμ€ν μμ μ€ν€λ§ μ§νλ₯Ό κ΄λ¦¬νλ κ²μ 볡μ‘ν΄μ§ μ μμ΅λλ€. μ μ€ν κ³νκ³Ό μ격ν λ²μ  κ΄λ¦¬ μ λ΅ μ€μκ° νμμ μ λλ€.
 - λ€λ₯Έ μΈμ΄/νλ«νΌ κ° μνΈ μ΄μ©μ±: μ§λ ¬ν λ° μμ§λ ¬νκ° λ€μν κΈ°μ μ€νμμ μ¬λ°λ₯΄κ² μλνλλ‘ λ³΄μ₯νλ €λ©΄ μ’μ ν¬λ‘μ€ νλ«νΌ μ§μμ μ 곡νλ νμκ³Ό λΌμ΄λΈλ¬λ¦¬λ₯Ό μ μ€νκ² μ νν΄μΌ ν©λλ€.
 - ν κ·μ¨: νμ μμ μ μ±κ³΅μ μ μλ μ€ν€λ§ λ° μ ν¨μ± κ²μ¬ κ·μΉμ μ€μνλ €λ κ°λ° νμ κ·μ¨μ ν¬κ² λ¬λ € μμ΅λλ€.
 - μ±λ₯ μν₯: Avro λ° Protobufμ κ°μ νμμ ν¨μ¨μ μ΄μ§λ§, μ§λ ¬ν/μμ§λ ¬ν λ° μ€ν€λ§ μ ν¨μ± κ²μ¬λ κ³μ° μ€λ²ν€λλ₯Ό μΆκ°ν©λλ€. μ΄λ μΈ‘μ νκ³ μ€μν κ²½μ° μ΅μ νν΄μΌ ν©λλ€.
 
κ²°λ‘
μ΄λ²€νΈ κΈ°λ° μν€ν μ²λ νμ₯ κ°λ₯νκ³ νλ ₯μ μ΄λ©° 민첩ν λΆμ° μμ€ν μ ꡬμΆνκΈ° μν κ°λ ₯ν κΈ°λ°μ μ 곡ν©λλ€. κ·Έλ¬λ EDAμ μ μ¬λ ₯μ μ΅λν μ€ννλ €λ©΄ κ°λ ₯ν μ€κ³ μμΉμ λν μ½μμ΄ νμνλ©°, νμ μμ μ μ΄λ₯Ό μ€ννλ λ° μ€μν μν μ ν©λλ€. μ΄λ²€νΈ μ νμ μ μ€νκ² μ μ, κ΄λ¦¬ λ° μ ν¨μ± κ²μ¬ν¨μΌλ‘μ¨ μ‘°μ§μ μ€λ₯λ₯Ό ν¬κ² μ€μ΄κ³ κ°λ°μ μμ°μ±μ ν₯μνλ©° μκ°μ΄ μ§λ¨μ λ°λΌ μ μ§ κ΄λ¦¬ λ° λ°μ νκΈ° μ¬μ΄ μμ€ν μ ꡬμΆν μ μμ΅λλ€.
κΈλ‘λ² μ²μ€μκ² νμ μμ  EDAμ μ€μμ±μ λμ± μ»€μ§λλ€. νμ΄ μκ°λμ λ€μν κΈ°μ λ°°κ²½μ λμ΄ μ΄μλλ 볡μ‘ν μ§λ¦¬μ μΌλ‘ λΆμ°λ νκ²½μμ νμ μμ ν μ΄λ²€νΈ νμμ λͺ ννκ³ μν κ°λ₯ν κ³μ½μ λ¨μν μ μ΅ν κ²μ΄ μλλΌ μμ€ν  무결μ±μ μ μ§νκ³ λΉμ¦λμ€ λͺ©νλ₯Ό λ¬μ±νλ λ° νμμ μ λλ€. μ΄ κ°μ΄λμ μ€λͺ λ ν¨ν΄κ³Ό λͺ¨λ² μ¬λ‘λ₯Ό μ±νν¨μΌλ‘μ¨ μ  μΈκ³ κΈ°μ μ μμ κ°μ κ°μ§κ³ μ΄λ²€νΈ κΈ°λ° μν€ν μ²μ νμ νμ©νμ¬ κ°λ ₯νκ³ μμ μ μ΄λ©° λ―Έλ μ§ν₯μ μΈ μμ€ν μ ꡬμΆν μ μμ΅λλ€.