Skip to content

Latest commit

ย 

History

History
82 lines (48 loc) ยท 6.38 KB

File metadata and controls

82 lines (48 loc) ยท 6.38 KB

Business Logic Organization Patterns

1.ย Transaction Script Pattern

๊ฐ์ฒด์ง€ํ–ฅ์„ ์ข‹์•„ํ•˜๋”๋ผ๋„ ๊ฐœ๋ฐœํ•  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋„ˆ๋ฌด ๋‹จ์ˆœํ•œ ๊ฒฝ์šฐ ๊ฐ์ฒด์ง€ํ–ฅ ์ ‘๊ทผ์€ ๊ณผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ **์ ˆ์ฐจ์ ์ธ ์ฝ”๋“œ(procedural code)**๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

๋งˆํ‹ดํŒŒ์šธ๋Ÿฌ๋Š” ์ด๋ฅผ Transaction Script Pattern์ด๋ผ๊ณ  ๋ถˆ๋ €๋‹ค.

์ด ๋ฐฉ๋ฒ•์—์„œ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, presentation tier์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด transaction script(OrderService์˜ createOrder, reviseOrder, cancelOrder ๋“ฑ)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

์ด ์ ‘๊ทผ๋ฒ•์˜ ์ค‘์š”ํ•œ ํŠน์„ฑ์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ–‰์œ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค(OrderService)๊ฐ€ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค(Order)์™€ ๋ถ„๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณดํ†ต Service ํด๋ž˜์Šค(OrderService)์— ์œ„์น˜ํ•œ๋‹ค. Service๋Š” ํ•˜๋‚˜์˜ ์š”์ฒญ๊ณผ ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ ํ–‰์œ„์— ๋Œ€ํ•ด์„œ ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ๊ฐ์ฒด(Order)๋Š” ํ–‰์œ„๊ฐ€ ์—†๊ฑฐ๋‚˜ ๊ฑฐ์˜ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.

์ด ์ ‘๊ทผ๋ฒ•์€ ๊ฐ„๋‹จํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋Š” ์ž˜ ๋™์ž‘ํ•œ๋‹ค. ๋‹จ์ ์€ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

2. Domain Model Pattern

Transaction Script Pattern์ด ๋‹จ์ˆœํ•˜์—ฌ ๋งค์šฐ ๋งค๋ ฅ์ ์ด์ง€๋งŒ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ณต์žกํ•ด์ง€๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์•…๋ชฝ์ด ๋œ๋‹ค.

์˜ค๋žœ ๊ธฐ๊ฐ„ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•ด ๋ณธ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋ณ€๊ฒฝ ์š”๊ตฌ๋Š” ๋Œ€๋ถ€๋ถ„ ๊ธฐ๋Šฅ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์— ๊ธฐ์ธํ•œ๋‹ค๋Š” ์ ์— ๊ณต๊ฐํ•  ๊ฒƒ์ด๋‹ค. Transaction Script Pattern์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๊ฐ€ ํ–‰์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์•„์„œ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์ƒ๊ธฐ๋ฉด ํ–‰์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ์‹ฌ์ง€์–ด ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ์ฝ”๋“œ๊ฐ€ ์„œ๋น„์Šค ํด๋ž˜์Šค ์™ธ์— ์—ฌ๋Ÿฌ๊ณณ์— ์กด์žฌํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๋Š” ๋” ์‹ฌ๊ฐํ•ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ์šด์˜๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์บก์Аํ™”ํ•˜๊ณ  ๊ธฐ๋Šฅ๋งŒ ์™ธ๋ถ€์— ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์ด์—ฌ์•ผ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์ƒ๊ฒจ๋„ ์™ธ๋ถ€์˜ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

Monolithic Application์ด ์ง€์†์ ์œผ๋กœ ์ปค์ง€๋Š” ์Šต์„ฑ์ด ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด Transaction Script๋„ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ ๊ทน๋„๋กœ ๋‹จ์ˆœํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ ˆ์ฐจ์  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” Transaction Script์˜ ์œ ํ˜น์„ ์ด๊ฒจ๋‚ด๊ณ  Domain Model Pattern์„ ์ ์šฉํ•˜์—ฌ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ๊ฐœ๋ฐœํ•ด์•ผ ํ•œ๋‹ค.

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

Transaction Script์™€ ๋™์ผํ•˜๊ฒŒ OrderService๋Š” ๊ฐ ์š”์ฒญ๊ณผ ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ ํ–‰์œ„์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ–๋Š”๋‹ค. Domain Model Pattern์—์„œ Service ๋ฉ”์†Œ๋“œ๋Š” ๋Œ€๊ฐœ ๋‹จ์ˆœํ•œ๋‹ค. Service ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•ญ์ƒ ๋„๋ฉ”์ธ ๊ฐ์ฒด์—๊ฒŒ ์œ„์ž„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋„๋ฉ”์ธ ๊ฐ์ฒด๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๋Œ€๋ถ€๋ถ„์„ ๊ฐ–๋Š”๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด Service ๋ฉ”์†Œ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋“ค์„ ๋กœ๋”ฉํ•˜๊ณ  ๋„๋ฉ”์ธ ๊ฐ์ฒด๋“ค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

