๐Ÿƒ [SpringBoot] DDD ์šฉ์–ด ์ •๋ฆฌ(1)

suRanยท2022๋…„ 7์›” 19์ผ
0

๐Ÿƒ SpringBoot

๋ชฉ๋ก ๋ณด๊ธฐ
2/24
post-thumbnail

๋ณธ ํฌ์ŠคํŒ…์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฏธ๋‹ˆ ๋ฐ๋ธŒ ์ฝ”์Šค๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ
ํ•™์Šต์„ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค.

Domain Driven Design(DDD) ์šฉ์–ด ์ •๋ฆฌ

๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„์˜ ์šฉ์–ด๋ฅผ ํ•™์Šตํ•œ๋‹ค.



๐ŸŒฟ Domain

์‚ฌ์šฉ์ž๊ฐ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์ƒ ์˜์—ญ
์ฃผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ์ž์ฒด๊ฐ€ Domain์ด ๋œ๋‹ค.

ex)

์ฃผ๋ฌธ๊ด€๋ฆฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋„๋ฉ”์ธ? 
์ฃผ๋ฌธ

ํšŒ๊ณ„๊ด€๋ฆฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋„๋ฉ”์ธ?
ํšŒ๊ณ„

๋„๋ฉ”์ธ(๋น„์ฆˆ๋‹ˆ์Šค)์ž์ฒด๊ฐ€ ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๋ณต์žก์„ฑ ํ•ด์†Œ๋ฅผ ์œ„ํ•ด ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š”๋ฐ,
์ด๋Ÿฐ ๋ชจ๋ธ๋“ค์„ ํ‘œํ˜„ํ•˜๊ณ  ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์‚ฌ์šฉํ•œ๋‹ค.
์—ฌ๋Ÿฌ ๋ชจ๋ธ ์ค‘ Entity๋ชจ๋ธ, Value Object ๋ชจ๋ธ์„ ํ•™์Šตํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

DDD์˜ ์šฉ์–ด๋ฅผ ํ†ตํ•ด ์ฃผ๋ฌธ๊ด€๋ฆฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ž‘ํ•ด๋ณผ ์˜ˆ์ •์ด๋‹ค.

์ง€๊ธˆ ๋ชจ๋ธ์„ ํ•™์Šตํ•˜๋Š” ๋ชฉ์ ์€ JAVA ๊ธฐ๋ฐ˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ž‘ํ•˜๊ธฐ ์œ„ํ•จ์ด๋ฏ€๋กœ
๋ชจ๋“  ๋ชจ๋ธ์€ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑํ•˜๊ณ  ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ง„๋‹ค. ์ข…๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์‰ฌ์šธ ๊ฒƒ.



๐ŸŒฟ Entity

Entity๋ชจ๋ธ์—์„œ์˜ ๊ฐ์ฒด๋Š” Entity์ด๊ณ 
Entity๋Š” ๋‹ค๋ฅธ Entity์™€ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง„๋‹ค.
Entity๋Š” ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๊ณ„์† ๋ณ€ํ•œ๋‹ค.
Entity์˜ ์‹๋ณ„์ž๋Š” ๊ณ ์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋„๋ฉ”์ธ์—์„œ ๊ฐœ๋ณ„์„ฑ์ด ์žˆ๋Š” ๊ฐœ๋…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

EX) 
์ฃผ๋ฌธ๊ด€๋ฆฌ ๋„๋ฉ”์ธ์—์„œ๋Š” 
์ฃผ๋ฌธ์ด๋ผ๋Š” Entity ์กด์žฌ. ๊ฐ๊ฐ์˜ ์ฃผ๋ฌธ์€ ๋…๋ฆฝ์ ์ด๊ณ , ์œ ๋‹ˆํฌํ•˜๊ณ , ๊ฐœ๋ณ„์„ฑ์žˆ๋‹ค. 
๊ณ ๊ฐ์ด๋ผ๋Š” Entity ์กด์žฌ. ๊ณ ๊ฐ์€ ๊ณ ๊ฐ์ด๋ผ๋Š” Entity๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” `๊ณ ๊ฐ ID`๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค,

์ฃผ๋ฌธ๊ด€๋ฆฌ ๋„๋ฉ”์ธ์—์„œ ์ฃผ๋ฌธ์˜ ์ƒํƒœ๋Š” ๊ณ„์† ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ƒํ’ˆ์ด ๋ฐฐ์†ก ์ค‘ -> ๋ฐฐ์†ก์™„๋ฃŒ๊ฐ€ ๋˜๋ฉด ์ฃผ๋ฌธ์€ complete์ƒํƒœ๋กœ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๊ณ ๊ฐ์˜ ํŒจ์Šค์›Œ๋“œ, ์ „ํ™”๋ฒˆํ˜ธ ๋“ฑ์€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์ด๋ฉฐ ๊ณ ๊ฐ์ •๋ณด๋Š” ๊ฐœ๋ณ„์ ์ด๊ณ  ์ง€์†์ ์œผ๋กœ ๋ณ€ํ™”๋œ๋‹ค.



