domainDesign

(์ˆ˜๊ฐ• ๊ฐ•์˜ - ํŒจ์ŠคํŠธ์บ ํผ์Šค, The RED : ๋น„์ฆˆ๋‹ˆ์Šค ์„ฑ๊ณต์„ ์œ„ํ•œ Java/Spring ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๊ฐœ๋ฐœ๊ณผ MSA ๊ตฌ์ถ• by ์ดํฌ์ฐฝ)

์ด ๊ธ€์—์„œ๋Š” base.md์—์„œ ๋‹ค๋ค˜๋˜ ddd์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์—์„œ ๋” ๋‚˜์•„๊ฐ€ domain layer์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  1. domain layer์—์„œ์˜ service์—์„œ๋Š” ์ „์ฒด ๋„๋ฉ”์ธ ๋กœ์ง์˜ ํ๋ฆ„์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.

  • ์ด๋ฅผ ์œ„ํ•ด์„œ ์ถ”์ƒํ™”์˜ ๋ ˆ๋ฒจ์„ ๋งŽ์ด ๋†’์—ฌ์•ผ ํ•œ๋‹ค.

  • ๋„๋ฉ”์ธ์€ interface๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์ƒํ™”ํ•˜๊ณ  ์‹ค์ œ ๊ตฌํ˜„์€ ๋‹ค๋ฅธ layer์— ๋งก๊ธด๋‹ค.

์ด๋Š” service๋งŒ ์ฝ์–ด๋„ ๋„๋ฉ”์ธ์˜ ๋กœ์ง ํ๋ฆ„์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ธฐ ์œ„ํ•จ์ด๋‹ค.

  1. dip(dependency inversion principle)์„ ํ™œ์šฉํ•˜์—ฌ ๋„๋ฉ”์ธ์ด ์‚ฌ์šฉํ•˜๋Š” interface์˜ ์‹ค์ œ ๊ตฌํ˜„์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

  • ์˜์†ํ™”๋œ ๊ฐ์ฒด๋ฅผ ๋กœ๋”ฉํ•˜๊ธฐ ์œ„ํ•ด jpa๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ querydsl์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • domain layer์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ๋กœ๋”ฉํ•˜๊ธฐ ์œ„ํ•œ ์ถ”์ƒํ™”๋œ interface๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์‹ค์ œ ๋™์ž‘์€ ํ•˜์œ„ layer์˜ ๊ธฐ์ˆ  ๊ตฌํ˜„์ฒด์— ๋งก๊ธด๋‹ค๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.

  • interface๋กœ ์ถ”์ƒํ™”๋œ ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ตฌํ˜„๋ถ€๋Š” ์–ธ์ œ๋“ ์ง€ ๊ต์ฒด ๊ฐ€๋Šฅ

๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ ์›์น™์ด์ž ํ•ต์‹ฌ ๊ฐœ๋…

dip(dependency inversion principle)์ด๋ž€?

ddd-dip

์œ„ ๊ตฌ์กฐ๊ฐ€ dip์ธ๋ฐ ์ฒ˜์Œ ๋ณด๋ฉด ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ๋‹ค.

ddd-dip2

์œ„๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š”, ์ž๋™์ฐจ๊ฐ€ ์Šค๋…ธ์šฐ ํƒ€์ด์–ด์— ์˜์กดํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.

ddd-dip3

์œ„๋Š” ํƒ€์ด์–ด๋ฅผ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ํƒ€์ด์–ด๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค. ์ •๋ง ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ์ด์ง€๋งŒ ์ด๊ฒƒ์ด dip์ด๋‹ค. ์–ด๋–ค ๊ฒƒ์—๋„ ์˜์กดํ•˜์ง€ ์•Š๋˜ ์Šค๋…ธ์šฐ ํƒ€์ด์–ด๊ฐ€, ํƒ€์ด์–ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๊ฒŒ ๋˜์—ˆ์œผ๋ฏ€๋กœ ์˜์กด ๊ด€๊ณ„์˜ ์—ญ์ „์ด ์ผ์–ด๋‚œ ๊ฒƒ์ด๋‹ค. ์šฉ์–ด๋กœ๋งŒ ๋ดค์„ ๋•Œ๋Š” ์ด๊ฒŒ ์™œ ์—ญ์ „์ธ๊ฑด์ง€ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค์—ˆ๋Š”๋ฐ, ์˜ˆ์‹œ๊ฐ€ ์ •๋ง ์ง๊ด€์ ์ด๋ผ์„œ ์ด ์˜ˆ์‹œ๊ฐ€ ๊ผญ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ์“ฐ์ด๋Š” inversion ๊ฐœ๋…์€ ioc(inversion of container)์—์„œ๋„ ์“ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ์งš๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ, ioc๋ž€ di(dependency injection)์„ ํ†ตํ•ด์„œ ์˜์กด์„ฑ ์ฃผ์ž…์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ œ์–ด์˜ ๊ถŒํ•œ์˜ ์—ญ์ „์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Last updated