์ด ์˜ˆ์˜ ๊ฒฝ์šฐ Order ํด๋ž˜์Šค๋Š” ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์‹ฌ์ง€์–ด ์ƒํƒœ๋Š” private์ด์—ฌ์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ„์ ‘์ ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ์„ค๊ณ„ ๋ฐฉ์‹์˜ ์žฅ์ 

  • ์„ค๊ณ„๊ฐ€ ์ดํ•ด, ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๋‹ค.
    • ๋ชจ๋“  ์ผ์„ ํ•˜๋Š” ํ•˜๋‚˜์˜ ํฐ ํด๋ž˜์Šค ๋Œ€์‹  ์ ์€ ๊ฐฏ์ˆ˜์˜ ์ฑ…์ž„์„ ๊ฐ–๋Š” ๋‹ค์ˆ˜์˜ ์ž‘์€ ํด๋ž˜์Šค๋“ค๋กœ ์ด๋ค„์ง„๋‹ค.
  • ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๋‹ค.
    • ๊ฐ ํด๋ž˜์Šค๋“ค์€ ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ํ™•์žฅํ•˜๊ธฐ ์‰ฝ๋‹ค.
    • strategy pattern, template pattern ๋“ฑ๊ณผ ๊ฐ™์ด ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž˜ ์•Œ๋ ค์ง„ ๋””์ž์ธ ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Domain Model Pattern์€ ์ž˜ ๋™์ž‘ํ•˜์ง€๋งŒ ๋ช‡๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ๊ฐ–๋Š”๋‹ค. ํŠนํžˆ MSA์—์„œ...

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ํ•˜๊ธฐ ์œ„ํ•ด DDD๋กœ ์•Œ๋ ค์ง„ OOD์˜ ์ •์ œ(refinement)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

3. DDD

3.1 DDD ์†Œ๊ฐœ

DDD๋Š” OOD์˜ ์ •์ œ๋กœ์จ ๋ณต์žกํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐœ๋ฐœํ•˜๋Š” ์ ‘๊ทผ๋ฒ•์ด๋‹ค. DDD์˜ Subdomain์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„œ๋น„์Šค๋“ค๋กœ ๋ถ„ํ•ดํ•˜๋Š”๋ฐ ์œ ์šฉํ•œ ๊ฐœ๋…์ด๋‹ค. DDD์—์„œ ๊ฐ ์„œ๋น„์Šค๋Š” ์ž์‹ ๋งŒ์˜ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ฐ–๋Š”๋‹ค. ์ด๋กœ ์ธํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋‹จ์ผ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ฐ€์ง์œผ๋กœ์จ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. Subdomain๊ณผ ๊ด€๋ จ๋œ ๊ฐœ๋…์ธ Bounded Context๋Š” DDD์˜ 2๊ฐœ์˜ Strategic Pattern์ด๋‹ค.

DDD๋Š” ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ๋นŒ๋”ฉ๋ธ”๋ก(building block)์ธ Tactical Pattern๋„ ๊ฐ–๋Š”๋‹ค.

  • Entity
  • Value Object
  • Factory
  • Repository
  • Service

๋“ฑ์ด ์กด์žฌํ•œ๋‹ค.

3.2 DDD Aggregate

food2go๋ผ๋Š” ์Œ์‹ ๋ฐฐ๋‹ฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜ˆ๋กœ ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ชจ๋ธ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋„๋ฉ”์ธ ๋ชจ๋ธ์—์„œ ๊ฐ ์—…๋ฌด ๊ฐ์ฒด(business object)์˜ ๋ช…์‹œ์  ๊ฒฝ๊ณ„(explicit boundary)๊ฐ€ ์—†๊ณ , ๊ฒฝ๊ณ„๊ฐ€ ์—†๋Š” ๊ฒƒ์€ ๊ฐ€๋” ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ๋‹ค. ํŠนํžˆ MSA์—์„œ...

3.2.1 ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒฝ๊ณ„์˜ ๋ฌธ์ œ์ 

Order๋ฅผ loadํ•˜๋Š” ์˜คํผ๋ ˆ์ด์…˜์„ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ด๊ฒŒ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์ •ํ™•ํžˆ ๋ฌด์—‡์ผ๊นŒ ? Order ๊ฐ์ฒด๋ฅผ loadํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์‹ค์€ Order๋ฅผ loadํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ Order ์ž์ฒด๋งŒ์„ loadํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•˜๋‹ค. OrderLineItem, PaymentInfo, DeliveryInfo ๋“ฑ๋„ ์กด์žฌํ•œ๋‹ค. ๋„๋ฉ”์ธ ๊ฐ์ฒด์˜ ๊ฒฝ๊ณ„์— ๋Œ€ํ•œ ์ •์˜๊ฐ€ ๊ฐœ๋ฐœ์ž์˜ ์ง๊ฐ์— ๋‚จ๊ฒจ์กŒ๋‹ค. ๋ช…์‹œ์  ๊ฒฝ๊ณ„์˜ ๋ถ€์žฌ๋Š” ๊ฐœ๋…์  ๋ชจํ˜ธํ•จ ์™ธ์—๋„ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ์ฒด๋ฅผ ๊ฐฑ์‹ ํ•  ๋•Œ๋„ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ์ฒด๋Š” ํ•ญ์ƒ ์ง€์ผœ์•ผ๋งŒ ํ•˜๋Š” ์—…๋ฌด ๊ทœ์น™์ธ ๋ถˆ๋ณ€๋ฅ (invariants)์„ ๊ฐ–๋Š”๋‹ค. ์˜ˆ. ์ตœ์ € ์ฃผ๋ฌธ์•ก.