๐ŸŒฟ Value Object

Value Object๋Š” ๊ฐ’ ๊ฐ์ฒด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.
Value Objec๋Š” ๊ฐ’ ์†์„ฑ์ด ๊ฐœ๋ณ„์ ์œผ๋กœ ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ๊ฐ’ ์ž์ฒด๋กœ ๊ณ ์œ ํ•œ ๊ฐ์ฒด๋ฅผ ๋œปํ•œ๋‹ค.
์—”ํ‹ฐํ‹ฐ๊ฐ€ id๋กœ ๊ณ ์œ ์„ฑ์„ ๊ฐ€์ง„๋‹ค๋ฉด Value๋Š” ๊ฐ’์˜ ์กฐํ•ฉ์œผ๋กœ ๊ณ ์œ ์„ฑ์„ ๊ฐ€์ง„๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด์ง€๋ฉด ๋‚ด์šฉ์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

ex) 100์›์งœ๋ฆฌ ๋™์ „์€ ๊ฐ์ฒด ์ž์ฒด๊ฐ€ ๊ณ ์œ ํ•˜๋‹ค.
100์› ๋™์ „์„ 5๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด 100์› ๋™์ „ ๊ฐ์ฒด 5๊ฐœ๊ฐ€ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Value Object๋„ ๊ณ ์œ ํ•˜๋‹ค.
ํ•œ ๋ฒˆ 100์›์€ ์˜์›ํžˆ 100์›์ด๋‹ค.

๋Œ€์ฒด๋กœ entity๋“ค์ด ์†์„ฑ์œผ๋กœ Value Object๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ฃผ๋ฌธ ์‹œ์Šคํ…œ์—์„œ ์ฃผ๋ฌธ์ž๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
์ฃผ๋ฌธ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค๋ฉด ์ฃผ๋ฌธ ์—”ํ‹ฐํ‹ฐ์™€ ํ•จ๊ป˜ ์ฃผ๋ฌธ์ž๋„ ์‚ฌ๋ผ์งˆ ๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ฃผ๋ฌธ์ž์˜ ์ด๋ฆ„์ด ๋ณ€ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
๋ฐฐ์†ก์ง€์— ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ์—๋„ ๋ฐฐ์†ก์ง€ ์•ˆ์˜ ์ฃผ์†Œ๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
์ฃผ๋ฌธ์˜ ๋ฐฐ์†ก์ง€๋กœ์„œ ๋‹ค๋ฅธ Value Object๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ๋ฐฐ์†ก์ง€ ์ž์ฒด๊ฐ€ ์ฃผ์†Œ๋ผ๋ฉด ์ฃผ์†Œ๋Š” ๊ทธ ์ž์ฒด๋กœ ๊ณ ์œ ํ•œ ๊ฒƒ์ด ๋œ๋‹ค.
์ฃผ๋ฌธ๋ฌผํ’ˆ ์—”ํ‹ฐํ‹ฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ์ฃผ๋ฌธ๋ฌผํ’ˆ์˜ ๋ชฉ๋ก์ด ์žˆ๋‹ค๋ฉด ๋ชฉ๋ก์€ ๋ฐ”๋€” ์ˆ˜ ์žˆ์ง€๋งŒ
ํ•˜๋‚˜์˜ Value Object๋Š” ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด์ง€๋ฉด ๋ณ€ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ
์ฃผ๋ฌธ๋ฌผํ’ˆ ์•ˆ์˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์—†๋Š” ๊ฒƒ์ด๋‹ค.


์ •๋ฆฌ

์—”ํ‹ฐํ‹ฐ๋Š” ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์™€ ๊ตฌ๋ณ„ ๊ฐ€๋Šฅํ•œ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง„๋‹ค.
์—”ํ‹ฐํ‹ฐ์˜ ์†์„ฑ๊ณผ ์ƒํƒœ๋Š” ๊ณ„์† ๋ณ€ํ™”ํ•˜์ง€๋งŒ
๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ณ ์œ  ์†์„ฑ์œผ๋กœ VO๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ดํ•ดํ–ˆ๋‹ค.
(๊ธ‰ํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š๋ผ ํ‹€๋ ธ์„ ์ˆ˜ ์žˆ์Œ ์ถ”ํ›„ ๋” ํ•™์Šต..๐Ÿ˜ฐ)





๋” ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ฝ์–ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์€ ํฌ์ŠคํŒ…
https://doing7.tistory.com/79

profile
๊ฐœ๋ฐœ ๊ณต๋ถ€๋ฅผ ํ•ด๋ผ

0๊ฐœ์˜ ๋Œ“๊ธ€