์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

๋„ค ๊ฐœ์˜ ์˜์—ญ

  • ํ‘œํ˜„

  • ์‘์šฉ

  • ๋„๋ฉ”์ธ

  • Infrastructure

  • ์‘์šฉ ์˜์—ญ์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฉ”์ธ ์˜์—ญ์˜ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์‘์šฉ ์„œ๋น„์Šค๋Š” ๋กœ์ง์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๋„๋ฉ”์ธ ๋ชจ๋ธ์— ๋กœ์ง ์ˆ˜ํ–‰์„ ์œ„์ž„ํ•œ๋‹ค.

  • ๋„๋ฉ”์ธ ์˜์—ญ์€ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

    • ๋ฐฐ์†ก์ง€ ๋ณ€๊ฒฝ, ๊ฒฐ์ œ ์™„๋ฃŒ, ์ฃผ๋ฌธ ์ด์•ก ๊ณ„์‚ฐ๋“ฑ ๊ณผ ๊ฐ™์€ ํ•ต์‹ฌ ๋กœ์ง์„ ๋„๋ฉ”์ธ ๋ชจ๋ธ์—์„œ ๊ตฌํ˜„ํ•œ๋‹ค.
  • Infrastructure

    • ๊ตฌํ˜„ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ๊ฒƒ์„ ๋‹ค๋ฃฌ๋‹ค.
    • RDBMS, Message Queue, SMTP (ex: mysql, kafka)

Layer Architecture

  • ๋„๋ฉ”์ธ์˜ ๋ณต์žก๋„์— ๋”ฐ๋ผ ์‘์šฉ๊ณผ ๋„๋ฉ”์ธ์„ ๋ถ„๋ฆฌํ•˜๊ธฐ๋„ ํ•˜๊ณ  ํ•œ ๊ณ„์ธต์œผ๋กœ ํ•ฉ์น˜๊ธฐ๋„ ํ•œ๋‹ค.
  • ์ƒ์œ„ ๊ณ„์ธต์—์„œ ํ•˜์œ„ ๊ณ„์ธต์œผ๋กœ ์˜์กด๋งŒ ์กด์žฌํ•˜๊ณ  ํ•˜์œ„ ๊ณ„์ธต์€ ์ƒ์œ„ ๊ณ„์ธต์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์‘์šฉ๊ณ„์ธต์ด ๋„๋ฉ”์ธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Infrastructure์— ์˜์กดํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
    • Infrastructure์— ์˜์กดํ•˜๋ฉด ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
    • ๊ธฐ๋Šฅ ํ™•์žฅ์ด ์–ด๋ ต๋‹ค.
    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ DIP๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

DIP(Dependency Injection Principle)

  • Low Abstract Module์ด High Abstract Module์— ์˜์กดํ•˜๋„๋ก ๋ฐ”๊พผ๋‹ค.
  • ์ถ”์ƒํ™”ํ•œ interface์— ์žˆ๋‹ค.
  • High Abstract Module์ด ์ •ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ Low Abstract Module์ด ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ.
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” High Abstract Module ๊ด€์ ์—์„œ ๋„์ถœํ•ด์•ผ ํ•œ๋‹ค.

์ž˜๋ชป๋œ DIP Example

์–ด๋– ํ•œ ์ ์ด ์ž˜๋ชป๋˜์—ˆ์„๊นŒ?

  • CaculateDiscountService๊ฐ€ ์ €์ˆ˜์ค€์œผ๋กœ ์ •์˜๋œ RuleEngine์— ์˜์กด์ ์ด๋‹ค.
  • DIP์˜ ํ•ต์‹ฌ์€ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ
  • ์ด ๊ตฌ์กฐ๋Š” ๋„๋ฉ”์ธ ์˜์—ญ์€ ๊ตฌํ˜„ ๊ธฐ์ˆ ์„ ๋‹ค๋ฃจ๋Š” ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ์˜์—ญ์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค.
    • ์ฆ‰ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค.

๋‹ค์‹œ ์ •์˜ํ•œ DIP Example

  • CaculateDiscountService๋Š” ๋„๋ฉ”์ธ ๊ด€์ ์œผ๋กœ ์žฌ์ •์˜๋œ RuleEngine์— ์˜์กดํ•œ๋‹ค.

