
νλμ μννΈμ¨μ΄λ λ¨μ CRUDλ₯Ό λμ΄μ 볡μ‘ν λλ©μΈ λ‘μ§κ³Ό λμ νμ₯μ± μꡬλ₯Ό λμμ λ§μ‘±ν΄μΌ ν©λλ€.
μ΄ κ³Όμ μμ μμ£Ό λ±μ₯νλ κ°λ μ΄ λ°λ‘ DDD, μ그리거νΈ(Aggregate), λ°μ΄λλ 컨ν μ€νΈ(Bounded Context), CQRS, μ΄λ²€νΈ μμ±(Event Sourcing) μ λλ€.
μ΄ κΈμμλ μ΄ λ€μ― κ°μ§ κ°λ μ΄ μ΄λ»κ² μ°κ²°λλμ§ ν° κ·Έλ¦Όκ³Ό νλ¦μ λ€λ£¨λλ‘ νκ² μ΅λλ€.
DDDμ ν΅μ¬μ λλ©μΈ μ λ¬Έκ°μ κ°λ°μκ° κ°μ μΈμ΄(μ λΉμΏΌν°μ€ μΈμ΄)λ₯Ό μ¬μ©νμ¬ μννΈμ¨μ΄λ₯Ό μ€κ³νλ κ²μ λλ€.
λ¨μν λ°μ΄ν° μ€μ¬ μ€κ³κ° μλλΌ λλ©μΈ λ‘μ§ μ€μ¬μΌλ‘ λͺ¨λΈμ λ§λ€κ³ , μ½λμ λΉμ¦λμ€ κ°λ μ΄ μΌμΉνλλ‘ νλ κ²μ΄ λͺ©νμ λλ€.
DDDμ μ£Όμ κ°λ :
νμ€ μΈκ³μ λΉμ¦λμ€λ ν¬κ³ 볡μ‘ν©λλ€. μλ₯Ό λ€μ΄ "νμ(Member)"μ΄λΌλ λ¨μ΄λ
κ²°μ μμ€ν μμλ "κ³ κ°(Customer)"
μΈμ¬ μμ€ν μμλ "μ§μ(Employee)" μΌλ‘ λ€λ₯΄κ² μ°μΌ μ μμ΅λλ€.
μ΄λ₯Ό ν΄κ²°νλ λ°©λ²μ΄ λ°μ΄λλ 컨ν μ€νΈμ λλ€.
μμ)
[ λΉμ¦λμ€ μ 체 λλ©μΈ ]
ββββββββββββββββ
β νμ¬ μ΄μ β
ββββββββββββββββ
β
ββββββββββββββββββββΌβββββββββββββββββββ
β β
βββββββββββββββ βββββββββββββββββ
κ²°μ μμ€ν
μΈμ¬ μμ€ν
Payment BC HR BC
βββββββββββββββ βββββββββββββββββ
β β
βββββββββββββββββ βββββββββββββββββ
Customer Employee
(κ³ κ°) (μ§μ)
- μ΄λ¦ - μ΄λ¦
- κ²°μ μλ¨ - λΆμ
- ꡬ맀λ΄μ - κΈμ¬
βββββββββββββββββ βββββββββββββββββ
β β
βββββββββββββ λͺ
μμ μΈν°νμ΄μ€(API/μ΄λ²€νΈ
λ°μ΄λλ 컨ν μ€νΈ λ΄λΆμμλ λͺ¨λ κ°μ²΄κ° λ€μμΌ μμΌλ©΄ μ μ§λ³΄μκ° μ΄λ ΅μ΅λλ€.
κ·Έλμ μΌκ΄μ± κ²½κ³(Consistency Boundary)λ₯Ό μ νκ³ κ·Έ μμμ νμ κ·μΉμ΄ μ§μΌμ§λλ‘ νλ λ¨μκ° μ그리거νΈμ λλ€.
μμ)
Order (Root) + OrderItem (λ΄λΆ μν°ν°) Post (Root) + Comment (λ΄λΆ μν°ν°) Account (Root) + Transaction (λ΄λΆ μν°ν°)π ν΅μ¬μ νΈλμμ μ Aggregate λ¨μλ‘ λ³΄μ₯λλ€λ μ μ λλ€.
μΌλ°μ μΌλ‘ νλμ λͺ¨λΈλ‘ μ½κΈ°μ μ°κΈ°λ₯Ό λμμ μ²λ¦¬ν©λλ€.
νμ§λ§ νΈλν½μ΄ 컀μ§κ³ 볡μ‘λκ° μ¬λΌκ°λ©΄ μ°κΈ°(Command)μ μ½κΈ°(Query)λ₯Ό λΆλ¦¬νλ CQRS ν¨ν΄μ΄ λ±μ₯ν©λλ€.
μ₯μ :
λ¨μ :
μμ)
UserRepositoryλ μ°κΈ°μ© DB(JPA κΈ°λ°)
UserReadRepositoryλ μ½κΈ°μ© DB(μΊμ or μ‘°ν μ μ© DB)λ‘ λλ μ μλ€.
μΌλ°μ μΌλ‘ DBμλ "νμ¬ μν"λ§ μ μ₯ν©λλ€.
μ΄λ²€νΈ μμ±μ λ€λ₯Έ μ κ·Όμ νν©λλ€. μν λ³νλ₯Ό λ§λ λͺ¨λ μ΄λ²€νΈλ₯Ό μ μ₯ν©λλ€.
μ₯μ :
λ¨μ :
μμ)
μ¬μ©μκ° μ£Όλ¬Έμ μμ±/κ²°μ /μ·¨μνλ κ³Όμ μ μ΄λ²€νΈλ‘ μ μ₯
μ΄ λ€μ― κ°μ§ κ°λ μ λ°λ‘ λ Έλ κ²μ΄ μλλΌ νλμ μ€ν 리λ₯Ό μ΄λ£Ήλλ€.
DDD β BC β Aggregate β CQRS β Event Sourcing μ΄λ° νλ¦μΌλ‘ μ°κ²°λ©λλ€.
λͺ¨λ 볡μ‘ν λλ©μΈμ ν¨κ³Όμ μΌλ‘ λ€λ£¨κΈ° μν λꡬμ λλ€.
νμ§λ§ "무쑰건 μ°λ ν¨ν΄"μ΄ μλλΌ λλ©μΈ νΉμ±κ³Ό μꡬμ¬νμ λ§μΆ° μ νμ μΌλ‘ μ μ©ν΄μΌ ν©λλ€.
νΉμ κΆκΈν λΆλΆμ΄λ λ λ³΄κ³ μΆμ μ£Όμ κ° μλ€λ©΄ λκΈλ‘ λ¨κ²¨μ£ΌμΈμ π