ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

DDD(Domain-Driven Design)๋ž€?

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก ์ธ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๋Š” ๋„๋ฉ”์ธ ํŒจํ„ด์„ ์ค‘์‹ฌ์— ๋†“๊ณ  ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋„๋ฉ”์ธ์„ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„ํ•ด ๋‚˜๊ฐ€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

  • DDD๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ์‹
  • ๋‹จ์ˆœํžˆ ๊ธฐ์ˆ ์ ์ธ ์‚ฌํ•ญ๋งŒ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์‹ค์ œ ๋„๋ฉ”์ธ์ธ ์š”๊ตฌ ์‚ฌํ•ญ์— ์ค‘์‹ฌ
  • ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ์„ค๊ณ„

 

๋„๋ฉ”์ธ์ด๋ž€?

์‹ค์ œ ์„ธ๊ณ„์—์„œ ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ•˜๋Š” ์ง‘ํ•ฉ์œผ๋กœ DDD์—์„œ ๋งํ•˜๋Š” ๋„๋ฉ”์ธ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‡ผํ•‘๋ชฐ์—์„  ์ด์šฉ์ž๋“ค์ธ ๊ณ ๊ฐ ๋„๋ฉ”์ธ, ์†๋‹˜๋“ค์ด ์ฃผ๋ฌธํ•˜๋Š” ๋„๋ฉ”์ธ ๋“ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์€ ์œ ์‚ฌํ•œ ์—…๋ฌด์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

 

์ด์ฒ˜๋Ÿผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์•ž์„œ DDD๋Š” ์ด๋Ÿฌํ•œ ๋น„์ฆˆ๋‹ˆ์ฆˆ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ดํ•ด๋„๋ฅผ ๋†’์—ฌ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์ƒํ™ฉ์—์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค.


DDD์˜ ์ ์šฉ ๊ณผ์ •

DDD์˜ ํ•ต์‹ฌ ๋ชฉํ‘œ๋Š” "Loolsy coupling", "High cohesion"์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ๊ทธ ์•ˆ์˜ ๋ชจ๋“ˆ๊ฐ„์˜ ์˜์กด์„ฑ์€ ์ตœ์†Œํ™”ํ•˜๊ณ  ์‘์ง‘์„ฑ์€ ์ตœ๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ DDD๋Š” Strategic Design๊ณผ Tactical Design์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Strategic Design: ๊ฐœ๋… ์„ค๊ณ„ (์ „๋žต์  ์„ค๊ณ„)
  • Tactical Design: ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์  ์„ค๊ณ„ (์ „์ˆ ์  ์„ค๊ณ„)

 

๊ณผ์ •์„ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋„๋ฉ”์ธ/์„œ๋ธŒ๋„๋ฉ”์ธ/Bounded Context๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ์ •์˜
  2. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Aggregate/Entity/Value Object/Repository ๋“ฑ์„ ๊ตฌํ˜„
  3. ์ด์— ์ ํ•ฉํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ๊ฐœ๋ฐœ

์ด๋Ÿฌํ•œ DDD๋Š” ํŒ€ ๊ตฌ์„ฑ์›์„์ด ๋ชจ๋‘ ์ด์— ๋Œ€ํ•œ ์ง€์‹๋“ค์ด ํ•™์Šต๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋„์ž…ํ•˜๋Š” ๊ณผ์ •์ด ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

Strategic Design

๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€ ๋ฐ ๊ธฐ์ˆ ํŒ€์ด ํ•จ๊ป˜ ๋ชจ์—ฌ ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด๋ฅผ ํ†ตํ•ด ๋„๋ฉ”์ธ ์ง€์‹์„ ๊ณต์œ  ๋ฐ ์ดํ•ดํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐœ๋…๊ณผ ๊ฒฝ๊ณ„๋ฅผ ์‹๋ณ„ํ•ด bounded-context๋กœ ์ •์˜ํ•˜๊ณ  ๊ฒฝ๊ณ„์˜ ๊ด€๊ณ„๋ฅผ context map์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • model: ๋„๋ฉ”์ธ์˜ ํŠน์ • ์–‘์ƒ์„ ๋ฌ˜์‚ฌํ•˜๋Š” ์ถ”์ƒํ™” ์‹œ์Šคํ…œ
  • entity: ํ…Œ์ด๋ธ” ๋ชจ๋ธ, ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง
  • value object: ๋ฐ์ดํ„ฐ ํ‘œํ˜„ ๋ชจ๋ธ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋Š” ๋ถˆ๋ณ€ ํƒ€์ž…
  • domain model: ์‹ค์ œ ์„ธ๊ณ„๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์„ค๊ณ„
  • ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด: ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๋‘˜๋Ÿฌ์‹ผ ์–ธ์–ด ๊ตฌ์กฐ๋กœ ํŒ€ ์ „์ฒด๊ฐ€ ๊ฐ๊ฐ์˜ ์—…๋ฌด ํŒŒํŠธ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์–ดํœ˜
  • context: ์˜๋ฏธ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋‹จ์–ด๋‚˜ ๋ฌธ์žฅ์ด ๋‚˜ํƒ€๋‚˜๋Š” ์„ค์ •์œผ๋กœ ์ƒํ™ฉ์ด ๋ฒŒ์–ด์ง€๋Š” ์ฃผ๋ณ€ ํ™˜๊ฒฝ
  • bounded-context: context์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์„ค๋ช…์œผ๋กœ ํŠน์ • ๋ชจ๋ธ์ด ์ •์˜๋˜๊ณ  ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ
  • context map: ๊ฐ bounded-context๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„

 

