Spring MVC

springmvc.egloos.com


포토로그


2012/05/10 07:14

그동안 DDD에 대해 너무 잘못 알고 있었다. Domain Driven Design

최근에 'NoSQL'과 하이버네이트, 'JPA'를 공부하면서 느낀 건데… 나름 고심해서 올린 'Domain Driven Design' 전자상거래 구축 소스가 사실상 무용지물에 가깝다는 눈물겨운 사실. 물론 'MyBatis'에서는 무리없이 잘 돌아가는 설계모델이긴 하지만 순수한 엔티티로 데이터베이스를 연계하는 하이버네이트, 'JPA'는 이런 모델로는 구현해낼 수가 없었다.

정말이지 용감하면 무식하다고 하다는 말이 맞는가 보다…. 최근에 들어서야 레포지토리와 엔티티의 개념을 다잡고 코드를 다시 돌아보고 있는데… 이건 뭐 답이 없다. 일단은 필자가 올린 코드의 문제가 뭐냐하면 엔티티에 레포지토리와 로직을 한데 섞어 매우 용감하게 (또는 무식하게) 코딩했다는 점이다. 뭐 사실 필자가 줄곧 이용해왔던 'MyBatis'에서는 애초에 객체를 매핑하여 사용하는데 'Public' 가시성을 가진 클로저만 있으면 호환됬지만 'JPA'와 하이버네이트는 영속성을 중시하는지라 맑고 깨끗한 엔티티만이 사용가능하였다.

그래도 필자가 최초에 추구했던 일체형 도메인 오브젝트가 결코 나쁘다는 것은 아니다. 엔티티와 래핑 도메인이 밀접한 관계를 갖고 있기 때문에 별도의 설명이 없이도 개발자들이 즉시 현장에서 사용할 수 있는 장점이 있었고 엔티티가 단순 휘발성이 아닌 내부 프로퍼티에 할당하여 지속적으로 사용하면서 외부로 노출시키지 않았기 때문에 악의적인 공격이나 개발자들이 접근해서는 안될 주요 정보를 사전에 차단하는 로직 또한 간단한게 구현 가능하였다.

결국 필자가 내린 결론은 최초에 필자가 구현하고자 했던 조금 이상한 DDD가 계속 발전시킬 가치가 있다는 결론이었다. 물론 넘어야할 가시밭길 천지이긴 하지만 잘만 하면 기존의 DDD의 모델을 해치지 않고 구현할 법도 하다. 그나저나 요즘 일이 너무 바빠 글도 자주 못올리는 통에…  혹여나 아랫 글들을 읽고 이게 DDD구나 이해했던 분들이 계시다면 사죄의 말씀을 드리고… 추후에 공개할 'Private DDD'를 기대해 주셨으면 좋겠다.

덧글

댓글 입력 영역