์ƒˆ์†Œ์‹

๐Ÿ“šStudy/DDD

DDD ๋ž€?

  • -

 

๋„๋ฉ”์ธ(Domain-Driven Design)

์ด๋ฏธ ๋ชจ๋‘๊ฐ€ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์™„๋ฒฝํžˆ ์ดํ•ดํ•˜๊ณ  ์ •์˜ํ•˜๊ธฐ๋ž€ ์‰ฝ์ง€ ์•Š๊ธฐ์— ํ•œ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž.

 

์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ์„ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด, ์ƒํ’ˆ์„ ์ฃผ๋ฌธํ•˜๋Š” ํšŒ์›์ด ์žˆ์–ด์•ผํ•˜๊ณ  ์ฃผ๋ฌธ ์‹œ์Šคํ…œ, ์ƒํ’ˆ ๋“ฑ๋ก ๋ฐ ๊ด€๋ฆฌ ์กฐํšŒ, ์ƒํ’ˆ ๋ฐฐ์†ก, ๊ฒฐ์ œ ๋“ฑ์˜ ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜์–ด์•ผ ํ•œ๋‹ค.

 

์ด ๋•Œ, '์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ' ์€ ๋ฌธ์ œ ์˜์—ญ์ธ ์ตœ์ƒ์œ„ ๋„๋ฉ”์ธ์— ํ•ด๋‹น๋˜๊ณ , ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ • ๋“ฑ์˜ ๋„๋ฉ”์ธ ์ง€์‹(Domain Knowledge)๋“ค์€ ์ƒ์œ„ ๋„๋ฉ”์ธ์— ํ•ด๋‹น๋œ๋‹ค. 

 

์ƒ์œ„๋„๋ฉ”์ธ

์ƒ์œ„ ๋„๋ฉ”์ธ

 

ํ•˜์œ„ ๋„๋ฉ”์ธ์€ ์ƒ์œ„ ๋„๋ฉ”์ธ์„ ์ด๋ฃจ์–ด์ง€๊ฒŒํ•˜๋Š” ํ•„์ˆ˜ ๊ตฌ์„ฑ์ฒด์ด๋‹ค.

 

ํ•˜์œ„๋„๋ฉ”์ธ

ํšŒ์›: ํšŒ์›์ •๋ณด

์ƒํ’ˆ: ๊ณต๊ธ‰์ฒ˜, ํŒ๋งค์ฒ˜, ์ƒํ’ˆ ์ •๋ณด

์ฃผ๋ฌธ: ์ฃผ๋ฌธ ์ƒํ’ˆ์ •๋ณด, ์ฃผ๋ฌธํ•œ ํšŒ์›, ๋ฐฐ์†ก์ง€ ...

๊ฒฐ์ œ: ๊ฒฐ์ œ ์ •๋ณด

๋ฐฐ์†ก: ๋ฐฐ์†ก์ง€, ๋ฐฐ์†ก๋ฒˆํ˜ธ, ๋ฐฐ์†ก์ •๋ณด..

 

๋„๋ฉ”์ธ ์ค‘์‹ฌ ์„ค๊ณ„(Domain-Driven Design)์ด๋ž€?

๋„๋ฉ”์ธ(๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉํ‘œ)์„ ์ค‘์‹ฌ์œผ๋กœ ์ž˜๊ฒŒ ์ชผ๊ฐœ์–ด ์„ค๊ณ„(๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ)ํ•ด ๋‚˜๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŠน์ง•์ธ '๋ชจ๋“ˆ๊ฐ„์˜ ์˜์กด์„ฑ์€ ๋‚ฎ์ถ”๊ณ , ์‘์ง‘์„ฑ์€ ์ตœ๋Œ€ํ™”' ํ•˜๋ฉด์„œ ์„ค๊ณ„ํ•œ๋‹ค.

 

๋ฌผ๊ฑด์„ ์‚ฌ๊ธฐ์œ„ํ•ด(Buy Domain) ์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ์— ๋“ค์–ด๊ฐ„ A์”จ๋Š”, ๊ทธ๊ณณ์—์„œ ๋ฌผ๊ฑด์„ ํŒ๋งค (Sell Domain) ํ•˜๋Š”  B์‚ฌ์—์„œ ๊ด€๋ฆฌ(Manage Domain) ํ•˜๋Š” ๋ฌผ๊ฑด์„ ์‚ฐ๋‹ค.

 

'Implementing DDD'์˜ ์ €์ž ๋ฐ˜ ๋ฒ„๋…ผ์€ DDD ๋„์ž…์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•˜๊ณ  ์žˆ๋‹ค.

 

๋‹น์‹ ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์™„์ „ํžˆ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ(data-centric)์ด๋ฉฐ ์ˆœ์ˆ˜ํ•œ CRUD ์†”๋ฃจ์…˜์— ์ •๋ง ์ž˜ ๋งž์•„์„œ, ๋ชจ๋“  ๋™์ž‘์ด ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ์ ์ธ ์ƒ์„ฑ, ์ฝ๊ธฐ, ๊ฐฑ์‹ , ์‚ญ์ œ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ๋ฟ์ด๋ผ๋ฉด DDD๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. ๋‹น์‹ ์˜ ํŒ€์€ ๊ทธ์ € ์˜ˆ์œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ํŽธ์ง‘๊ธฐ๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค. ...... ๋‹น์‹ ์ด ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ์†”๋ฃจ์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด, DDD์— ํšŒ์‚ฌ์˜ ์‹œ๊ฐ„๊ณผ ๋ˆ์„ ๋‚ญ๋น„ํ•˜์ง€ ๋ง๋ผ.

1. ๋ฌผ๊ฑด์„ ์‚ฌ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด์™€

2. ๊ณ„์‚ฐ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด

3. ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด

 

์œ„ 3๊ฐœ์˜ Repository ๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋งž์„๊นŒ?

 

 

๊ฐ์ฒด ๊ฐ„ ๋‚ด๋ถ€ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด(๊ฑฐ๋ฅด๊ณ  ๊ฑธ๋Ÿฌ) ๊ณตํ†ต ์ง‘ํ•ฉ์„ ์ฐพ์•„ Repository๋กœ ๋ฌถ์—ฌ์•ผ๋งŒ ํ•œ๋‹ค.

์˜ค๋Š˜ ํšŒ์‚ฌ์—์„œ ์ง‘๊ฐ€์ง€ ๊ฐ€๋Š” ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ๋ฐฉ๋ฒ• ์ค‘ ์ตœ์ ์˜ ํ•œ ๊ฐ€์ง€ ๋ฃจํŠธ๋ฅผ ์ฐพ๋Š” ๋„ค๋น„๊ฒŒ์ด์…˜๊ณผ ๊ฐ™์ด ๋ง์ด๋‹ค.

 



๐Ÿ“š๋” ์ฝ์„๊ฑฐ๋ฆฌ

๐Ÿ”— DDD์ง€ํ–ฅ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ๋””์ž์ธ

๐Ÿ”— ํ•„์š”ํ•œ ๋‚ด์šฉ๋งŒ ์ถ”๋ ค์„œ DDD ๋‹น์žฅ ์จ๋จน๊ธฐ

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

 

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.