Tactical Design

Strategic Design์—์„œ ๋„์ถœ๋œ bounded-context์™€ ๋„๋ฉ”์ธ์„ ์ด์šฉํ•˜์—ฌ Aggregate ํŒจํ„ด, Entity์™€ Value Object, Repository ๋“ฑ์„ ๊ตฌ์„ฑํ•˜๊ณ  ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • Aggregate: ์—ฐ๊ด€๋œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉ์  ์ˆ˜ํ–‰์„ ์œ„ํ•œ ์—”ํ‹ฐํ‹ฐ์™€ ๋ฒจ๋ฅ˜ ์˜คํ”„์ ํŠธ์˜ ๋ฌถ์Œ 

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ†ตํ•ด์„œ ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


[์ฐธ๊ณ ]

https://happycloud-lee.tistory.com/94

 

DDD ํ•ต์‹ฌ๋งŒ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก ์ธ DDD(Domain Driven Design)์— ๋Œ€ํ•ด ์ œ๊ฐ€ ๊ฐ€์ง„ ์ง€์‹๊ณผ ๊ทธ๊ฐ„์˜ ๊ฒฝํ—˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ์ฝ๊ธฐ ์ „์— ๋จผ์ € ์ผํ•˜๋Š” ๋ฐฉ์‹ ๋ณ€ํ™”๋ฅผ ์ด๋Œ๊ณ  ์žˆ๋Š” ์• ์ž์ผ, ๋งˆ์ด

happycloud-lee.tistory.com

https://huisam.tistory.com/entry/DDD

 

DDD(Domain Driven Design) - ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๋ž€? ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๊ด€์ ์—์„œ

๊ฐ์ฒด์ง€ํ–ฅ์—์„œ๋ถ€ํ„ฐ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์„ ๋จผ์ € ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ์˜ ํ•ต์‹ฌ์€ ๋ญ˜๊นŒ์š”? ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ์˜ ํ•ต์‹ฌ์€ ์‹ค์„ธ๊ณ„์˜ ๊ฐ์ฒด(๋ฌผ๊ฑด, ์‚ฌ๋žŒ, ์ฃผ๋ฌธ ....

huisam.tistory.com

https://appleg1226.tistory.com/m/40

 

(1) DDD๋ž€ ๋ฌด์—‡์ธ๊ฐ€ - ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ๊ฐœ๋ฐœ๊ณผ ๋„๋ฉ”์ธ ์ค‘์‹ฌ ๊ฐœ๋ฐœ

์ฐธ๊ณ ๋กœ ์Šคํ„ฐ๋””๋Š” ๋‹ค์Œ์˜ ์ฑ…์„ ํ†ตํ•ด์„œ ์ง„ํ–‰ํ–ˆ๋‹ค. DDD ๊ฐ„๋‹จ ์†Œ๊ฐœ ์šฐ์„  DDD(Domain-Driven Design)์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์†Œ๊ฐœ๋ฅผ ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. DDD๋Š” ๋‹จ์ˆœํ•œ ์ฝ”๋”ฉ/์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค. ์ฆ‰ ํŒจํ„ด

appleg1226.tistory.com

https://kadensungbincho.tistory.com/73

 

DDD๋ž€? ((Business) Domain-Driven (Software) Design)

์ตœ๊ทผ ์™ธ์ฃผ๋กœ ์šด์˜ ๋˜๋˜ ์„œ๋น„์Šค๋ฅผ ๋‚ด์žฌํ™”ํ•˜๋Š” ์ž‘์—…์„ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜๋ฉด์„œ, ํŠน์ • ๋„๋ฉ”์ธ์˜ ๋ชฉ์ ์„ ์œ„ํ•ด ๊ตฌํ˜„๋œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ์—๋Š” ์ˆœ์ „ํžˆ '๊ธฐ์ˆ ์ '์ธ ์‚ฌํ•ญ๋งŒ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ ˆ

kadensungbincho.tistory.com

https://blog.bespinglobal.com/post/domain-driven-design-1%EB%B6%80-strategic-design/

 

Domain Driven Design - 1๋ถ€ (Strategic Design) - ๋ฒ ์Šคํ•€๊ธ€๋กœ๋ฒŒ ํ…Œํฌ๋ธ”๋กœ๊ทธ

Domain Driven Design ๋„๋ฉ”์ธ ์ฃผ๋„ ๋””์ž์ธ์ด๋ž€ ๋„๋ฉ”์ธ์ด ์ค‘์‹ฌ์ด ๋˜๋Š” ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ๋งํ•˜๋ฉฐ, ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ชจ์œผ๋Š” ๊ฒƒ๋ถ€ํ„ฐ low_level ๋””์ž์ธ๊นŒ์ง€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ์ „์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก  ์ด

blog.bespinglobal.com