DDD ์›์น™(Domain Driven Design)์ด๋ž€?

2026. 1. 3. 16:18ใ†Backend

๋ฐ˜์‘ํ˜•

 

 

 

 

 
 
 
 

DDD ์˜ ์ฒ ํ•™

  1. DDD(Domain Driven Design, ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„)๋ž€ ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์— ๊นŠ์ด ์ง‘์ค‘ํ•˜์—ฌ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.
  2. ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์„ ๋„๋ฉ”์ธ ๋ชจ๋ธ๋กœ ํ‘œํ˜„ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋„๋ฉ”์ธ์˜ ์ฑ…์ž„๊ณผ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.
  3. DDD๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์ด๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด์— ๋…น์—ฌ๋‚ด๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๋ฉฐ, ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ๋ถ€ํ„ฐ ์ฝ”๋“œ๊ฐ€ ๋„๋ฉ”์ธ์˜ ๋ณธ์งˆ์„ ๋ช…ํ™•ํžˆ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•จ์œผ๋กœ์จ, ๋น„์ฆˆ๋‹ˆ์Šค์™€ ๊ธฐ์ˆ  ๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ ์ค„์ด๊ณ  ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ๋„๋ฉ”์ธ์˜ ๋ฌธ์„œ ์—ญํ• ์„ ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ทธ ํ•ต์‹ฌ ์ฒ ํ•™์ด๋‹ค.
    1. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฐ์ง€ ์ง์†ก ์ด๋ผ๋Š” ์ƒ์œ„ ๋„๋ฉ”์ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ๊ฐ ์„ธ๋ถ€์ ์ธ ๊ธฐ๋Šฅ์„ ‘ํšŒ์›', ‘์ƒํ’ˆ’, '์ฃผ๋ฌธ', '๊ฒฐ์ œ', 'ํ˜œํƒ’, '๋ฐฐ์†ก'๊ณผ ๊ฐ™์€ ํ•˜์œ„ ๋„๋ฉ”์ธ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์—ญํ• ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ†ตํ•ด ๊ฐ ๋„๋ฉ”์ธ์ด ๋ฌด์—‡์„ ์ฑ…์ž„์ง€๊ณ , ์–ด๋–ค ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. ์ด๋ ‡๊ฒŒ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์„ค๊ณ„ํ•˜๊ณ  ๋‚˜๋ฉด, ๊ฐ ๋„๋ฉ”์ธ์ด ๋งก๋Š” ์—ญํ• ๊ณผ ์ฑ…์ž„์ด ์ฝ”๋“œ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐ˜์˜๋˜๋ฉฐ,
    ์ด๋ฅผ ํ†ตํ•ด "์ฝ”๋“œ๊ฐ€ ๊ณง ๋ฌธ์„œํ™”"๋ผ๋Š” ์ฒ ํ•™๊ณผ ์—ฐ๊ฒฐ๋˜๋Š”๋ฐ, DDD์—์„œ๋Š” ์ฝ”๋“œ๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋„๋ฉ”์ธ์„ ์ง์ ‘ ํ‘œํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ„๋„์˜ ๋ฌธ์„œ ์—†์ด๋„ ์ฝ”๋“œ๋งŒ์œผ๋กœ ์‹œ์Šคํ…œ์˜ ์„ค๊ณ„์™€ ๋™์ž‘์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ.
  5. DDD๋Š” ๋‹จ์ˆœํ•œ ํด๋” ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋„๋ฉ”์ธ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก .
  6. DIP๋Š” ์ด ์„ค๊ณ„๋ฅผ ๊ธฐ์ˆ ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ ๋„๋ฉ”์ธ์˜ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์›์น™์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

 

DDD์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ

์ „๋žต์  ์„ค๊ณ„ (Strategic Design)

  • Business Domain์˜ ์ƒํ™ฉ(Context: ๋Œ€์ƒ์‚ฌ์šฉ์ž, ์ƒํ™ฉ)์— ๋งž๊ฒŒ ์„ค๊ณ„ํ•˜์ž๋Š” ์ปจ์…‰
  • ์ „๋žต์  ์„ค๊ณ„๋ฅผ ์œ„ํ•ด Business Domain์„  ๋ชฉ์ ๋ณ„๋กœ ์„œ๋น„์Šค๋“ค์„ ๊ทธ๋ฃนํ•‘ํ•ฉ๋‹ˆ๋‹ค.
๊ฐœ๋… ๊ธฐ์ค€ ์‹ค๋ฌด ์˜ˆ์‹œ
Bounded Context ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ์–ด๋–ค ๊ฒฝ๊ณ„๋กœ ๋‚˜๋ˆŒ ๊ฒƒ์ธ๊ฐ€? - ๊ฐ™์€ ์šฉ์–ด๊ฐ€ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ๊ฒฝ๊ณ„
  (e.g. ์ƒํ’ˆ)
- ์ฃผ๋ฌธ: ์ฃผ๋ฌธ ํ’ˆ๋ชฉ,
- ๊ฐ€๊ฒฉ ๋ฐฐ์†ก: ๋ฌด๊ฒŒ, ํฌ๊ธฐ
Ubiquitous Language ๊ฐœ๋ฐœ์ž์™€ ๊ธฐํš์ž๊ฐ€ ๋™์ผํ•œ ์šฉ์–ด ์‚ฌ์šฉ → ์ฝ”๋“œ์— ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜ - ๊ธฐํš: "์ฃผ๋ฌธ ํ™•์ •" ์ฝ”๋“œ: order.confirm() 
- ๊ธฐํš: "๋ฐฐ์†ก ์‹œ์ž‘" ์ฝ”๋“œ: delivery.start()
Context Map Bounded Context ๊ฐ„์˜ ๊ด€๊ณ„ ์ •์˜  - ๊ฒฐ์ œ Context์˜ ๋ณ€๊ฒฝ์ด ์ฃผ๋ฌธ Context์— ์˜ํ–ฅ์„ ์คŒ 

- [์ฃผ๋ฌธ Context] ๊ณ ๊ฐ/๊ณต๊ธ‰์ž 
- [๊ฒฐ์ œ Context]

 

์ „์ˆ ์  ์„ค๊ณ„(Tactical Design)

  • ํ•˜๋‚˜์˜ Bounded Context ์•ˆ์—์„œ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•  ๊ฒƒ์ธ๊ฐ€
  • Strategic = "์–ด๋””์„œ ์ž๋ฅผ๊นŒ" (๊ฒฝ๊ณ„ ์„ค์ •) Tactical = "์•ˆ์—์„œ ๋ญ˜ ๋งŒ๋“ค๊นŒ" (๋นŒ๋”ฉ ๋ธ”๋ก)
Strategic Design                    Tactical Design
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€                    โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
์‹œ์Šคํ…œ์„ Context๋กœ ๋ถ„๋ฆฌ         →       ๊ฐ Context ๋‚ด๋ถ€๋ฅผ 
                                    Aggregate(ํ•จ๊ป˜ ์ทจ๊ธ‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ์ง‘ํ•ฉ)๋กœ ๊ตฌ์„ฑ

    [์ „์ฒด ์‹œ์Šคํ…œ]                      [ํ•˜๋‚˜์˜ Context]
   โ”Œโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ”‚ A โ”‚ B โ”‚ C โ”‚  Context         โ”‚ Aggregate๋“ค๋กœ    โ”‚
   โ””โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”˜                  โ”‚ ๊ตฌ์„ฑ             โ”‚
                                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 

 

 

๋ฐ˜์‘ํ˜•