본문 바로가기

.Net Technology/.NET General

닷넷에서 CQRS 적용을 위한 가이드 모음

영국에서 엔터프라이즈 마켓은 대부분 은행권 백오피스 시스템이 주를 이룬다. 너무나 복잡한 도메인 지식들 때문에 보다 효율적 유지보수를 위해서 DDD 기반의 아키텍처를 선호해왔다. 도메인 지식과 코드를 최대한 분리시키지 않고자 하는 것이 그 이유이다. 하지만 DDD의 단점은 DAL위에 Repository가 있고 그 위에 다시금 DDD가 있고 심지어 레거시 코드와 많이 융합된 오래된 시스템은 그 DDD위에 다시 BSL이 있는 것을 많이 보게 된다. BSL이 아니더라도 DDD를 ViewModel Factory같은 녀석으로 감싸야 하는 것이 일반적이다. 


이렇게 다중 레이어들로 계층을 이루게 되다보니 비지니스 로직이 하나 변경되었을때 모든 레이어들이 수정되어야 한다는 무시무시한 단점이 있다. 심지어 여러 코드들이 레퍼런스를 이루고 있다면 정말 그 수정이 헬이 된다. 그래서 순수 DDD에서 무시무시한 변종으로 진화하는 것을 종종 볼 수 있다. 간단한 필드가 추가되어도 마찬가지이다. 이런 비효율을 때문에 마틴 파울러가 소개한 CQRS가 환영받을 수 있을지 모른다. 그래서 영국의 뱅킹뿐만 아니라 많은 회사들의 백엔드 아키텍트들이 다시금 DDD에서 CQRS라는 새로운 아키텍트 모델로 전환하는 파도가 일고 있다.


가장 큰 장점은 복잡한 업무로직에 대한 유지보수가 가장 크며 두번째는 어쨌든 커맨드와 조회를 분리하면서 메모리 캐시나 NoSQL과 같은 데이터베이스를 관리하는데 더 큰 장점이 있다. 아직 제대로 적용해본 적이 없기 때문에 지금상황에서는 뚜렷한 장단점을 설명할 수 없다. 하지만 조만간 샘플 프로젝트를 진행하고 DDD와 비교해서 다시금 조금더 경험적인 포스팅을 이어보도록 하겠다.



닷넷에서 CQRS에 적용에 필요한 친절한 가이드들을 모아봤다.