Skip to content

becomeStar/tactical-domain-driven-design

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

4 Commits
ย 
ย 
ย 
ย 

Repository files navigation

tactical-domain-driven-design

  • ์ „๋žต์ (strategic) ๋””์ž์ธ์€ ์ถ”์ƒ์ ์ธ ์ „์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ˜๋ฉด ์ „์ˆ ์ (tactical) ๋””์ž์ธ์€ ํด๋ž˜์Šค์™€ ๋ชจ๋“ˆ์„ ๋‹ค๋ฃฌ๋‹ค
  • ์ „์ˆ ์  ์„ค๊ณ„์˜ ๋ชฉ์ ์€ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์‹ค์ œ ์ฝ”๋“œ๋กœ ๊ตฌ์ฒดํ™”ํ•˜๋Š” ๊ฒƒ
  • ์ „๋žต์  ์„ค๊ณ„๋ฅผ ๋งˆ์นœ ๋‹ค์Œ, ์ „์ˆ ์  ์„ค๊ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์ฒดํ™”์‹œํ‚ค๋ฉด์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋‹ค์‹œ ์ „๋žต์  ์„ค๊ณ„๋ฅผ ๋ณด์™„ํ•˜๋Š” ๋ฐ˜๋ณต์ ์ธ ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค

tactical design ์„ ์œ„ํ•œ ๋„๊ตฌ๋“ค

  • Value Objects(VO)

    • ๋‘๊ฐœ์˜ VO ๋‚ด์— ์žˆ๋Š” ๊ฐ’๋“ค์ด ๊ฐ™๋‹ค๋ฉด ๋‘๊ฐœ์˜ VO๋Š” ๊ฐ™์€ VO๋กœ ๊ฐ„์ฃผ๋œ๋‹ค
    • immutable ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค (VO์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด VO๋ฅผ ๋งŒ๋“ ๋‹ค)
    • VO ๋‚ด์—๋Š” ๋‹จ์ˆœํžˆ ๊ฐ’๋“ค์ด ์•„๋‹Œ business logic๋„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค
      • VO๊ฐ€ immutable ์ด๊ธฐ ๋•Œ๋ฌธ์— business logic์€ thread-safe ํ•˜๋‹ค
      • ์ด๋Ÿฌํ•œ ์ด์œ  ๋•Œ๋ฌธ์— domain์— VO๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์ข‹๋‹ค
    • ๊ฐ€๊ธ‰์  VO ์˜ size ๋ฅผ ์ž‘๊ณ  ์‘์ง‘๋„๊ฐ€ ๋†’๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค
      • ์œ ์ง€๋ณด์ˆ˜์™€ ์žฌ์‚ฌ์šฉ์ด ์‰ฝ๋‹ค
    • VO๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ business ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ’๋“ค์„ ๋ž˜ํ•‘ํ•ด ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“ ๋‹ค
      • ex. BigDecimal ๋Œ€์‹ ์— BigDecimal์„ ํฌํ•จํ•˜๋Š” Money VO
      • ex. phone number ๋ฅผ string ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ๋ณด๋‹ค string์„ ํฌํ•จํ•˜๋Š” PhoneNumber VO
    • ์žฅ์ 
      • ๊ฐ’์— ๋ช…ํ™•ํ•œ ์˜๋ฏธ๊ฐ€ ๋ถ€์—ฌ๋œ๋‹ค
      • ๊ฐ’์— ๋Œ€ํ•ด business operation ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค
      • ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ(ex. null check)์„ VO ์ƒ์„ฑ์ž์—์„œ ํ•  ์ˆ˜ ์žˆ๋‹ค
  • Entities

    • ๊ณ ์œ ์˜ ID ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด(Entity์˜ ์ˆ˜๋ช…์ฃผ๊ธฐ ๋™์•ˆ ID๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค)
    • ๊ฐ์ฒด ๋‚ด์˜ ๊ฐ’์ด ๋‹ฌ๋ผ๋„ ID๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฐ™์€ entity๋กœ ๊ฐ„์ฃผ๋œ๋‹ค
    • ๊ฐ์ฒด ๋‚ด์˜ ๊ฐ’์ด ๊ฐ™์•„๋„ ID๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ entity๋กœ ๊ฐ„์ฃผ๋œ๋‹ค
    • VO ์™€ ๋‹ค๋ฅด๊ฒŒ mutable ํ•˜๋‹ค
      • ๊ฐ’์„ ๋ณ€๊ฒฝํ• ๋•Œ, setter ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์™œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ด์œ ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’ ๋ณ€๊ฒฝ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค
        • ex. setEndDate(finalDay) ๋Œ€์‹  terminateContract(reason, finalDay)
      • setFirstName(..) , setLastName(..) ๋Œ€์‹  changeName(firstName, lastName, reason, effectiveAsOfDate)
  • Entity or Value Object?

    • ๊ฐ™์€ ๊ฐœ๋…์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ Entity๊ฐ€ ๋ ์ˆ˜๋„ ์žˆ๊ณ  VO ๊ฐ€ ๋ ์ˆ˜๋„ ์žˆ๋‹ค
    • VO ๊ฐ€ immutable ํ•˜๊ณ  ์‚ฌ์ด์ฆˆ๊ฐ€ ๋” ์ž‘๊ธฐ ๋•Œ๋ฌธ์— entity๋ฅผ ๊ฐ€๋Šฅํ•œ ์ ๊ฒŒ, VO๋ฅผ ๊ฐ€๋Šฅํ•œ ๋งŽ์ด ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค
  • Aggregates

    • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” entity ์™€ VO ์˜ ์ง‘ํ•ฉ

      • create, retrieve, store ๊ฐ€ ํ†ต์งธ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค
      • ํ•ญ์ƒ ์ผ๊ด€๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค
      • aggregate root ๊ฐ€ ํ•˜๋‚˜์˜ aggregate ๋ฅผ ์†Œ์œ ํ•˜๋ฉฐ, aggregate ์—๋Š” ์ž์‹ ์„ ์‹๋ณ„ํ•˜๋Š” ID ๊ฐ€ ์žˆ๋‹ค
      • aggregate
    • aggregate ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œ์ผœ์•ผ ํ•œ๋‹ค

      • ๋ฐ”๊นฅ์—์„œ ์ฐธ์กฐ๋˜๋Š” aggregate ๋Š” ๋ฐ˜๋“œ์‹œ aggregate root ๋ฅผ ํ†ตํ•ด ์ฐธ์กฐ๋˜์–ด์•ผ ํ•œ๋‹ค
      • aggregate root ๋Š” aggregate ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค
      • aggregate_condition
    • entity ๋ฅผ aggregate root ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์ด์ง€ , aggregate root ์•„๋ž˜์— ๋‘˜ ๊ฒƒ์ธ์ง€(local entity) ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค

      • local entity ๋Š” ๋‹ค๋ฅธ aggregate ์—์„œ ์ฐธ์กฐ๋  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, aggregate ๋‚ด์—์„œ๋งŒ ๊ณ ์œ ํ•œ ID๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค
      • aggregate root ๋กœ ์‚ฌ์šฉ๋˜๋Š” entity ๋Š” ์™ธ๋ถ€์—์„œ ์ฐธ์กฐ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— global unique ํ•œ ID๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค
    • entity ๋ฅผ aggregate root๋กœ ์‚ฌ์šฉํ• ์ง€ ์•„๋‹์ง€๋ฅผ ์–ด๋–ค ๊ธฐ์ค€์—์„œ ํŒ๋‹จํ• ๊นŒ?

      • entity ๊ฐ€ application ๋‚ด์—์„œ ์–ด๋–ป๊ฒŒ ์ ‘๊ทผ๋˜๋Š”๊ฐ€?
      • entity ๊ฐ€ ID ๋กœ ๊ฒ€์ƒ‰๋œ๋‹ค๋ฉด aggregate root ์ด๋‹ค
      • ๋‹ค๋ฅธ aggregate ์—์„œ ์ด entity๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•œ๋‹ค๋ฉด aggregate root ์ด๋‹ค
      • application ์—์„œ entity๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ˜•๋˜๋Š”๊ฐ€?
        • ๋…๋ฆฝ์ ์œผ๋กœ entity ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด aggregate root
        • ๋‹ค๋ฅธ entity ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ์ด entity๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด ์ด entity ๋Š” local entity
    • aggregate root ๊ฐ€ aggregate ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•

      • ๋ชจ๋“  ์ƒํƒœ ๋ณ€๊ฒฝ์€ aggregate ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋„๋ก ๊ฐ•์ œํ•œ๋‹ค
      • local entity ์—์„œ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด aggregate root ๋กœ ํ†ต์ง€ํ•œ๋‹ค
  • Aggregate Design Guidelines

    • aggregate ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ

      • aggregate ๊ฐ€ ํ†ต์งธ๋กœ DB์— ์ €์žฅ๋˜๊ณ  ๊ฒ€์ƒ‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘์•„์•ผ ์„ฑ๋Šฅ์ด ๋” ์ข‹๋‹ค
      • aggregate ํฌ๊ธฐ๊ฐ€ ์ž‘์œผ๋ฉด, ๋น„์ฆˆ๋‹ˆ์Šค ์ผ๊ด€์„ฑ์„ ์ง€ํ‚ค๊ธฐ ๋” ์‰ฌ์›Œ์ง„๋‹ค
    • ID๋กœ ๋‹ค๋ฅธ aggregate ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ

      • ๋‹ค๋ฅธ aggregate ๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•˜์ง€ ๋ง๊ณ , aggregate root ID ๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” VO๋ฅผ ๋งŒ๋“ค๊ณ , VO๋กœ aggregate ๋ฅผ ์ฐธ์กฐํ•ด๋ผ
    • ์—ฌ๋Ÿฌ๊ฐœ์˜ aggregate์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ domain event๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ

      • ์—ฌ๋Ÿฌ๊ฐœ์˜ aggregate ์— ๊ฑธ์ณ ์žˆ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ, domain event ๊ณผ eventual consistency๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

      • ์—ฌ๋Ÿฌ aggregate ์˜ transaction ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ -domain_event_1

      • ์—ฌ๋Ÿฌ aggregate์˜ transaction์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ๊ฒฝ์šฐ
        --domain_event_2

      • ํ•˜๋‚˜์˜ aggregate์—์„œ ๋‹ค๋ฅธ aggregate์˜ ์ƒํƒœ๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค

    • ๋‚™๊ด€์  ๋ฝ(optimistic locking) ์„ ์‚ฌ์šฉํ•˜๊ธฐ

      • aggregate์˜ ์ค‘์š”ํ•œ ํŠน์ง•์€ ๋น„์ฆˆ๋‹ˆ์Šค ์ผ๊ด€์„ฑ, ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค
      • aggregate๋ฅผ ์ €์žฅํ•  ๋•Œ, ๋‘๊ฐœ์˜ ์ €์žฅ ์—ฐ์‚ฐ์ด ์„œ๋กœ ์ถฉ๋Œํ•˜๋ฉด aggregate๊ฐ€ ๊นจ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋–„๋ฌธ์— aggregate๋ฅผ ์ €์žฅํ• ๋•Œ optimistic lock์„ ์‚ฌ์šฉํ•œ๋‹ค
      • ๋‚™๊ด€์  ๋ฝ(optimistic lock) ์€ ๋น„๊ด€์  ๋ฝ(pessimistic lock) ๋ณด๋‹ค ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ๋‹ค
  • Domain Events

    • ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ๋Š” ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค

      • ๋„๋ฉ”์ธ์˜ ์ „์ฒด(aggregate root) ๋˜๋Š” ์ผ๋ถ€(aggregate root์˜ ํŠน์ • ์†์„ฑ)๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค
    • ์ „ํ˜•์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ์†์„ฑ์„ ๊ฐ€์ง„๋‹ค

      • immutable
      • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ timestamp
      • ๋‹ค๋ฅธ ์ด๋ฒคํŠธ์™€ ๊ตฌ๋ณ„ํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ณ ์œ  ID
      • aggregate root๋‚˜ domain service์— ์˜ํ•ด publish ๋œ๋‹ค
    • domain event listener๊ฐ€ domain event๋ฅผ ๋ฐ›๋Š”๋‹ค

    • domain event listener๋Š” event ๋ฅผ publish ํ–ˆ๋˜ ํŠธ๋žœ์žญ์…˜๊ณผ ๋ณ„๋„๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

    • domain event ์˜ ๊ฐ€์žฅ ํฐ ์ด์ ์€ ์‹œ์Šคํ…œ์„ ํ™•์žฅ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค๋Š” ์ ์ด๋‹ค

      • ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ณ ์น˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ trigger ํ•  ์ˆ˜ ์žˆ๋‹ค
    • event sourcing

      • ์‹œ์Šคํ…œ์˜ ์ƒํƒœ๊ฐ€ ์ด๋ฒคํŠธ์˜ ์ˆœ์„œํ™”๋œ ๋กœ๊ทธ๋กœ ์ €์žฅ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด
      • ๊ฐ๊ฐ์˜ ์ด๋ฒคํŠธ๋Š” ์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹œ์‹œ๊ฐ๊ฐ ๊ณ„์‚ฐ๋˜๋Š” ํ˜„์žฌ ์ƒํƒœ๊ฐ€ ์ด๋ฒคํŠธ ๋กœ๊ทธ์— ์ €์žฅ๋œ๋‹ค
      • ํ˜„์žฌ ์ƒํƒœ๋ณด๋‹ค ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋” ์ค‘์š”ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค
      • domain event ๊ฐ€ event sourcing ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค
      • domain model ์˜ ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๋Š” ๋ชจ๋“  ์—ฐ์‚ฐ์€ domain event๋ฅผ ๋ฐœํ–‰ํ•˜๋ฉฐ ์ด ์ด๋ฒคํŠธ๊ฐ€ ๋กœ๊ทธ๋กœ ๋‚จ๋Š”๋‹ค
  • Distributing Domain Events

    • domain event๋Š” ๋ฆฌ์Šค๋„ˆ์—๊ฒŒ ์•ˆ์ •์ ์œผ๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์„ ๋•Œ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
    • event listener๊ฐ€ ์ด๋ฒคํŠธ ์ˆ˜์‹ ์— ์‹คํŒจํ•ด์„œ ๋‹ค์‹œ ๋ณด๋‚ด์•ผ ํ•  ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
      • Distribution Through a Message Queue

        • Distribution_through_message_queue
        • AMQP ๋˜๋Š” JMS ์™€ ๊ฐ™์€ Message Queue๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹(์ด๋ฒคํŠธ pub-sub ๊ตฌ์กฐ)
        • ๋น ๋ฅด๊ณ  ๊ตฌํ˜„์ด ์‰ฝ๊ณ  ๋ฉ”์‹œ์ง• ์†”๋ฃจ์…˜์— ์˜์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค (์žฅ์ )
        • MQ ์†”๋ฃจ์…˜์„ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๊ณ  subscriber ๊ฐ€ ๋ฐ”๋€” ๊ฒฝ์šฐ, ๊ณผ๊ฑฐ ์ด๋ฒคํŠธ๊ฐ€ ์œ ์‹ค๋œ๋‹ค (๋‹จ์ )
      • Distribution Through an Event Log

        • Distribution_through_event_log
        • ์ถ”๊ฐ€์ ์ธ component๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๋Œ€์‹  ์•ฝ๊ฐ„์˜ ์ฝ”๋”ฉ์ด ํ•„์š”ํ•˜๋‹ค
        • domain event ๊ฐ€ ๋ฐœํ–‰๋ ๋–„, event log์— append๋œ๋‹ค
        • domain event listener๊ฐ€ event log๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํด๋งํ•œ๋‹ค
        • ์ถ”๊ฐ€์ ์ธ component๊ฐ€ ํ•„์š” ์—†๊ณ , ์ƒˆ๋กœ์šด listener๊ฐ€ ๋“ค์–ด์™€๋„ ์ „์ฒด ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋ณด์กด๋œ๋‹ค(์žฅ์ )
        • ์ถ”๊ฐ€์ ์ธ ๊ตฌํ˜„์„ ํ•„์š”๋กœ ํ•˜๋ฉฐ publish์™€ subscribe ์‚ฌ์ด์— ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค(๋‹จ์ )
  • A Note on Eventual Consistency

    • domain event๋Š” eventual consistency๋ฅผ ์ด๋ฃจ๊ธฐ ์œ„ํ•œ ์ข‹์€ ๋ฐฉ๋ฒ•
    • eventual_consistency
    • System A ๊ฐ€ ๋ฐœํ–‰ํ•œ event๊ฐ€ System B, System C, System D ๊นŒ์ง€ ์ตœ์ข…์ ์œผ๋กœ ์ „ํŒŒ๋œ๋‹ค

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published