๋„๋ฉ”์ธ ์˜์—ญ์˜ ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ

  • Entity
    • ๊ณ ์œ ์˜ ์‹๋ณ„์ž๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด๋กœ ์ž์‹ ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ฐ–๋Š”๋‹ค.
  • Value
    • ๊ณ ์œ ์˜ ์‹๋ณ„์ž๋ฅผ ๊ฐ–๊ธฐ ์•Š๋Š” ๊ฐ์ฒด๋กœ ์ฃผ๋กœ ๊ฐœ๋…์ ์œผ๋กœ ํ•˜๋‚˜์ธ ๋„๋ฉ”์ธ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • Aggregate
    • Entity์™€ Value๋ฅผ ๊ฐœ๋…์ ์œผ๋กœ ํ•˜๋‚˜๋กœ ๋ฌถ์€ ๊ฒƒ์ด๋‹ค.
  • Repository
    • ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ์˜์†์„ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • Domain Service
    • ํŠน์ • ์—”ํ‹ฐํ‹ฐ์— ์†ํ•˜์ง€ ์•Š๋Š” ๋„๋ฉ”์ธ ๋กœ์ง์„ ์ œ๊ณตํ•œ๋‹ค.

Entity์™€ Value

  • ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ Entity๋Š” ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ผ๊ธฐ๋ณด๋‹ค๋Š” ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.
  • Value๋Š” immutable๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ถŒ์žฅํ•œ๋‹ค.

Aggregate

  • ๋„๋ฉ”์ธ์ด ์ปค์งˆ์ˆ˜๋ก Entity์™€ Value๊ฐ€ ๋งŽ์•„์ง€๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ํž˜๋“ค๋‹ค.
  • ๊ด€๋ จ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์€ ๊ฐ์ฒด์ด๋‹ค.
    • ์ฃผ๋ฌธ : ์ฃผ๋ฌธ์ž, ๋ฐฐ์†ก์ง€ ์ •๋ณด, ์ฃผ๋ฌธ ๋ชฉ๋ก, ์ด ๊ฒฐ์ œ ๊ธˆ์•ก
  • ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์ˆจ๊ฒจ์„œ Aggregate ๋‹จ์œ„๋กœ ๊ตฌํ˜„์„ ์บก์Šํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค.

Repository

  • Aggregate ๋‹จ์œ„๋กœ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ๋‹ค.
    • ์ €์žฅํ•˜๋Š” ๋ฉ”์†Œ๋“œ
    • ๋ฃจํŠธ ์‹๋ณ„์ž๋กœ Aggregate๋ฅผ ์กฐํšŒํ•˜๋Š” Method

์š”์ฒญ ์ฒ˜๋ฆฌ ํ๋ฆ„

  • @Transaction
  • ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ํ•„์š”ํ•œ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ Repository์—์„œ ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์‹ ๊ทœ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ Repository์— ์ €์žฅํ•œ๋‹ค.

Infrasturcture

  • ๋ฌด์กฐ๊ฑด Infrasturcture์˜์กด์„ ์—†์• ๋Š” ๊ฒƒ์€ ์ข‹์€ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.
    • @Transaction์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํŽธ๋ฆฌํ•˜๋‹ค.
  • DIP์˜ ์žฅ์ ์„ ํ•ด์น˜์ง€ ์•Š๋Š” ๋ฒ”์œ„์—์„œ ์‘์šฉ ์˜์—ญ๊ณผ ๋„๋ฉ”์ธ ์˜์—ญ์—์„œ ๊ตฌํ˜„ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์˜์กด์„ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•˜๋‹ค.
  • ์˜์กด์„ ์™„์ „ํžˆ ๊ฐ–์ง€ ์•Š๋„๋ก ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์€ ๊ตฌํ˜„์„ ๋” ๋ณต์žกํ•˜๊ณ  ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋“ˆ ๊ตฌ์„ฑ

  • ํ•œ ํŒจํ‚ค์ง€์— ๊ฐ€๋Šฅํ•˜๋ฉด 10๊ฐœ ๋ฏธ๋งŒ์œผ๋กœ ํƒ€์ž… ๊ฐœ์ˆ˜๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•œ๋‹ค.
  • ์ด ๊ฐœ์ˆ˜๊ฐ€ ๋„˜์–ด๊ฐ€๋ฉด ๋ชจ๋“ˆ์„ ๋ถ„๋ฆฌํ•˜๋Š” ์‹œ๋„๋ฅผ ํ•ด๋ณธ๋‹ค.