write side ์ ์ต์ ํ ํต์ฌ์ command ์ event ์ ์ฒ๋ฆฌ๋์ ๊ทน๋ํํ๋ ๊ฒ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก write side ๋ ui ์์ command ๋ฅผ ๋ฐ๊ฑฐ๋ ๋ค๋ฅธ ๋ฐ์ด๋๋ ์ปจํ ์คํธ๋ก๋ถํฐ ๋ฐ์ํ๋ integration ์ด๋ฒคํธ๋ฅผ ์์ ํ ๋ ํน์ ๋ก์ง์ด ์ํ๋๋ค.
messaging infrastructure ๊ฐ ์ต์ํ์ ์ง์ฐ์ผ๋ก command ๋ฐ event message ๋ฅผ ์ ๊ณตํ๊ณ , ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฒ๋ฆฌ๋ ๋ฐ ์๋ ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ์์ค์์ ์ํธ์์ฉ์ด ๋น ๋ฅธ์ง ํ์ธํด์ผ ํ๋ค.
- messaging infrastructure ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ inline ์ผ๋ก command ๋ฅผ ์ ๋ฌํ ์๋ ์๋ค.
- ์คํจ์ ๋ํ ํ๋ ฅ์ฑ (resilience) ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
- ์ผ๋ถ command ๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ค.
- ๋์์ฑ (concurrency) ์ ๋ํด ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
์ด๋ฒคํธ์์ฑ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ค๋ ์ท์ ์ฌ์ฉํ์ฌ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ํ๋ฅผ ๋ก๋ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ค์ผ ์๋ ์๋ค.
์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ๋ก๋ํ ๋ ์ ์ฒด ์ด๋ฒคํธ ์คํธ๋ฆผ์ replay ํ๋ ๋์ , ์ํ์ ์ต์ ์ค๋ ์ท์ ๋ก๋ํ ๋ค์์ ์ค๋ ์ท์ ์ฐ์ ํ ๋ฐ์๋ ์ด๋ฒคํธ๋ง replay ํ๋ค.
์ ๊ธฐ์ ์ผ๋ก ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ์ํ ์ค๋ ์ท์ ๋ง๋๋ ๋งค์ปค๋์ฆ์ ๋์ ํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ธ ์ด๋ฒคํธ์คํ ์ด ์คํค๋ง์ ๋จ์ํจ์ ๊ฐํํ ๋, ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ํ๋ฅผ ๋ก๋ํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ๋น ๋ฅด๋ค.
์ค๋ ์ท์ ์ฌ์ฉํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ๋งค์ฐ ๋ง์ ์์ ์ด๋ฒคํธ๊ฐ ์์ ๋๋ง ์ฑ๋ฅ์ ์ด์ ์ ๊ฐ์ ธ๊ฐ ์ ์๋ค.
์ ๊ทธ๋ฆฌ๊ฑฐํธ์ command handler ์ ๊ฐ๋จํ ๊ตฌํ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๊ฐ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฐ command ์ ๋ํด ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ธ์คํด์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ ๊ฒ์ด๋ค.
๋ง์ ์์ command ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ๊ฒฝ์ฐ, ๋ชจ๋ command ์ ๋ํด ๋ค์ ๋ก๋ํ ๋น์๊ฐ ์๋๋ก ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ธ์คํด์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ํ๊ธฐ๋ก ๊ฒฐ์ ํ ์ ์๋ค.
์์คํ ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ๋จ์ผ ์ธ์คํด์ค๋ง ์๋ ๊ฒฝ์ฐ, ํด๋น ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ ์ฌ๋ฌ ๊ธ๋ผ์ด์ธํธ์์ ์ ์ก๋๋ command ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ ์๋ ์๋ค.
์์คํ ์ด ํ๋ฅผ ํตํด ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ธ์คํด์ค์ command ๋ฅผ ์ ๋ฌํ๋๋ก ์์๋ฅผ ๋ณด์ฅํ๋ฉด ์ ๊ทธ๋ฆฌ๊ฑฐํธ๊ฐ command ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ํ ์ ์๋ค.
๋ํ ํ ๋ฒ์ ํ๋์ command ๋ง CommandHandler ์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ค๋ ๋๋ฅผ Thread Safe ํ๊ฒ ๋ง๋ค ํ์๋ ์๋ค.
command ์ ์ฒ๋ฆฌ๋์ด ํจ์ฌ ๋ ๋์ ์๋๋ฆฌ์ค์์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ์ฌ๋ฌ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ธ์คํด์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํด์ผ ํ ์๋ ์๋ค.
์ฌ๊ธฐ์ ๋์์ฑ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ์ด๋ฒคํธ ์์ฑ๊ณผ versioning ์ ์ฌ์ฉํด์ผ ํ๋ค.
๊ฐ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ธ์คํด์ค์๋ ์ด๋ฒคํธ๋ฅผ ์ ์ฅํ ๋๋ง๋ค ์ ๋ฐ์ดํธ๋๋ ๋ฒ์ ์ด ์์ด์ผ ํ๋ค.
- Optimistic: ์ด๋ฒคํธ ์คํธ๋ฆผ์ ์ต์ ์ด๋ฒคํธ๊ฐ ํ์ฌ ์ธ๋ฉ๋ชจ๋ฆฌ ์ธ์คํด์ค์ ๋์ผํ ๋ฒ์ ์ธ ๊ฒฝ์ฐ, ์ด๋ฒคํธ ์คํธ๋ฆผ์ ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ๋ค.
- Pessimistic: ํ์ฌ ์ธ๋ฉ๋ชจ๋ฆฌ์ ์ธ์คํด์ค ๋ฒ์ ๋ณด๋ค ๋ ํฐ ๋ฒ์ ๋ฒํธ๋ฅผ ๊ฐ์ง ์ด๋ฒคํธ ์คํธ๋ฆผ์ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ๋ก๋ํ๋ค.