CQRS Pattern
CQRS
Command Query Responsibility Segregation
์ํํธ์จ์ด ์ํคํ ์ฒ ํจํด ์ค ํ๋
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํธ์์ฉ์ ๋ํ ํจํด
๋ช ๋ น
๊ณผ์กฐํ
์ ์ฑ ์์ ๋ถ๋ฆฌํ๋ ์์น์ ๊ธฐ๋ฐ์ฝ๊ธฐ(Query)์ ์ฐ๊ธฐ(Command) ๋ชจ๋ธ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋ชฉํ
๊ธฐ์กด ์์คํ
๋ฌธ์ ์
์กฐํ์ ๋ช ๋ น์ ํ๋์ ๋ชจ๋ธ์์ ์ฒ๋ฆฌ
๋ฐ์ดํฐ ๊ฒฝํฉ ๋ฐ์
๋ณต์ก๋ ์ฆ๊ฐ
CQRS ์ด์
๋ฐ์ดํฐ์ ๋ณ๊ฒฝ(๋ช ๋ น)๊ณผ ์กฐํ(์ฟผ๋ฆฌ)๋ฅผ ์๋ก ๋ค๋ฅธ ๋ชจ๋ธ๋ก ๋ถ๋ฆฌ ๋ฐ ์ฒ๋ฆฌ
๋ฐ์ดํฐ ๋ณ๊ฒฝ๊ณผ ์กฐํ ๊ฐ์ ์์กด์ฑ ๊ฐ์
์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ํฅ์
๋ณต์กํ ๋๋ฉ์ธ ๋ชจ๋ธ์ด๋ ๋๊ท๋ชจ ์์คํ ์์ ์ ์ฉ
๋จ์ํ ์์คํ ์์๋ ์ค๋ฒ์์ง๋์ด๋ง
CQRS์ ๊ตฌ์ฑ ์์
๋ช
๋ น(Command)
์์คํ ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ์ ์๋ฏธ
๋ช ๋ น ๋ชจ๋ธ์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํ๊ณ , ์ด๋ฒคํธ๋ฅผ ๋ฐ์์์ผ ์ํ ๋ณ๊ฒฝ์ ํต์งํ๋ค.
์ฟผ๋ฆฌ(Query)
์์คํ ์ ์ํ๋ฅผ ์กฐํํ๋ ์์ ์ ์๋ฏธ
์ฟผ๋ฆฌ ๋ชจ๋ธ์ ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์กฐํ
์ด๋ฒคํธ(Event)
์์คํ ์์ ๋ฐ์ํ๋ ์ค์ํ ์ฌ๊ฑด์ด๋ ์ํ ๋ณ๊ฒฝ์ ๋ํ๋
๋ช ๋ น ๋ชจ๋ธ์์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ ์ด๋ฒคํธ๋ก ๊ธฐ๋ก
๋ช
๋ น ํธ๋ค๋ฌ(Command Handler)
๋ช ๋ น์ ์ฒ๋ฆฌํ๋ ๋ก์ง์ ๋ด๋นํ๋ ๊ตฌ์ฑ ์์
๋ช ๋ น์ ๋ฐ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ , ๊ทธ์ ๋ฐ๋ฅธ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํด
์ด๋ฒคํธ ํธ๋ค๋ฌ(Event Handler)
๋ฐ์ํ ์ด๋ฒคํธ์ ๋ํ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ตฌ์ฑ ์์
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ์ด๋ฒคํธ๋ฅผ ์์ ํ์ฌ ์ฟผ๋ฆฌ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธ
๋ช
๋ น๊ณผ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉ, ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ๋ฅผ ๋ค๋ฅธ ๋ชจ๋ธ๋ก ๊ตฌ๋ถ
๋์ ๊ฒฉ๋ฆฌ ์์ค์ ์ํด ์ฐ๊ธฐ, ์ฝ๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ตฌ๋ถ
Code
Last updated