๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ›„๊ธฐ๐Ÿ”ฅ/ํšŒ๊ณ ๋ก

NextStep DDD ์„ธ๋ ˆ๋‚˜๋ฐ ์ˆ˜๋ฃŒ ํ›„๊ธฐ

by dkswnkk 2024. 7. 15.

๊ณ„๊ธฐ

4.30 ~ 6.10๊นŒ์ง€ DDD ์„ธ๋ ˆ๋‚˜๋ฐ 6๊ธฐ ๊ณผ์ •์— ์ฐธ๊ฐ€ํ–ˆ๋‹ค. ์š” ๊ณผ์ •์„ ๋“ฃ๊ฒŒ ๋œ ์ด์œ ๋Š”

  1. ๋„ฅ์ŠคํŠธ์Šคํ… ๊ฐ•์˜ ์ค‘ ๋“ฃ๊ณ  ์‹ถ์—ˆ๋˜ ๊ฐ•์˜ ์ค‘ ํ•˜๋‚˜์˜€๊ธฐ๋„ ํ•˜๊ณ ,
  2. ๊ธฐ์ˆ˜๋ณ„๋กœ ๊ฑฐ์˜ ์ผ ๋…„์— ํ•œ ๋ฒˆ ์—ด๋ฆฌ๊ธฐ์— 2๋…„ ์ฐจ์ธ ์ง€๊ธˆ์ด ์ ๊ธฐ๋ผ ์ƒ๊ฐํ–ˆ๊ณ ,
  3. DDD๊ด€๋ จํ•ด์„œ๋Š” ์ฑ…์œผ๋กœ ์ด๋ก ๊ณต๋ถ€๋งŒ ํ–ˆ์—ˆ๋Š”๋ฐ ์‹ค์Šต์„ ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๊ณ ,
  4. ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ ์ด ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—…๋ฌด์— ๋„์›€์ด ๋  ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ปค๋ฆฌํ˜๋Ÿผ

๊ฐ•์˜ ์ปค๋ฆฌํ˜๋Ÿผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1์ฃผ์ฐจ - ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ์ดํ•ด

์ฒซ ์ฃผ๋Š” ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ์— ๋Œ€ํ•ด์„œ ํ•™์Šตํ–ˆ๋Š”๋ฐ, '๋„๋ฉ”์ธ', '๋ชจ๋ธ', '๋„๋ฉ”์ธ ๋ชจ๋ธ', '๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„'๋ผ๋Š” ๋‹จ์–ด์˜ ์ •์˜์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ณด๋Š” ์‹œ๊ฐ„์„ ๋งŽ์ด ๊ฐ€์กŒ๋‹ค. ๋ฏธ์…˜์—์„œ๋Š” 2๋‹จ๊ณ„์™€ 3๋‹จ๊ณ„๊ฐ€ ๊ฐœ์ธ์ ์œผ๋กœ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ๋‹ค.

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

3๋‹จ๊ณ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ๋ณดํ˜ธ๋Š” ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ Fake ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Mock ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ , ๊ฐ๊ฐ์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค.

  • Mock ๊ฐ์ฒด: Stub ๋ฐฉ์‹์„ ์ด์šฉํ•ด ํ™”์ดํŠธ ๋ฐ•์Šค ํ…Œ์ŠคํŠธ ํ˜•์‹์œผ๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ๋‚ด๋ถ€ ๋กœ์ง์„ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ณ , ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ given ์ ˆ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ณ , ๋‚ด๋ถ€ ๋™์ž‘์˜ ํ๋ฆ„์— ์˜ํ–ฅ์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง ์‹œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ๋„ ๋งŽ์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • Fake ๊ฐ์ฒด: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋ธ”๋ž™๋ฐ•์Šค ํ˜•์‹์œผ๋กœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋“ฏ์ด ๊ฒฐ๊ณผ๋งŒ ํ™•์ธํ•˜๋ฉด ๋˜์–ด์„œ ํŽธํ•˜๊ณ  ๊ฐ€๋…์„ฑ ์žˆ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ดˆ๊ธฐ ์„ธํŒ… ์ž‘์—…์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ๊ท€์ฐฎ๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

