CQRS (Command Query Responsibility Segregation)
* CQRS ๋?
๐์ง์ญํ์๋ฉด ๋ช
๋ น๊ณผ ์ฟผ๋ฆฌ์ ์ญํ ์ ๊ตฌ๋ถํ๋ค๋ ๊ฒ์ด๋ค. Create-Insert, Update, Delete ์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ๊ณผ
Select-Read ์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ฒ ๋ ๊ฐ์ง์ ์ฑ
์์ ๋ถ๋ฆฌํ๋ค๋ ๊ฒ์ด๋ค.
* ์ ์ฌ์ฉํ ๊น?
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋(ํน์ ์ฌ์ฉํ๋) ์ ํต์ ์ธ CRUD ์ํคํ
์ณ ๊ธฐ๋ฐ์์ ์์คํ
์ ์ ์ง๋ณด์ํ๋ค ๋ณด๋ฉด, ์ถ๊ฐ์ ์ธ ์๊ตฌ์ฌํญ๊ณผ ์ ์ฑ
์ ๋ณํ๋ค๋ก ์์ฐ์ค๋ฝ๊ฒ ๋ก์ง์์ Domain Model ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๊ฒ ๋๋ค. ์๊ฐ์ด ๊ฐ ์๋ก ์ ์ง๋ณด์ ๋น์ฉ์ ์ ์ง์ ์ผ๋ก ์ฆ๊ฐํ๊ฒ ๋๋ฉฐ ํด๋น ์์คํ
์ ์ฒซ ๊ธฐํ์๋์๋ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋ณ์ง๋๋ ์ผ์ด์ค๋ฅผ ์ข
์ข
๋ณผ ์ ์๋ค. ๊ทธ๋ ๊ฒ ๋ชจ๋ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋ฉฐ ํ์ฅ์ฑ์ ๊ณ ๋ คํ Domain Model ์ ๋ง๋๋ ๊ฑด ๊ต์ฅํ ์ด๋ ค์ด ์ผ์ด ๋์ด๋ฒ๋ ธ๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ ๊ฐ๋ฐ์๋ค์ ๊ณ ๋ฏผํ๊ธฐ ์์ํ๋ค.
๋ฌด์์ด ๋ฌธ์ ์ผ๊น? ์ ๋ฌธ์ ๊ฐ ๋ ๊น?
๊ทธ ์์์ ์ ๋ชจ๋ธ์ ์์๋ค.
์ฌ์ฉ์ ์กฐํ, Admin, ๋์๋ณด๋ ๋ฑ ๋น์ฆ๋์ค ๋ก์ง์ Controller ๋ถํฐ ๋ถ๋ฆฌ๋์ด ์์ง๋ง ํ๋์ Model์ ์ฌ์ฉํ์ฌ ๋ช
๋ น๊ณผ ์กฐํ๋ฅผ ์ํํ๋ค๋ ๊ฒ์ ํ์ธํ๋ค.
์ฌ์ฉ์๊ฐ ๊ฐ๋ช
์ ํ๊ฒ๋์ด ์ด๋ฆ๋ง์ ๋ฐ๊พธ๊ณ ์ถ์ ๋ฟ์ธ๋ฐ Model ์์ฒด๋ฅผ ๋์ ธ๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๊ณ , SumCount ์ ๊ฐ์ ๊ด๋ฆฌ์ฉ ๋ฐ์ดํฐ ๋ฑ์ด ์ค์ ์กฐํ์์๋ ์ฌ์ฉ๋์ง ์์ผ๋ ์ ์ธ๋์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. (์ด๋ฐ ๋ด์ญ์ ๋ค ์์ง ๋ชปํ๋ ํ๋ ๊ฐ๋ฐ์๋ค์ ์คํ๊ฒํฐ ์ฝ๋๊ฐ ๋ ํ๋ก์ ํธ๋ฅผ Legacy ๋ชจ๋๋ก ๋ณํ์์ผ ์ฐจ์ธ๋ ํ๋ก์ ํธ๋ก ์ฌ๊ฐ๋ฐ์ ์งํํ๋ค.)
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ช
๋ น ๋๋ฉ์ธ๊ณผ ์กฐํ ๋๋ฉ์ธ์ ๋ถ๋ฆฌํ๊ฒ ๋๋ค.
*DDD(Domain-driven design) ์ ์์์ผ๋ก ๋ณผ ์ ์์ผ๋, Bounded Context ์์๋ง ์ฌ์ฉ๋์ด์ผ ํ๋ค.
* ์ด๋ป๊ฒ ๊ตฌํํ ๊น?
๋งํด ํ์ธ๋ฌ๋ CQRS๊ฐ ์๋์ ๊ฐ์ ์ํคํ
์ณ ํจํด๊ณผ ๋ฐฉ๋ฒ๋ก ์ ํ์ํ๊ฑฐ๋ ํน์ ํ์๋ก ํ๋ค๊ณ ํ๋ค.
- Event Sourcing
- EagerReadDerivation
- Domain Driven Design
- Eventual Consistency
์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ธฐ์กด ๋ชจ๋ธ ์ํคํ
์ฒ์์ CQRS ํจํด์ด ์ ์ฉ๋๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
CQRS ์ ์ฉ์ ๋ง์ง๋ง ๋จ๊ณ์์ RDBMS์ NoSQL ๊ด๊ณ์์๋ Kafka์ ๊ฐ์ ๋ฉ์์ง ํ๊ฐ ์ ์ฉ๋ ์ ์๋ค.
์ฌ๊ธฐ์ Redis, Elasticsearch ๋ฅผ ๊ณ๋ค์ธ๋ค๋ฉด ์ฑ๋ฅ๋ฉด์์๋ ํ๋ฅญํ ๊ฐ์ ์ด ๋ ๋ฏ ํ๋ค.
๋ง์น๋ฉฐ
CQRS ํจํด์ ์๊ฒ๋ ํ, Toy Project ์์ ๊ตฌํํ ๊ฒฝํ์ด ์๋ค. ์ด ํ๋ก์ ํธ๋ ๊ท๋ชจ๊ฐ ์๊ณ ํตํฉํ
์คํธ์ Cost ๊ฐ Production ๋จ๊ณ์์์ ๋จ์ํ
์คํธ๋ณด๋ค ์๊ธฐ์ ์ผ์ด์ค๊ฐ ์ ์ ๊ด๊ณ๋ก ์์ฝ๊ฒ๋ ๋น์ฅ ํ์ฉ์ ์ด๋ ค์ธ ๊ฒ ๊ฐ์๋ค.
Legacy ์ ์คํ๊ฒํฐ ์ฝ๋๋ก ๊ฐ๋ํ Production ํ๋ก์ ํธ๋ค์ ๊ฐ์ ํ๋ ์์
์งํ์ค์ ๋ฐ๊ฒฌํ์ฌ ์คํฐ๋ํ CQRS ํจํด์ด ํ ๋ ํฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ ์ฒ์ฒํ ์ฐจ๊ทผ์ฐจ๊ทผ ์งํํด๋ณด์์ผ๊ฒ ๋ค.