DDD ์šฉ์–ด ์ •๋ฆฌ

by ๋ณ‘ํ˜„ on Sun Jun 15 2025

๊ฐœ์š”

์ด ๋ฌธ์„œ๋Š” DDD์˜ ์ฃผ์š” ์šฉ์–ด๋“ค์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค.

A

  • Aggregate(์• ๊ทธ๋ฆฌ๊ฒŒ์ดํŠธ): ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ์™€ VO๋ฅผ ๋ฌถ์–ด ๋„๋ฉ”์ธ์˜ ๋‹จ์ˆœ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฐ์ฒด.
  • Aggregate Root(์• ๊ทธ๋ฆฌ๊ฒŒ์ดํŠธ ๋ฃจํŠธ): ์• ๊ทธ๋ฆฌ๊ฒŒ์ดํŠธ์˜ ๋Œ€ํ‘œ ์—”ํ‹ฐํ‹ฐ๋กœ, ์ƒํƒœ ๋ณ€๊ฒฝ์€ ๋ฃจํŠธ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  • Anti-Corruption Layer (ACL): ๋„๋ฉ”์ธ ๊ณ„์ธต๊ณผ ์™ธ๋ถ€ ์‹œ์Šคํ…œ ๊ฐ„์˜ ์ผ๊ด€์„ฑ๊ณผ ๋…๋ฆฝ์„ฑ์„ ๋ณดํ˜ธํ•˜๋Š” ๊ณ„์ธต.

B

  • Bounded Context(๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ): ๋„๋ฉ”์ธ ์˜์—ญ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฒ”์œ„๋กœ, ์ฃผ๋กœ ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด์— ๋”ฐ๋ผ ๊ตฌ๋ถ„๋œ๋‹ค.

C

  • CQRS: ๋ช…๋ น๊ณผ ์กฐํšŒ์˜ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๋Š” ์„ค๊ณ„ ํŒจํ„ด.
  • Context Map(์ปจํ…์ŠคํŠธ ๋งต): ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ๊ณผ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ.
  • Core Domain(์ฝ”์–ด ๋„๋ฉ”์ธ): ๋น„์ฆˆ๋‹ˆ์Šค์˜ ๊ฒฝ์Ÿ ์šฐ์œ„์™€ ๋ณธ์งˆ์  ๊ฐ€์น˜๋ฅผ ๋‹ด์€ ํ•ต์‹ฌ ์˜์—ญ (์˜ˆ: ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ ์—”์ง„, ๋„ทํ”Œ๋ฆญ์Šค ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜).

D

  • DDD: Domain-Driven Design์˜ ์•ฝ์ž, ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ์ค‘์‹ฌ์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก .
  • DIP: ์˜์กด์„ฑ ์—ญ์ „ ์›์น™ โ€” ๊ณ ์ˆ˜์ค€๊ณผ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๊ฒŒ ํ•˜๋Š” ์›์น™.
  • Domain(๋„๋ฉ”์ธ): ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ ์˜์—ญ.
  • Domain Event(๋„๋ฉ”์ธ ์ด๋ฒคํŠธ): ๋„๋ฉ”์ธ ๋ชจ๋ธ์—์„œ ๋ฐœ์ƒํ•œ ํŠน์ • ๊ณผ๊ฑฐ ์‚ฌ๊ฑด์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด.
  • Domain Model(๋„๋ฉ”์ธ ๋ชจ๋ธ): ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์˜ ํ•ต์‹ฌ ๊ฐœ๋…, ๊ด€๊ณ„, ๋™์ž‘์„ ํ‘œํ˜„ํ•œ ์ถ”์ƒํ™”.
  • Domain Service(๋„๋ฉ”์ธ ์„œ๋น„์Šค): ์—ฌ๋Ÿฌ ์—”ํ‹ฐํ‹ฐ์— ๊ฑธ์นœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์„œ๋น„์Šค.

E

  • Entity(์—”ํ‹ฐํ‹ฐ): ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋™์ผ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฐ์ฒด.
  • Event Storming(์ด๋ฒคํŠธ ์Šคํ† ๋ฐ): ์ด๋ฒคํŠธ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ์ดํ•ดํ•˜๋Š” ์„ค๊ณ„ ๊ธฐ๋ฒ•.

F

  • Factory(ํŒฉํ† ๋ฆฌ): ๊ฐ์ฒด ์ƒ์„ฑ์„ ์บก์Аํ™”ํ•˜๊ณ  ์ถ”์ƒํ™”ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด.

G

  • Generic Subdomain(์ œ๋„ˆ๋ฆญ ์„œ๋ธŒ๋„๋ฉ”์ธ): ์—ฌ๋Ÿฌ ๋น„์ฆˆ๋‹ˆ์Šค์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋„๋ฉ”์ธ ์˜์—ญ (์˜ˆ: ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”, ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ).

R

  • Repository(๋ฆฌํฌ์ง€ํ† ๋ฆฌ): ์• ๊ทธ๋ฆฌ๊ฒŒ์ดํŠธ์˜ ์˜์†์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ถ”์ƒ ๊ณ„์ธต.

S

  • Service(์„œ๋น„์Šค): ํŠน์ • ์—”ํ‹ฐํ‹ฐ๋‚˜ VO์— ์†ํ•˜์ง€ ์•Š๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์บก์Аํ™”ํ•œ ๊ฐ์ฒด.
  • Strategic Design(์ „๋žต์  ์„ค๊ณ„): ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋ณต์žก์„ฑ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ฝ”์–ด ๋„๋ฉ”์ธ์— ์ง‘์ค‘ํ•˜๋Š” ๊ณ ์ˆ˜์ค€ ์ ‘๊ทผ๋ฒ•.
  • Supporting Subdomain(์„œํฌํŒ… ์„œ๋ธŒ๋„๋ฉ”์ธ): ์ฝ”์–ด ๋„๋ฉ”์ธ์„ ์ง€์›ํ•˜์ง€๋งŒ ๊ทธ ์ž์ฒด๋กœ๋Š” ๊ฒฝ์Ÿ ์šฐ์œ„๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์˜์—ญ.

T

  • Tactical Design(์ „์ˆ ์  ์„ค๊ณ„): ๊ฐœ๋ณ„ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์„ค๊ณ„ ์ ‘๊ทผ๋ฒ•.

U

  • Ubiquitous Language(์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด): ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€, ๊ฐœ๋ฐœ์ž, ํŒ€ ๊ตฌ์„ฑ์› ๋ชจ๋‘๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ณตํ†ต ์šฉ์–ด.

V

  • Value Object(๊ฐ’ ๊ฐ์ฒด): ๊ฐ’ ์ž์ฒด๋กœ ์ •์˜๋˜๋ฉฐ ์‹๋ณ„์ž๊ฐ€ ์—†๋Š” ๊ฐ์ฒด๋กœ, ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ๋™์ผํ•œ ๊ฐ์ฒด๋กœ ๋ณธ๋‹ค.

Tagged: DDD์šฉ์–ด