๋‹จ์œ„ํ…Œ์ŠคํŠธ ํ•˜๋ฉด ๋Ÿฐ๋˜ํŒŒ์™€ ๊ณ ์ „ํŒŒ์˜ ๋…ผ์Ÿ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, ์‚ฌ์‹ค ์ด๋Ÿฐ ๊ฑด ์ž˜ ๋ชจ๋ฅด๊ฒ ๊ณ  ๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์ดˆ๋ฐ˜์— ์กฐ๊ธˆ ๊ท€์ฐฎ๋”๋ผ๋„ ํ†ตํ•ฉํ…Œ์ŠคํŠธ์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ๋งŒ ๊ฒ€์ฆํ•˜๋ฉด ๋˜๋Š” Fake ๋ฐฉ์‹์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. (๋ฌผ๋ก  ์™ธ๋ถ€ I/O๋“ค์€ ๋ถ€๋ถ„์ ์œผ๋กœ Mock์„ ์‚ฌ์šฉํ•˜๊ณ ,,)

์•„๋ž˜๋Š” ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์€ ์•„ํ‹ฐํด๋“ค์ด๋‹ค.

 

์ด๋ฒคํŠธ ์Šคํ† ๋ฐ

์ค‘๊ฐ„์— ์šฐ์•„ํ•œ ํ…Œํฌ์‚ด๋กฑ์—์„œ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ด์ „๊นŒ์ง€ ์—ฌ๋Ÿฌ ๊ธฐ์—…๋“ค์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ์„ ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ๋Š” ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ์ด๊ฒƒ ์—ญ์‹œ ๊ธ€๋กœ๋งŒ ๋ดค๋‹ค ๋ณด๋‹ˆ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์–ด๋–ค ํšจ์šฉ์ด ์žˆ๋Š”์ง€๋Š” ์ง์ ‘์ ์œผ๋กœ ๋Š๋ผ์ง€ ๋ชปํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ ๊ธฐ์ˆ˜์—์„œ ์ง์ ‘ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ฐธ๊ฐ€ํ•˜์—ฌ ์ง„ํ–‰ํ•ด ๋ณด๋ฉด์„œ, ๊ทธ ์ง„ํ–‰ ๋ฐฉ์‹๊ณผ ํšจ์šฉ์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด๋ฒคํŠธ ์Šคํ† ๋ฐ(Event Storming)์€ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์›Œํฌ์ˆ ๊ธฐ๋ฒ•์œผ๋กœ, ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•จ๊ป˜ ์‹œ์Šคํ…œ์˜ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ์ง„ํ–‰ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜์˜ ์˜์ƒ๋“ค์„ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

์ด๋ฒคํŠธ ์Šคํ† ๋ฐ์€ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์›Œํฌ์ˆ ๊ธฐ๋ฒ•์ด๋ผ๊ณ  ํ•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ์„ค๊ณ„๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ํŒ€์— ์ƒˆ๋กœ์šด ์ธ์›์ด ๋“ค์–ด์˜ค๊ฑฐ๋‚˜ ๋ฐ˜๊ธฐ๋ณ„๋กœ ํ•œ ๋ฒˆ์”ฉ ์ง„ํ–‰ํ•˜๋ฉด ๋„๋ฉ”์ธ์„ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‹œ์Šคํ…œ์˜ ๋ณต์žกํ•œ ๋ถ€๋ถ„์ด๋‚˜ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ์‚ฌ์ „์— ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋งค์šฐ ๋„์›€์ด ๋œ๋‹ค๊ณ  ์ƒ๊ฐ๋˜์—ˆ๋‹ค.

์‹ค์ œ ์ง„ํ–‰ํ–ˆ๋˜ ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ

 

2์ฃผ์ฐจ - ํฌ๊ฒŒ ์†Œ๋ฆฌ๋‚ด์–ด ๋ชจ๋ธ๋ง ํ•˜๊ธฐ

