๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CS/Architecture

DDD ํ•ต์‹ฌ๋งŒ ๋ณด๊ณ ๊ฐ€์ž

by agong์ด 2025. 2. 27.

๐Ÿ“œ์„œ๋ก 

๋งค๋ฒˆ DDD๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์–ด๋ ดํ’‹์ด ๋“ค์—ˆ์—ˆ์ง€๋งŒ, ๊ณต๋ถ€ํ•ด ๋ณธ ์ ์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋‚ด๋ฐฐ์บ  ๋ถ€ํŠธ์บ ํ”„์—์„œ ์ข‹์€ ๊ธฐํšŒ๋กœ ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ DDD ํŠน๊ฐ•์„ ์ง„ํ–‰ํ•ด ์ฃผ์…จ๊ณ , ๋•๋ถ„์— ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ  ๋А๋‚„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ํ•ด๋‹น ํŠน๊ฐ•์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋™์šฐ ๋ฉ˜ํ† ๋‹˜, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿฅฒ

 

๐Ÿ“ Domain์ด๋ž€?

๋จผ์ € ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์ด๋ž€ ์œ ์‚ฌํ•œ ์—…๋ฌด์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.(DDD์—์„œ์˜ Domain์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค)

 

๐Ÿ“ DDD๋ž€?

DDD(Domain-Driven Design), ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๋ž€ ๋„๋ฉ”์ธ ํŒจํ„ด์„ ์ค‘์‹ฌ์— ๋†“๊ณ  ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ERD๋ฅผ ์ž‘์„ฑํ•˜๊ณ , Entity๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

์œ ์ €๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฃผ๋ฌธ์„ ํ• ์ˆ˜์žˆ์œผ๋‹ˆ๊น 1:N, ์ฃผ๋ฌธ ํ•˜๋‚˜๋‹น ๋ฆฌ๋ทฐ ํ•œ๊ฐœ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊น 1:1, …..

 

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•œ๋’ค Entity์— ์ •์งํ•˜๊ฒŒ ๋ชจ๋“  ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ FK๋กœ ๋งบ์—ˆ์Šต๋‹ˆ๋‹ค. 

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

โš ๏ธ FK๋ฅผ ๋งบ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ 

1๏ธโƒฃ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€

์ž‘์€ ์„œ๋น„์Šค์—์„œ๋Š” FK๋กœ ๋ชจ๋“  ๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋น„์Šค ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ๋„๋ฉ”์ธ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด์„œ ํŠน์ • ํ…Œ์ด๋ธ”์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์—ฐ๊ด€๋œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋“ค๋„ ์ˆ˜์ •ํ•ด์•ผ ํ•ด์„œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

 

2๏ธโƒฃ ์„ฑ๋Šฅ ์ €ํ•˜ (N+1 ๋ฌธ์ œ ๋ฐœ์ƒ)

FK๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ JOIN์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, OneToMany(1:N) ๊ด€๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” N+1 ๋ฌธ์ œ๋Š” ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ ์ € ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋ฉด์„œ ์ฃผ๋ฌธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•  ๋•Œ, ํ•œ ๋ฒˆ์˜ ์กฐํšŒ๊ฐ€ N๊ฐœ์˜ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3๏ธโƒฃ ๋„๋ฉ”์ธ ๋กœ์ง๋ณด๋‹ค ์—ฐ๊ด€๊ด€๊ณ„ ์œ ์ง€์— ๋” ๋งŽ์€ ์‹œ๊ฐ„ ์†Œ๋น„

์›๋ž˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•ด์•ผํ•˜์ง€๋งŒ, FK๋กœ ๋ชจ๋“  ๊ด€๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด, ์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ ๋“ฑ์œผ๋กœ ์ธํ•ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๋ญ ํ•˜๋‚˜ ์ˆ˜์ •ํ•˜๋ฉด ๋ฐฑ๋งŒ๊ฐœ ์ˆ˜์ •ํ•ด์•ผํ•  ์ˆ˜๋„..

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ด์œ ๋กœ DDD๊ฐ€ ๋– ์˜ค๋ฅด๊ฒŒ ๋œ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

์ œ๊ฐ€ ์ด๋ฒˆ์— ํ”„๋กœ์ ํŠธ๋กœ ์ง„ํ–‰ํ•œ ์˜จ๋ผ์ธ ์Œ์‹ ์ฃผ๋ฌธ ์„œ๋น„์Šค๋ฅผ ์˜ˆ๋กœ DDD์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ช‡๊ฐ€์ง€ ์ฃผ์š” ๋„๋ฉ”์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

- ์ฃผ๋ฌธ

- ์ฃผ๋ฌธ ์•„์ดํ…œ

- ์ƒํ’ˆ

- ์œ ์ €

- ๊ฐ€๊ฒŒ

- ๊ฐ€๊ฒŒ ์ฃผ์†Œ

 

ํ•ด๋‹น ๋„๋ฉ”์ธ์—์„œ ์ข…์† ์ ์ธ ๊ด€๊ณ„๋ฅผ ์ฐพ์•„๋ด…์‹œ๋‹ค. ์ด๋•Œ ์ข…์†์ ์ธ ๊ด€๊ณ„๋ž€ ์˜์†์„ฑ ์ „์ด๊ฐ€ ๊ฐ€๋Šฅํ•œ ์กด์žฌ. ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ๋Š” ๊ฐ™์€ Lifecycle์„ ๊ฐ€์ง€๋Š” ์กด์žฌํ•˜๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ผ๋ถ€๋งŒ์„ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

- ์ฃผ๋ฌธ, ์ฃผ๋ฌธ ์•„์ดํ…œ

- ์ƒํ’ˆ 

- ๊ฐ€๊ฒŒ, ๊ฐ€๊ฒŒ ์ฃผ์†Œ

- ์œ ์ €

์œ ์ €๊ฐ€ ์‚ญ์ œ๋œ๋‹ค๊ณ  ์ฃผ๋ฌธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ƒํ’ˆ์ด ์ƒ๊ธด ๋’ค์— ์ฃผ๋ฌธ ์•„์ดํ…œ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋‚˜๋‰˜๋Š”์ง€ ํ—ท๊ฐˆ๋ฆฐ๋‹ค๋ฉด ํ•ด๋‹น ์˜ˆ์‹œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์‹œ๋ฉด์„œ ์˜์†์„ฑ ์ „์ด(Cascade)๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋„๋ฉ”์ธ, ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๊ฐ™์€ ๋„๋ฉ”์ธ์„ ์ƒ๊ฐํ•ด๋ณด์‹œ๋ฉด ๋ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๋จผ์ € ์ด๋ ‡๊ฒŒ ๊ตฌ์กฐ๋ฅผ ์งœ๊ณ  Entity๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค๋ฉด ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ์งค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

- ํšŒ์›

- ์ฃผ๋ฌธ

- ๋งค์žฅ

- ๊ฒฐ์ œ

 

์—ฌ๊ธฐ์— ๋ช‡๊ฐ€์ง€ ์„ธ๋ถ„ํ™” ํ•˜์—ฌ ํ•˜์œ„ ๋„๋ฉ”์ธ๋“ค์„ ํฌํ˜„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

'CS > Architecture' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

MSA์—์„œ ๋งํ•˜๋Š” '๋А์Šจํ•œ ๊ฒฐํ•ฉ'์ด๋ž€?  (1) 2025.03.06

๋Œ“๊ธ€