Skip to content

Latest commit

ย 

History

History
57 lines (31 loc) ยท 3.63 KB

08. Optimizing the write side.md

File metadata and controls

57 lines (31 loc) ยท 3.63 KB

Optimizing the write side

write side ์˜ ์ตœ์ ํ™” ํ•ต์‹ฌ์€ command ์™€ event ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ write side ๋Š” ui ์—์„œ command ๋ฅผ ๋ฐ›๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐœ์ƒํ•˜๋Š” integration ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ ํŠน์ • ๋กœ์ง์ด ์ˆ˜ํ–‰๋œ๋‹ค.

messaging infrastructure ๊ฐ€ ์ตœ์†Œํ•œ์˜ ์ง€์—ฐ์œผ๋กœ command ๋ฐ event message ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋ฐ ์†๋„ ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ์†Œ์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ๋น ๋ฅธ์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

๋‹ค์Œ์€ message ๊ฐ€ write side ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐฉ์‹์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์ด๋‹ค.

  • messaging infrastructure ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  inline ์œผ๋กœ command ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    • ์‹คํŒจ์— ๋Œ€ํ•œ ํƒ„๋ ฅ์„ฑ (resilience) ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.
  • ์ผ๋ถ€ command ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ๋™์‹œ์„ฑ (concurrency) ์— ๋Œ€ํ•ด ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฒคํŠธ์†Œ์‹ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์Šค๋ƒ…์ƒท์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ์ƒํƒœ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ๋กœ๋“œํ•  ๋•Œ ์ „์ฒด ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์„ replay ํ•˜๋Š” ๋Œ€์‹ , ์ƒํƒœ์˜ ์ตœ์‹  ์Šค๋ƒ…์ƒท์„ ๋กœ๋“œํ•œ ๋‹ค์Œ์— ์Šค๋ƒ…์ƒท์„ ์ฐ์€ ํ›„ ๋ฐœ์ƒ๋œ ์ด๋ฒคํŠธ๋งŒ replay ํ•œ๋‹ค.

์ •๊ธฐ์ ์œผ๋กœ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋ฅผ ์œ„ํ•œ ์Šค๋ƒ…์ƒท์„ ๋งŒ๋“œ๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์„ ๋„์ž…ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์ธ ์ด๋ฒคํŠธ์Šคํ† ์–ด ์Šคํ‚ค๋งˆ์˜ ๋‹จ์ˆœํ•จ์„ ๊ฐํ•œํ•  ๋•Œ, ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ์ƒํƒœ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋งค์šฐ ๋น ๋ฅด๋‹ค.

์Šค๋ƒ…์ƒท์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์— ๋งค์šฐ ๋งŽ์€ ์ˆ˜์˜ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ์„ฑ๋Šฅ์ƒ ์ด์ ์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

Concurrency and aggregates

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์™€ command handler ์˜ ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„์€ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฐ command ์— ๋Œ€ํ•ด ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•  ๊ฒƒ์ด๋‹ค.

๋งŽ์€ ์ˆ˜์˜ command ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ๊ฒฝ์šฐ, ๋ชจ๋“  command ์— ๋Œ€ํ•ด ๋‹ค์‹œ ๋กœ๋“œํ•  ๋นŒ์š”๊ฐ€ ์—†๋„๋ก ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹œ์Šคํ…œ์— ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ์˜ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๋Š” ์—ฌ๋Ÿฌ ๊ธ€๋ผ์ด์–ธํŠธ์—์„œ ์ „์†ก๋˜๋Š” command ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์‹œ์Šคํ…œ์ด ํ๋ฅผ ํ†ตํ•ด ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ธ์Šคํ„ด์Šค์— command ๋ฅผ ์ „๋‹ฌํ•˜๋„๋ก ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋ฉด ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ๊ฐ€ command ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ command ๋งŒ CommandHandler ์— ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์Šค๋ ˆ๋“œ๋ฅผ Thread Safe ํ•˜๊ฒŒ ๋งŒ๋“ค ํ•„์š”๋„ ์—†๋‹ค.

command ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ํ›จ์”ฌ ๋” ๋†’์€ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—์„œ ์—ฌ๋Ÿฌ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ versioning ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๊ฐ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ธ์Šคํ„ด์Šค์—๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ €์žฅํ•  ๋•Œ๋งˆ๋‹ค ์—…๋ฐ์ดํŠธ๋˜๋Š” ๋ฒ„์ „์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ์ธ์Šคํ„ด์Šค์—๊ฒŒ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

  • Optimistic: ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์˜ ์ตœ์‹  ์ด๋ฒคํŠธ๊ฐ€ ํ˜„์žฌ ์ธ๋ฉ”๋ชจ๋ฆฌ ์ธ์Šคํ„ด์Šค์™€ ๋™์ผํ•œ ๋ฒ„์ „์ธ ๊ฒฝ์šฐ, ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์— ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • Pessimistic: ํ˜„์žฌ ์ธ๋ฉ”๋ชจ๋ฆฌ์˜ ์ธ์Šคํ„ด์Šค ๋ฒ„์ „๋ณด๋‹ค ๋” ํฐ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์˜ ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ๋กœ๋“œํ•œ๋‹ค.