2์ฃผ์ฐจ๋Š” ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด์™€, ๋ฐ”์šด๋””๋“œ ์ฝ˜ํ…์ŠคํŠธ์— ๋Œ€ํ•œ ๊ฐœ๋…์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๊ณ , '์šฉ์–ด์‚ฌ์ „ ์ •์˜'์™€ '๋ชจ๋ธ๋ง'์— ๋Œ€ํ•ด ๋ฏธ์…˜์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

1๋‹จ๊ณ„ ์šฉ์–ด ์‚ฌ์ „ ๋งŒ๋“ค๊ธฐ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ '์ด๋Ÿฐ ๊ฑด ์‚ฌ๋‚ด์— ๋„์ž…๋˜๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค'๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์šฉ์–ด ์‚ฌ์ „์„ ์ •์˜ํ•˜๋Š” ์ด์œ ๋Š” ํ”„๋กœ์ ํŠธ๋‚˜ ์กฐ์ง ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ์šฉ์–ด์™€ ๊ฐœ๋…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜์—ฌ ๊ตฌ์„ฑ์›๋“ค ๊ฐ„์˜ ์˜์‚ฌ์†Œํ†ต์„ ์›ํ™œํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ด์ปค๋จธ์Šค ์กฐ์ง์—์„œ 'product' ๋ผ๋Š” ๊ฒƒ์„ '์ œํ’ˆ'์œผ๋กœ ๋ถ€๋ฅผ์ง€ '์ƒํ’ˆ'์œผ๋กœ ๋ถ€๋ฅผ์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ํ–‰์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

๋‹น์žฅ์— ํ˜„์—…์—์„œ ๊ธฐํš์ž์™€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์„œ๋กœ ๋ถ€๋ฅด๋Š” ์šฉ์–ด๊ฐ€ ๋‹ค๋ฅด๊ณ , ์‚ฌ์—… ํŒ€์—์„œ ๋ถ€๋ฅด๋Š” ์šฉ์–ด๊ฐ€ ๋‹ฌ๋ผ ํšŒ์˜๋‚˜ ์—…๋ฌด๋ฅผ ํ•  ๋•Œ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ ์ด๊ฒƒ๋“ค์„ ์‹œ๊ฐ„ ๋‚ด์„œ ์ •์˜ํ•˜๋ฉด ์˜์‚ฌ๊ฒฐ์ •์„ ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ณ  ์‹ ์†ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด ๋ถˆํ•„์š”ํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

2๋‹จ๊ณ„ ๋ชจ๋ธ๋ง ์ •์˜๋Š” ์‹œ์Šคํ…œ์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ์ˆ˜ํ•™์ , ๋…ผ๋ฆฌ์ , ํ˜น์€ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ๋ชจ๋ธ์€ ์ด๋Ÿฌํ•œ ๊ณผ์ •์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์˜๋ฏธํ•œ๋‹ค.

mermaid๋กœ ํ‘œํ˜„ํ•œ ๋ชจ๋ธ๋ง

๋งˆํฌ๋‹ค์šด์„ ์‚ฌ์šฉํ–ˆ๊ธฐ์— ์ด๋ฒˆ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ mermaid๋ผ๋Š” ์–ธ์–ด์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ์œ„์™€ ๊ฐ™์ด ๋ชจ๋ธ๋ง์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์ „์ฒด์ ์œผ๋กœ 2์ฃผ์ฐจ ๋ฏธ์…˜๋“ค์€ ๋žœ๋ค์œผ๋กœ ์ง€์ •๋œ ํŽ˜์–ด์™€ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. ๋ฏธ์…˜๋“ค ์ž์ฒด๊ฐ€ ํ˜ผ์ž ํ•˜๋ฉด ์ •๋ง ์‰ฌ์šด ๋ฏธ์…˜์ด์ง€๋งŒ ํ•จ๊ป˜ํ•˜๋Š” ์ธ์›์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๋ฏธ์…˜์˜ ๋‚œ์ด๋„๊ฐ€ ๋†’์•„์ง€๋Š”๋ฐ, ์ƒ๋Œ€๋ฐฉ์„ ์„ค๋“ํ•˜๊ณ  ๋ฆฌ๋ทฐ์–ด๋ฅผ ์„ค๋“ํ•˜๋Š” ๊ณผ์ •๋“ค์ด ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํŠนํžˆ ์šฉ์–ด๋ฅผ ์ •์˜ํ•  ๋•Œ ๋‚˜๋Š” ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๋Š”๋ฐ ํŽ˜์–ด๋Š” ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์†Œํ†ตํ•˜๋ฉฐ ๋งž์ถฐ๊ฐ€๋Š” ๊ณผ์ •์—์„œ ๋งŽ์ด ๋ฐฐ์› ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

