π μ΄λ²€νΈ μ€ν λ°(Event Storming)μ΄λ 무μμΈκ°?
μ΄λ²€νΈ μ€ν λ°μ μ¬λλ€μ λͺ¨μΌκ³ μννΈμ¨μ΄λ₯Ό λΆν νλ κ²μΌλ‘, λ€μν λ°°κ²½μ μ¬λλ€μ΄ κ°μ ν μ΄λΈμ λͺ¨μ¬ ν¨κ» λͺ¨λΈλ§νλ©° λΉμ¦λμ€, νλ‘μΈμ€ λμμΈ, μ¬μ©μ κ²½ν, μννΈμ¨μ΄ λ± λ€μν κ΄μ μ λμΌν κΈ°λ° μμ μ€κ³νλ λ°©λ²μ λλ€
π‘ μ΄λ²€νΈ μ€ν λ°μ ν΅μ¬ μμλ 무μμΈκ°?
λλ©μΈ μ΄λ²€νΈ: κ³Όκ±° μμ λ‘ μμ±λλ©°, νΉμ μμ μ μν λ³νλ₯Ό λνλ΄κ³ λ€μ νλμ νΈλ¦¬κ±° μν μ ν©λλ€
μ μ± : μ΄λ²€νΈμ νμ μ‘°μΉ μ¬μ΄μ μ°κ²° κ³ λ¦¬ μν μ ν©λλ€
μ½κΈ° λͺ¨λΈ: μ¬μ©μκ° νΉμ κ²°μ μ λ΄λ¦¬λ λ° νμν μ 보λ₯Ό 물리μ μΌλ‘ ννν κ²μ λλ€
μ΄ μ»¨ν μΈ λ μ΄λ²€νΈ μ€ν λ°(event storming)μ΄λΌλ λ°©λ²λ‘ μ ν΅ν΄ 볡μ‘ν λΉμ¦λμ€ λλ©μΈμ μ΄ν΄νκ³ μννΈμ¨μ΄ μ€κ³λ₯Ό κ°μ νλ λ°©λ²μ μ€λͺ ν©λλ€. μ΄λ²€νΈ μ€ν λ°μ λ€μν μ΄ν΄κ΄κ³μλ€μ΄ ν¨κ» λͺ¨μ¬ λΉμ¦λμ€ μ΄λ²€νΈλ₯Ό μκ° μμλλ‘ μκ°νν¨μΌλ‘μ¨ μ¨κ²¨μ§ λ¬Έμ μ κ³Ό λ°μ΄λλ 컨ν μ€νΈ(Bounded Context)λ₯Ό λ°κ²¬νκ³ , μ΄λ₯Ό ν΅ν΄ μ‘°μ§μ μ λ ¬κ³Ό ν΅μ¬ λ¬Έμ ν΄κ²°μ μ§μ€ν μ μλλ‘ λμ΅λλ€. μ΄ λ°©λ²μ νΉν λλ©μΈ μ£Όλ μ€κ³(DDD)μμ ν¨κ³Όμ μΌλ‘ νμ©λ μ μμ΅λλ€.
1. λλ©μΈ μ λ¬Έκ°μμ νμ μ νκ³μ μ€μμ±
μννΈμ¨μ΄ κ°λ°μμ λλ©μΈ μ λ¬Έκ°μμ μ°½μμ νμ κ³Ό λνκ° λ§€μ° μ€μν¨
νμ§λ§ λλ©μΈ μ λ¬Έκ°κ° νμ λͺ¨λ μ§μμ κ°κ³ μκ±°λ, μ‘°μ§ μ 체λ₯Ό μ΄ν΄νλ κ²μ μλ
κ°μ μμ μ 'μ¬μΌλ‘(λΆμ λ μμ)'μλ§ μ λ¬Έμ±μ κ°μ§
μΌλΆ μμμ μ무λ λͺ¨λ₯Ό μ μμ, ν΄μ¬ λ±μΌλ‘ μ§μμ΄ μ¬λΌμ§κΈ°λ ν¨
μννΈμ¨μ΄ κ°λ°μλ λ¨μν μꡬμ¬νμ λ²μνλ μν μ΄ μλ
λ¬Έμ λλ©μΈμ λν μ§μμ 볡μ‘νκ³ , λ°λ‘ μννΈμ¨μ΄λ‘ μ νν μ μμ
μ‘°μ§ λ΄ μ§μμ λΆμ κ³Ό λΆμΌμΉκ° μ‘΄μ¬ν¨
2. λ°μ΄λλ 컨ν μ€νΈμ μ§μ λΆμ μ μ°κ²°κ³ 리
λ°μ΄λλ 컨ν μ€νΈ(κ²½κ³κ° λͺ νν λͺ¨λΈμ μμ)λ μ‘°μ§ λ΄ μ§μμ λΆμ κ³Ό λ°μ ν κ΄λ ¨μ΄ μμ
μ¬λ¬ λͺ¨λΈμ΄ νλ ₯νμ¬ νλμ λͺ©νλ₯Ό λ¬μ±ν¨
λ°μ΄λλ 컨ν μ€νΈλ₯Ό μλ³νλ κ²μ μ¬μ ν λͺ¨νΈν¨
μ΄ κ°μ°μ λͺ©μ : μ΄ μ°κ²°κ³ 리λ₯Ό μ΄ν΄νκ³ , λ°μ΄λλ 컨ν μ€νΈμ μ€λ§λ¦¬λ₯Ό μ°Ύλ κ²
3. 볡μ‘ν λλ©μΈμμμ μ§μ§ λ¬Έμ : λΉ λ₯Έ μ΄ν΄
볡μ‘ν λλ©μΈμμλ μ½λ© μλκ° μλλΌ, λ¬Έμ μ 볡μ‘μ±μ λΉ λ₯΄κ² μ΄ν΄νλ κ²μ΄ ν΅μ¬
λΉ λ₯Έ μ½λ© λꡬλ λ§μ§λ§, 'μ¬λ°λ₯Έ μννΈμ¨μ΄'λ₯Ό λΉ λ₯΄κ² λ§λλ λꡬλ λΆμ‘±ν¨
Event Stormingμ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ λ° λμμ μ€
4. Event Stormingμ λ€μν λ μνΌμ λΉ ν½μ² μν¬μ
Event Stormingμ νλμ λ°©μμ΄ μλλΌ, μν©μ λ°λΌ λ€μν λ μνΌκ° μ‘΄μ¬ν¨
κ°μ₯ ν° ν¬λ§·: λΉ ν½μ² μν¬μ
λ€μν μ΄ν΄κ΄κ³μ(λΉμ¦λμ€, IT, UX, κ³ κ° λ±) μ΅λ 20~30λͺ (κ²½μ°μ λ°λΌ 70λͺ κΉμ§) μ°Έμ¬ κ°λ₯
λμ λ²½(15~18λ―Έν°)μ 무μ νμ²λΌ 보μ΄λ 곡κ°κ³Ό λ§μ λ§μ»€, μ€ν°μ»€ μ¬μ©
μ 체 νλ‘μΈμ€λ₯Ό νλμ λ³Ό μ μλλ‘ ν¨
μ§ν λ°©λ²
μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ μκ°μ νλ¦(νμλΌμΈ) μ€μ
λλ©μΈ μ΄λ²€νΈ(κ³Όκ±° μμ , μ£Όν©μ μ€ν°μ»€)λ‘ λͺ¨λ νλ¦μ λͺ¨λΈλ§
κ³Όκ±° μμ λ₯Ό μ°λ μ΄μ : νΉμ μμ μ μν λ³νλ₯Ό λͺ νν μΈμνκ² ν¨
μ²μμ νΌλμ€λ½κ³ μ‘°μ©νμ§λ§, μ μ°¨ μ°Έκ°μλ€μ΄ μμ μ κ΄μ μ λ²½μ λΆμ΄λ©° λνκ° μμλ¨
μλ‘ λ€λ₯Έ μκ°, μ견 μΆ©λ, λ Όμ λ±λ μκΉ, μ½λ©νΈ λ±μΌλ‘ μκ°ν
곡μ μ€ν 리μ μ½λ©νΈ, λ§μ°°μ λͺ¨λ λͺ¨λΈμ μΌλΆ
5. ꡬ쑰νμ λ€μν κ΄μ μ ν΅ν©
μ°Έκ°μλ€μ΄ λ λ§μ ꡬ쑰λ₯Ό μν λ, νμμ(μ¬λ), μμ€ν λ± μΆκ°
μΈλΆ μμ€ν μ μ μ½μ, λ€μν μ¬μ©μ μ νμ λ Όμμ κΉμ΄λ₯Ό λν¨
μ: κΈ°μ κ³ κ°κ³Ό κ°μΈ κ³ κ°μ νλ μ°¨μ΄ λ±
νμμ (Discovery) λ¨κ³λ‘, μ΄λ€ λνκ° λμ¬μ§ μμΈ‘ λΆκ°
μ€μ 컨νΌλ°μ€ μ‘°μ§ μμ: ν€λ ΈνΈ μ°μ¬, μ΄λ μΈμ¬, μ₯μ, νμμ¬, λ¬Όλ₯ λ± λ€μν νλ¦μ΄ νλμ 보μ
κ²°κ³Ό: ν¬κ³ , νλ €νλ©°, ν루 λ§μ λ§μ μΌμ΄ μκ°νλ¨
6. λΉ ν½μ² μν¬μμ μ£Όμ ν¨κ³Ό
λͺ¨λ νλ‘μΈμ€κ° κ°μνλμ΄ μ¨κ²¨μ§ λΆλΆμ΄ μμ
12~18λ―Έν°μ λ²½μ λͺ¨λ κ²μ΄ λλ¬λ¨
18λ―Έν°λ₯Ό λμΌλ©΄ μ‘°μ§μ΄ μ체 무κ²λ‘ λΆκ΄΄ν μ μμ(λΉμ )
μ¬μΌλ‘ κ° μ΄ν΄ μ¦μ§: λ€λ₯Έ λΆμμ 볡μ‘μ±μ μ²μ μκ² λλ κ²½μ° λ§μ
"λ΄κ° upstreamμμ λ§λ μμ μ€μκ° downstreamμ ν° λ¬Έμ λ₯Ό μΌμΌμΌ°λ€"λ μμ μΈμ
μ‘°μ§μ νκ³ , μ λ ¬, ν©μ νμ±μ μ μ©
λͺ¨λκ° κ°μ 'ν° νμ΄μ§'μ μ¬λΌκ°
ν΅μ¬ λ¬Έμ μ λν ν©μμ λͺ νν μ°μ μμ λμΆ
λ²μλ₯Ό μ ννμ§ μκ³ μ 체λ₯Ό νμνμ¬ λ³λͺ©, ν΅μ¬ λ¬Έμ λ₯Ό λμΆ
μ‘°μ§ μ μ²΄κ° 'μ§κΈ λΉμ₯ ν΄κ²°ν΄μΌ ν μ μΌν λ¬Έμ 'μ ν©μ
κΈ°μ‘΄ λ°±λ‘κ·Έ, μΆμ μΉ λ±μ 무μλ―Έν΄μ§κ³ , μ€μ§μ μ€νκ³Ό ν΄κ²°μ μ§μ€
κΈ°μ‘΄ κ΄νμ΄λ λ² μ€νΈ νλν°μ€κ° ν΄κ²°νμ§ λͺ»ν λ¬Έμ μ λλ¬ν μ μμ
7. λ°μ΄λλ 컨ν μ€νΈμ μμ°μ€λ¬μ΄ λλ¬λ¨κ³Ό μ 보 νλ¦
μν¬μ μ€ κ°μ μμ μ μμ(λ°μ΄λλ 컨ν μ€νΈ)μ λν μμ κΆμ΄ λλ¬λ¨
μ: μνμ μΉ΄νλ‘κ·Έμ μΆκ°ν λ, νμͺ½μ 체ν¬λ¦¬μ€νΈλ₯Ό μ κ²½ μ°μ§λ§, λ€λ₯Έ μͺ½μ κ²°κ³Όλ§ μ κ²½ μ
μλ‘ λ€λ₯Έ λͺ¨λΈμ΄ νμν¨μ΄ λͺ νν΄μ§
μ 보λ λλ©μΈ μ΄λ²€νΈλ₯Ό ν΅ν΄ λ€μ λͺ¨λΈλ‘ μ λ¬
μν¬μ μ’ λ£ μ, ν΅μ¬ λ¬Έμ μ λ°μ΄λλ 컨ν μ€νΈ νλ³΄κ° λͺ νν λλ¬λ¨
8. νλ‘μΈμ€ λͺ¨λΈλ§κ³Ό μννΈμ¨μ΄ μ€κ³λ‘μ νμ₯
λΉ ν½μ² μ΄ν, λ¬Έμ μμμ μ’ν νλ‘μΈμ€ λͺ¨λΈλ§ μν¬μ μ§ν
μ νλ λ¬Έμ μ μ§μ€, μμ μΈμμ΄ ν΄κ²°μ± νμ
컀맨λ, λλ©μΈ μ΄λ²€νΈ, μ μ± (Policy), μΈλΆ μμ€ν λ± λ€μν μμλ‘ λͺ¨λΈλ§
μ μ± (Policy): μ΄λ²€νΈμ λ€μ νλ μ¬μ΄μ 'μ μ°©μ ' μν
μ: μ΄λ©μΌ λ¬Έμκ° μ€λ©΄ λ΅λ³νλ μ‘°μ§μ μ΅κ΄
'μ¦μ(immediately)', 'νμ(always)'λΌλ μ§λ¬ΈμΌλ‘ μ€μ μ μ± μ λͺ νν ν¨
κ°μΉ(Value) κ°μν: νλ‘μΈμ€μμ μ°½μΆΒ·μλ©Έλλ κ°μΉλ₯Ό λͺ νν λλ¬λ
μ: 컨νΌλ°μ€ λ°ν μ μ μ, μλ½/κ±°μ , μ 보 μ 곡, νν μμΉ/μ€νΈλ μ€ λ± λ€μν κ°μΉ νλ¦
λ€μν λ°°κ²½μ μ¬λλ€μ΄ ν ν μ΄λΈμμ λͺ¨λΈλ§
κ³ κ° μ¬μ , μμ΄μ΄νλ μ, κ°λ°ν λ± λΆλ¦¬νμ§ μκ³ ν¨κ» μμ
ν©μμ μ루μ λμΆμ μ΄λ €μ: μ€κ³ λ¨κ³μμλ ν©μμ 'μμ κ΄λ¦¬'κ° λ μ΄λ €μμ§
μννΈμ¨μ΄ μ€κ³μμλ 'μ 그리κ²μ΄νΈ' λ± λΉμ¦λμ€μ 무κ΄ν κ°λ μ΄ λ±μ₯ν μ μμ
λΉμ¦λμ€ λ΄λΉμμκ² κΈ°μ μ κ°λ μ κ°μνμ§ μλλ‘ μ£Όμ
λͺ¨λΈλ§μ μκΉ νΌμ¦μ²λΌ λ¨μνκ², UMLμ²λΌ 볡μ‘νκ² λ§λ€ νμ μμ
9. λ°λ³΅μ κ°μ κ³Ό μΈμ΄μ μ μ
μ²μ λ§λ λͺ¨λΈμ μ§μ°©νμ§ λ§κ³ , μ¬λ¬ λ² λ€μ μ°κ³ κ°μ
첫λ μ νΌλ, λμ§Έ λ μ μΈλ°ν¨κ³Ό μ νμ± κ°μ‘°
'μ²μ μ΄ μ΄λ²€νΈ'λ λ―Έμν μ μμΌλ, μ¬μμ±μ΄ νμ
μ λ¬Έκ° κ° λ Όμμμ λ°μ΄λλ 컨ν μ€νΈμ λΆλ¦¬μ μμ κΆμ΄ λͺ νν λλ¬λ¨
ν΅μ¬ μ λ³΄κ° λͺ νν κ°μνλ¨
10. μ΄λ €μ΄ λ¬Έμ ν΄κ²°μ μν μ€νκ³Ό λ°λ³΅
μ΄λ €μ΄ λ¬Έμ λ λͺ νν ν΄λ΅μ΄ μμΌλ©°, μ€νκ³Ό μ€ν¨λ₯Ό λ°λ³΅ν΄μΌ ν¨
μ‘°μ§μ΄ λ°λ³΄ κ°μμ λ¬Έμ κ° λ¨μμλ κ²μ΄ μλλΌ, ν΄κ²°μ΄ μ΄λ €μμμ
λ€μν μλμ λꡬμ νμ©μ΄ νμν¨
11. 리λλͺ¨λΈ(Read Model)κ³Ό μ¬μ©μ κ²½ν μ€μ¬ μ€κ³
리λλͺ¨λΈ: μ¬μ©μκ° κ²°μ μ λ΄λ¦¬κΈ° μν΄ νμν μ 보λ₯Ό μ 곡νλ λͺ¨λΈ
λ¨μ λ°μ΄ν°κ° μλλΌ, μ€μ μμ¬κ²°μ μ νμν μ 보μ μ§μ€
μ: κ°κ²©, μ΄λ―Έμ§ λ± κ°μ μ Β·μ΄μ±μ μμ λͺ¨λ κ³ λ €
리λλͺ¨λΈμ κ²°μ μ΄ μΌμ΄λλ λ°μ΄λλ 컨ν μ€νΈμ μμΉ
μμ΄μ΄νλ μ λ± λ€μν λꡬμ κ²°ν© κ°λ₯
12. λμμΈ κ°μ κ³Ό λ€μν μ루μ νμ
λμμΈμ λ°λ³΅μ μΌλ‘ κ°μ
λΆλ§μ‘±μ€λ¬μ΄ λΆλΆ(ν«μ€ν, μ½λ©νΈ λ±)μ λͺ νν λλ¬λ΄κ³ νλμ© ν΄κ²°
λ¨μΌ μ루μ μ μ§μ°©νμ§ λ§κ³ , μ¬λ¬ λμμ νμ
λ κ°μ§ μ λ΅ μ€ μ νμ΄ μ΄λ ΅λ€λ©΄, λ¬Έμ λ₯Ό λ μ΄λ ΅κ² λ§λ€μ΄ λͺ νν μ°μλ₯Ό μ°Ύμ
λͺ¨λΈλ§ μ’ λ£μ κΈ°μ€: 'λΈλ£¨μ€ 리 μν'μ²λΌ, λ λ§μ μꡬμ¬νμ΄ μλ μμ κ°μ΄ μκΈΈ λ
13. Event Stormingμ ν΅μ¬ μμ½
Event Stormingμ λ¨μΌ λ μνΌκ° μλλΌ, μν©μ λ°λΌ λ€μν λ°©μμΌλ‘ μ μ© κ°λ₯
νΌμμ λ€μν ν νμ μ¬λ¦¬λ―, κΈ°λ³Έμ κ°κ³ μμ©μ΄ λ€μν¨(λΉμ )
λλ©μΈ μ΄λ²€νΈ μ€μ¬μ μ€ν 리ν λ§μ΄ κ°μ₯ ν¨κ³Όμ
μ¬λλ€μ μ΄μΌκΈ°λ₯Ό ν΅ν΄ μμ°μ€λ½κ² μΌκ΄μ±μ μ μ§ν¨
ν΅μ¬ λ©μμ§: "μ¬λμ ν©μΉκ³ , μννΈμ¨μ΄λ₯Ό λΆλ¦¬νλ€"
κ³Όκ±°μλ μ¬λμ λΆλ¦¬νκ³ , μννΈμ¨μ΄(λ°μ΄ν°λ² μ΄μ€)λ₯Ό ν©μ³€μΌλ, Event Stormingμ κ·Έ λ°λ
μ΄λ²€νΈ μ€μ¬μ νμλΌμΈμ΄ λΉμ¦λμ€, νλ‘μΈμ€, μννΈμ¨μ΄ μ€κ³ λͺ¨λλ₯Ό μ°κ²°νλ κ³΅ν΅ μΈμ΄
λ°μ΄ν° μ€μ¬ μν€ν μ²λ‘λ λΆκ°λ₯ν λ€μν κ΄μ μ ν΅ν©μ΄ κ°λ₯ν¨
14. κ²°λ‘ λ° λ§λ¬΄λ¦¬
κ°μ° μ’ λ£ λ° κ°μ¬ μΈμ¬
(μ²μ€ λ°μ)