๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ

๐Ÿ”ฌapplication/- DDD6

DDD ์˜ aggregate ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ TL;DR ์ด๋ฒˆ ๊ธ€์˜ ํ•ต์‹ฌ์„ ์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค aggregate ๋ž€ ๋ฌด์—‡์ธ๊ฐ€ 3๊ฐ€์ง€ ํ•ต์‹ฌ ๋„๋ฉ”์ธ ๊ตฌ์„ฑ์š”์†Œ ์ค‘ ๊ฐ€์žฅ ๊ธฐ๋ณธ entity ์™€ value ์˜ composition ์™„์ „ํ•œ ํ•˜๋‚˜์˜ ๊ฐœ๋… ์™œ aggregate ๊ฐ€ ํ•„์š”ํ• ๊นŒ ๊ณ ์ •์ž(invariant) ์™€ ์ผ๊ด€์„ฑ (consistency) ์„ ์ง€ํ‚ค๋Š” ํ•ต์‹ฌ ๊ฐ์ฒด aggregate ์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ 3๊ฐ€์ง€ entity, root-entity, value aggregate ์„ ์„ค๊ณ„ํ•˜๊ธฐ 3๊ฐ€์ง€ ์„ค๊ณ„ ์ง€ํ‘œ ์ผ๊ด€์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ actor ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ usecase ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ์ž˜ ๋‚˜๋‰˜์–ด์ง„ aggregate ์˜ ํŠน์„ฑ aggregate ๋ž€ ๋ฌด์—‡์ธ๊ฐ€ ์—๋ฆญ ์—๋ฐ˜์Šค๊ฐ€ ์ œ์‹œํ•œ DDD, domain driven design ์—์„œ ํ•ต์‹ฌ ๋„๋ฉ”์ธ ๊ตฌ์„ฑ์š”์†Œ๋Š” 3๊ฐ€.. 2024. 4. 10.
[DDD] Value Object ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ์ด์•ผ๊ธฐ ๋ชฉ์ฐจ entity ์— ๋Œ€ํ•œ ์งง์€ ์†Œ๊ฐœ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ entity ์ผ๊นŒ? value object entity ์™€ value object value object ์˜ 3๊ฐ€์ง€ ํŠน์„ฑ ์ธก๋Ÿ‰, ์ธก์ •, ์ˆ˜๋Ÿ‰ํ™”, ํ‘œํ˜„ ๋ถˆ๋ณ€์„ฑ ๋“ฑ๊ฐ€์„ฑ value object ๋Š” ์ด๋ ‡๊ฒŒ ์“ด๋‹ค java ์—์„  lombok ์˜ @Value ๊ฐ€ ์žˆ๋‹ค value object ์™€ context ๊ฐœ๋…์  ํ•˜๋‚˜ ์—”ํ‹ฐํ‹ฐ์˜ ์ฑ…์ž„ ๋ถ„์‚ฐ ์„œ๋ก  ์ง€๋‚œ์‹œ๊ฐ„์— ์—ฌ๋Ÿฌ๋ฒˆ์— ๊ฑธ์ณ์„œ entity ์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด์•˜๋‹ค. ๊ธฐ๋ณธ์ ์ธ entity ์˜ ๊ฐœ๋…๊ณผ ํŠน์„ฑ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ entity ์™€ ์‹๋ณ„์ž์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊นŒ์ง€.. ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” ์—”ํ‹ฐํ‹ฐ์™€ ๋”๋ถˆ์–ด ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ์ธ Value Object, ๊ฐ’ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค entity ์— ๋Œ€ํ•œ ์งง์€ recap va.. 2023. 7. 23.
[DDD] Entity ์™€ ์‹๋ณ„์ž(identifier) ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ์ด์•ผ๊ธฐ ๋ชฉ์ฐจ ์„œ๋ก  ์‹๋ณ„์ž๋ž€ ๋ฌด์—‡์ธ๊ฐ€ ์‹๋ณ„์ž์˜ ์ข…๋ฅ˜ ์ „์—ญ ์‹๋ณ„์ž์™€ ์ง€์—ญ ์‹๋ณ„์ž ์‹๋ณ„์ž๋Š” ์–ธ์ œ ์ƒ์„ฑ๋˜๋Š”๊ฐ€? ๋น ๋ฅธ ์‹๋ณ„์ž ์ƒ์„ฑ๊ณผ ๋Šฆ์€ ์‹๋ณ„์ž ์ƒ์„ฑ ๋น ๋ฅธ ์‹๋ณ„์ž: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๋Šฆ์€ ์‹๋ณ„์ž: ๊ฐ์ฒด๊ฐ€ ์˜์†ํ™” ๋  ๋•Œ 3๊ฐ€์ง€ ์‹๋ณ„์ž ์ƒ์„ฑ ๋ฐฉ๋ฒ• db ์—์„œ ์ƒ์„ฑ application ์—์„œ ์ƒ์„ฑ ๋‹ค๋ฅธ aggregate ์—์„œ ์ƒ์„ฑ ์„œ๋ก  ์ง€๋‚œ์‹œ๊ฐ„ entity ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด๋‹ค. [DDD] Entity ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ์ด์•ผ๊ธฐ ๋ชฉ์ฐจ ์„œ๋ก  entity ๋ž€ ๋ฌด์—‡์ธ๊ฐ€ ๋„๋ฉ”์ธ ์„ธ์ƒ ์ด์•ผ๊ธฐ vo ์™€ entity ๊ฐ€ ์žˆ๋‹ค ๋ฌด์—‡์ด entity ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š”๊ฐ€? entity ์˜ ์†์„ฑ invariant immutable entity ์˜ ํ–‰์œ„ object autonomy self encapsulation ์„œ๋ก  DDD .. 2023. 7. 15.
[DDD] Entity ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ์ด์•ผ๊ธฐ ๋ชฉ์ฐจ ์„œ๋ก  entity ๋ž€ ๋ฌด์—‡์ธ๊ฐ€ ๋„๋ฉ”์ธ ์„ธ์ƒ ์ด์•ผ๊ธฐ vo ์™€ entity ๊ฐ€ ์žˆ๋‹ค ๋ฌด์—‡์ด entity ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š”๊ฐ€? entity ์˜ ์†์„ฑ invariant immutable entity ์˜ ํ–‰์œ„ object autonomy self encapsulation ์„œ๋ก  DDD ์—์„œ๋Š” ์œ ๋น„์ฟผํ„ฐ์Šค ๋žญ๊ท€์ง€๋ฅผ ํ†ตํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ดํ•ด๊ด€๊ณ„์ž๋“ค๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ์˜์—ญ์— ๋Œ€ํ•ด ํ•ฉ์˜ (Cosensus) ๋ฅผ ๋งž์ถ”๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฌผ๋กœ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ๋ชจ๋ธ๋ง ์ฆ‰, domain model ์ด ์‚ฐ์ถœ๋œ๋‹ค. ์ด domain model ์€ ์—ฌ๋Ÿฌ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์ง€ํƒฑํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, domain model ์˜ ๊ฐ€์žฅ ๊ธฐ์ดˆ๊ฐ€ ๋˜๋Š” ๋‘๊ฐ€์ง€ ํƒ€์ž…์˜ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•œ๋‹ค. Entity Value Object ์˜ค๋Š˜์€ ์ด Entity ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž Ent.. 2023. 7. 15.
Repository Pattern - ์‹ค์ „ํŽธ (Spring ์—์„œ DIP ๋ฅผ ํ†ตํ•ด Repository ์˜ ์„ ์–ธ๊ณผ ๊ตฌํ˜„ ๋ถ„๋ฆฌ์‹œํ‚ค๊ธฐ) ์ด ๊ธ€์€ ์ด๋ก ๊ณผ ์‹ค์Šต, ๋‘ ํŒŒํŠธ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. Repository Pattern ์— ๋Œ€ํ•ด์„œ, ์ด๋ก ํŽธ Repository Pattern - ์‹ค์ „ํŽธ (Spring ์—์„œ DIP ๋ฅผ ํ†ตํ•ด Repository ์˜ ์„ ์–ธ๊ณผ ๊ตฌํ˜„ ๋ถ„๋ฆฌ์‹œํ‚ค๊ธฐ) 2022. 8. 28.
[DDD] Repository Pattern ์ด๋ž€, ์ด๋ก ํŽธ ์ด ๊ธ€์€ ์ด๋ก ๊ณผ ์‹ค์Šต, ๋‘ ํŒŒํŠธ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. Repository Pattern ์— ๋Œ€ํ•ด์„œ, ์ด๋ก ํŽธ 2022. 8. 23.