3์ฃผ์ฐจ - ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ๊ธฐ๋ณธ ์š”์†Œ

3์ฃผ์ฐจ๋Š” ํ•˜์œ„ ๋„๋ฉ”์ธ๊ณผ Bounded Context, ๋„๋ฉ”์ธ ๋ชจ๋ธ๋ง, Entity์™€ VO, Aggregate์™€ Repository, ๊ทธ๋ฆฌ๊ณ  ๋„๋ฉ”์ธ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค. 

๊ฐ Aggregate ๋ณ„๋กœ Repository๋ฅผ ๋งŒ๋“ค๊ณ , ๊ธฐ์กด์— ๋ณต์žกํ•˜๊ฒŒ ์„œ๋กœ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋˜ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋“ค์„ Bounded Context ๋ผ๋ฆฌ ์•Œ๋งž๊ฒŒ ๋ถ„๋ฆฌํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ด๋ฒˆ ์ฃผ์ฐจ์—์„œ๋Š” ์ง์ ‘์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์‹œ๊ฐ„์ด ๋งŽ์ด ๋“ค์—ˆ๊ณ , ๊ทธ๋งŒํผ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐฐ์šด ์ฃผ์ฐจ์˜€๋‹ค. 

ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋Š” ์ฒ˜์Œ์— ์•„๋ž˜์™€ ๊ฐ™์ด POJO์™€ ์˜์†์„ฑ ๋ ˆ์ด์–ด๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ์—ˆ์ง€๋งŒ, ๊ธฐ๊ฐ„ ๋‚ด์— ๋ฏธ์…˜์„ ์™„๋ฃŒํ•˜์ง€ ๋ชปํ•  ๊ฒƒ ๊ฐ™์•„ ORM ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋„๋ฉ”์ธ ๋ชจ๋ธ๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Bounded Context ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์€ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

4์ฃผ์ฐจ - ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ์•„ํ‚คํ…์ฒ˜

4์ฃผ์ฐจ๋ถ€ํ„ฐ๋Š” ๊ฐ•์˜์œ„์ฃผ์ด๊ณ , ์•„๋ž˜์˜ ๋‚ด์šฉ๋“ค์„ ๋ฐฐ์› ๋‹ค.

  • ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„์— ์–ด์šธ๋ฆฌ๋Š” ์•„ํ‚คํ…์ฒ˜
    • ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜
    • DTO, DIP, ACL(๋ถ€ํŒจ ๋ฐฉ์น˜ ๊ณ„์ธต)
    • ์•„ํ‚คํ…์ฒ˜์˜ ์ง„ํ™”
  • AGGREGATE ์‹ฌํ™”
    • ํฐ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์™€ ์ž‘์€ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ
    • ๊ฒฐ๊ณผ์  ์ผ๊ด€์„ฑ
  • ๋ฏธ์…˜ ๋ผ์ด๋ธŒ ์ฝ”๋”ฉ

 

5์ฃผ์ฐจ - ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ์™€ CQRS

