๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
DDD

ใ€Œ๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐใ€9์žฅ ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ

by joaa 2023. 4. 10.

๐ŸŽˆ 9.1. ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ๊ฒฝ๊ณ„

ํ•˜์œ„ ๋„๋ฉ”์ธ๋งˆ๋‹ค ๊ฐ™์€ ์šฉ์–ด๋ผ๋„ ์˜๋ฏธ๊ฐ€ ๋‹ค๋ฅด๊ณ  ๊ฐ™์€ ๋Œ€์ƒ์ด๋ผ๋„ ์ง€์นญํ•˜๋Š” ์šฉ์–ด๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๊ฐœ์˜ ๋ชจ๋ธ๋กœ ๋ชจ๋“  ํ•˜์œ„ ๋„๋ฉ”์ธ์„ ํ‘œํ˜„ํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Œ. 

 

๋ชจ๋ธ์€ ํŠน์ •ํ•œ ์ปจํ…์ŠคํŠธ(๋ฌธ๋งฅ) ํ•˜์—์„œ ์™„์ „ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค. ๊ฐ™์€ ์ œํ’ˆ์ด๋ผ๋„ ์นดํƒˆ๋กœ๊ทธ ์ปจํ…์ŠคํŠธ์™€ ์žฌ๊ณ  ์ปจํ…์ŠคํŠธ์—์„œ ์˜๋ฏธ๊ฐ€ ๋‹ค๋ฅด๋‹ค. 

์ด๋ ‡๊ฒŒ ๊ตฌ๋ถ„๋˜๋Š” ๊ฒฝ๊ณ„๋ฅผ ๊ฐ–๋Š” ์ปจํ…์ŠคํŠธ๋ฅผ DDD์—์„œ๋Š” ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

 

๐ŸŽˆ 9.2. ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ 

ํ•˜์œ„ ๋„๋ฉ”์ธ๊ณผ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ผ๋Œ€์ธ ๊ด€๊ณ„๋ฅผ ๊ฐ–์ง€ ์•Š์„ ๋•Œ๊ฐ€ ๋งŽ๋‹ค. 

 

์ฃผ๋ฌธ ํ•˜์œ„ ๋„๋ฉ”์ธ์— ์ฃผ๋ฌธ, ๊ฒฐ์ œ ๊ธˆ์•ก ๊ณ„์‚ฐ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๊ฐ€ ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ๊ณ , 

์นดํƒˆ๋กœ๊ทธ, ์žฌ๊ณ  ๋„๋ฉ”์ธ์„ ํ•˜๋‚˜์˜ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ์ƒํ’ˆ์—์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

 

๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋Š” ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒฝ๊ณ„๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋Š” ๊ตฌํ˜„ํ•˜๋Š” ํ•˜์œ„ ๋„๋ฉ”์ธ์— ์•Œ๋งž์€ ๋ชจ๋ธ์„ ํฌํ•จํ•œ๋‹ค. 

 

๐ŸŽˆ 9.3. ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๊ตฌํ˜„

๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋Š” ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ‘œํ˜„ ์˜์—ญ, ์‘์šฉ ์„œ๋น„์Šค, ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ์˜์—ญ์„ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค. 

 

์„œ๋น„์Šค-DAO ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ์ด ์„œ๋น„์Šค์— ํฉ์–ด์ง€๊ฒŒ ๋˜์ง€๋งŒ ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ์ด ๋‹จ์ˆœํ•˜๋ฉด ์„œ๋น„์Šค-DAO๋กœ ๊ตฌ์„ฑ๋œ CRUD ๋ฐฉ์‹ ์‚ฌ์šฉํ•ด๋„ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์— ๋ฌธ์ œ ๋˜์ง€ ์•Š๋Š”๋‹ค. 

 

CQRS: Command Query Reponsibility Segregation

์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น ๊ธฐ๋Šฅ๊ณผ ๋‚ด์šฉ์„ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๋ชจ๋ธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ํŒจํ„ด.

 

๐ŸŽˆ 9.4. ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๊ฐ„ ํ†ตํ•ฉ

์นดํƒˆ๋กœ๊ทธ ๋„๋ฉ”์ธ์—์„œ ์ถ”์ฒœ ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜๋ฉด ์นดํƒˆ๋กœ๊ทธ ํ•˜์œ„ ๋„๋ฉ”์ธ์— ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์œ„ํ•œ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ์™€ ์ถ”์ฒœ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ๊ธด๋‹ค. 

REST API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ๋‘ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋ฅผ '์ง์ ‘' ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•. 

๋ฉ”์‹œ์ง€ ํ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Œ. 

๋‘ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ํ‚ด์€ ๋ฉ”์‹œ์ง• ํ์— ๋‹ด์„ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ํ˜‘์˜ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๊ทธ ํ๋ฅผ ๋ˆ„๊ฐ€ ์ œ๊ณตํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๊ฒฐ์ •๋จ. ํ•œ์ชฝ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœํŒํ•˜๊ณ  ๋‹ค๋ฅธ ์ชฝ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ์ถœํŒ/๊ตฌ๋… ๋ชจ๋ธ์„ ๋”ฐ๋ฆ„. 

ํ๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ๋น„๋™๊ธฐ๋ผ๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด REST API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ๊ณผ ์ฐจ์ด ์—†์Œ. 

 

๐ŸŽˆ 9.5. ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๊ฐ„ ๊ด€๊ณ„

์ƒ๋ฅ˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ณดํ†ต ํ•˜๋ฅ˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์„ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ ๊ณต๊ฐœํ•จ. 

 

์ƒ๋ฅ˜ ํŒ€์˜ ํ•˜๋ฅ˜ ํŒ€์ด ๋‹ค์ˆ˜ ์กด์žฌํ•˜๋ฉด API ๋งŒ๋“ค๊ณ  ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ๊ณต๊ฐœํ•ด์„œ ์ผ๊ด€ ์„ฑ ์œ ์ง€ํ•˜๋Š” ๊ณต๊ฐœ ํ˜ธ์ŠคํŠธ ์„œ๋น„์Šค

 

๋‘ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ฐ™์€ ๋ชจ๋ธ์„ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋ธ์„ '๊ณต์œ  ์ปค๋„'์ด๋ผ๊ณ  ๋ถ€๋ฆ„.

์ค‘๋ณต์„ ์ค„์—ฌ์ค€๋‹ค๋Š” ์žฅ์  ์žˆ์ง€๋งŒ ๋‘ ํŒ€์ด ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•จ. 

 

๋…๋ฆฝ ๋ฐฉ์‹: ์„œ๋กœ ํ†ตํ•ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹. ๋‘ ๋ฐ”์ปจ ๊ฐ„์˜ ํ†ตํ•ฉ์ด ์ˆ˜๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง. ex) ์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ ์†”๋ฃจ์…˜๊ณผ ์™ธ๋ถ€์˜ ERP ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ. 

 

๐ŸŽˆ 9.6. ์ปจํ…์ŠคํŠธ ๋งต

์ปจํ…์ŠคํŠธ ๋งต: ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œ์‹œํ•œ ๊ฒƒ.