2013년 7월 19일 금요일

CQRS


Command Query Responsibility Segregation
즉, 서비스에서 데이터조작에 관련된 부분과 조회를 분리시키겠다는 것이다.
요즘 자주 고민에 빠지게 만드는 Architecture이다.
국내에서는 작년말쯤부터 관심을 가지는 것 같다. 외국에서는 마틴파울러와 친구들이 주도적으로 얘기들을 이끌어 가고 있는 것 같다.
같이 이야기 되고있는것이 DDD이다. CQRS+DDD 이런 조합이 되면서 아키텍쳐는 좀더 복잡해진다. 개념적으로 충분히 이해를 했는데, 문제는 과연 구현을 어떻게 하는지 도통 감이 안잡힌다. 샘플소스라고 돌아다니긴한데...이걸 믿을 수 있는지, 실제 구현이 된건지도 모르겠다.
뭐 간혹보면 C++로 구현해놨다고 하는데...참 다가가기 힘들었다. 국내 블로거들도 특정 기술에 대한 자기자랑 식의 소개이지, 구체적으로 뭐가 어떻고, 구현을 이런식으로 해야되고 하는 수준은 아닌 것 같다.
 멀티스레드로 데이터 처리하는 것을 Spring+Hibernate로 구현한적이 있는데, 기본세팅으로 소량의 데이터를 다룰때는 문제가 없었는데, 처리량이 많아지니까 문제가 발생해서 Hibernate메뉴얼을 뒤져서 옵션값으로 처리한 기억이있다. 뭘 말하고 싶냐면, 이론과 실제는 많이 다르다는 것이다. 또, 개발을 무리없이 완료한 프로그램이라도 운영에서는 심각한 문제가 있을 수 있다는 것이다.
 CQRS DDD를 프로젝트에 적용해보고 싶은데, 참 쉽지 않은 일인것 같다. 이벤트단위를 나누는 범위에서부터, 이벤트를 동기화시켜 조회에 영향을 안가게 하면서, 트랜잭션이 보장되고, 더불어 CQRS를 하는 목적중의 하나인 퍼포먼스와 확장성을 어떻게 가져올 수 있는지...똑같은 이론을 해외사이트에서 번역해서 소개만하지말고, 핵심적이고, 구체적인 것에대해 논의해야하지 않을까 생각한다. 블로그에서 자랑질하는 건 이제 좀 저렴해보인다.