๋งˆ์ง€๋ง‰ ์ฃผ์ฐจ๋Š” Q&A๋ฅผ ํฌํ•จํ•˜์—ฌ ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ, ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ CQRS ํŒจํ„ด์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค. CQRS ํŒจํ„ด์— ๋Œ€ํ•ด์„œ๋Š” ์ง์ ‘์ ์ธ ๋ฏธ์…˜์œผ๋กœ ์ง„ํ–‰ํ–ˆ์œผ๋ฉด ํ–ˆ๋Š”๋ฐ ๊ฐ•์˜๋กœ ์ง„ํ–‰๋œ ์ ์— ์žˆ์–ด์„œ ์กฐ๊ธˆ ์•„์‰ฌ์› ๋‹ค.

์•„๋ž˜์˜ ์•„ํ‹ฐํด๋“ค์ด ๊ฐ•์˜๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ๋‹ค.

 

๋งˆ๋ฌด๋ฆฌ

๋„ฅ์ŠคํŠธ ์Šคํ…์˜ ์ฒซ ๊ฐ•์˜๋กœ ์ž‘๋…„์— TDD, ํด๋ฆฐ ์ฝ”๋“œ with Java๋ฅผ ์ˆ˜๊ฐ•ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋•Œ ๋งค์šฐ ๋งŒ์กฑํ–ˆ๊ณ  ๋‚˜์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์ด ํ™•์—ฐํ•˜๊ฒŒ ๊ฐœ์„ ๋˜์—ˆ๋‹ค๋Š” ์ ์„ ๋ชธ์†Œ ๋Š๊ผˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ฐ•์˜๋“ค๋„ ๊ผญ ๋“ค์–ด๋ณด๊ณ  ์‹ถ์€ ๋งˆ์Œ์ด ๋“ค์—ˆ๋‹ค. ํŠนํžˆ ์ด๋ฒˆ ๊ฐ•์˜์ธ DDD ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์ฑ…์„ ํ†ตํ•ด ์ด๋ก ๋งŒ ๋ฐฐ์› ๊ธฐ๋„ ํ•˜๊ณ , ์ตœ๊ทผ์— ์˜ฎ๊ธด ํŒ€์˜ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์˜ ์ผ๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ์–ด๋””์„ ๊ฐ€ ๊ณ„์† ์‚๊ฑฐ๋• ๋˜๋Š” ๋ฐ”๋žŒ์— ์ž˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๊ณ„์†ํ•ด์„œ ์˜๋ฌธ์ด ๋“ค์–ด ์ œ๋Œ€๋กœ ๋ฐฐ์›Œ์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ์„ ํ•ด๋ณด๊ณ ์ž ํ•˜๋Š” ๋งˆ์Œ์— ์‹ ์ฒญํ–ˆ๋‹ค.

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

+ ์ฐธ๊ณ ๋กœ ์ด์ „์—๋Š” ์ •๋ณด๊ฐ€ ์—†์–ด์„œ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ DDD๊ฐ•์˜๋Š” ์ž‘๋…„๊ณผ ์˜ฌํ•ด ๋น„์‹ผ ๊ธˆ์•ก์ž„์—๋„ ์ธ๊ธฐ๊ฐ€ ๋งŽ์•„ ๊ฐ•์˜๊ฐ€ ์˜คํ”ˆ๋œ ์ง€ x๋ถ„ ์ด๋‚ด๋กœ ๋งˆ๊ฐ์ด ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ํ˜น์‹œ๋ผ๋„ ์ˆ˜๊ฐ•ํ•  ๋งˆ์Œ์ด ์žˆ๋Š” ๋ถ„์ด๋ผ๋ฉด ์•„๋งˆ ๋‹ค์Œ๋ฒˆ์—๋„ ์˜คํ”ˆ๋Ÿฐ์„ ํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

์•„๋ž˜๋Š” DDD ๊ด€๋ จํ•˜์—ฌ ์ฝ์œผ๋ฉด ์ข‹์€ ์•„ํ‹ฐํด๋“ค์„ ๋ชจ์•„๋ดค๋‹ค.

๋Œ“๊ธ€