QUOTE THE DAY
“ μλ¬ μλ νλ‘κ·Έλ¨μ λ§λλ λ°λ λκ°μ§ λ°©λ²μ΄ μλ€. κ·Έλ°λ° μΈλ²μ§Έ κ²λ§ μλνλ€. ”
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 ν¨ν΄μ΄ ν λ ν° λμμ΄ λκΈ°λ₯Ό λ°λΌλ©° μ²μ²ν μ°¨κ·Όμ°¨κ·Ό μ§νν΄λ³΄μμΌκ² λ€.