Spring MVC

springmvc.egloos.com


포토로그 마이가든


에릭 에반스가 말하는 DDD(Domain Driven Design)

전 세계 DDD(Domain Driven Design) 그룹을 이끌고 있는 에릭 에반스가 4년의 퇴고 끝에 출판한 도메인 주도 설계에는 마틴 파울러의 다음과 같은 추천사가 담겨 있다.

에릭 에반스는 도메인 모델을 잘 만들어 낼 수 있는 몇 안 되는 사람 중 하나다. 난 이 사실을 에릭과 함께 일하면서 알게 됐는데, 이때가 바로 자신보다 실력이 더 뛰어난 고객을 만나는 것과 같은 멋진 순간이었던 것으로 기억한다. 우리가 함께 일했던 시간은 짧았지만 더할 나위 없이 즐거운 시간이었다. 그 이후로도 우린 계속 연락하며 지냈고, 그래서 난 이 책이 서서히 제 모습을 갖춰가는 과정을 지켜 볼 수 있었다.

기다릴 가치가 충분히 있었다.

도메인 주도 설계란 우리가 지켜야할 많은 원칙들을 성립가능하게 도와주며 개발자의 코드가 많은 시간이 지나도 레거시로 전락하지 않게끔 도와준다. 더불어 개발자와 기획자, 그리고 사용자 간의 원할한 의사소통을 도와주면서 코드를 보다 직관적이고 누구나 이해하기 쉽도록 만들어 낸다. 이러한 도메인 주도 설계의 장점에 대해서 꼭 들어맞는 마틴 파울러의 명언이 하나있다.

"컴퓨터가 이해하는 프로그래밍은 누구나 할 수 있지만 사람이 이해할 수 있는 프로그래밍은 아무나 할 수 없다"

DDD는 아키텍트를 넘어 하나의 언어적인 가치를 띄는 패러다임이며 많은 소프트웨어 엔지니어들이 정복하지 못했던 객체지향적 설계를 담담히 그려나가고 있다.


왜 "Domain Driven Design"인가?

사실 현대의 'MVC 아키텍트'만 가지고도 충분히 좋은 소프트웨어를 만들어 낼 수 있다. 지금까지 많은 소프트웨어가 'DDD'의 설계법으로 접근하지 않았음에도 훌륭한 소프트웨어를 만들어 내었으며 이런 명백한 사실에 근거하여 많은 개발자들이 굳이 'DDD'를 해야 하는지 의문을 품고 자신의 코드를 전환하길 꺼려한다.

물론 위와같은 논리는 어느 정도 타당한 이유라 할 수 있겠다. 이미 'MVC'로 좋은 소프트웨어를 제작할 수 있고 자신과 협업하는 팀원들이 'MVC'로 작업하길 원하는데 혼자 억지를 부리며 'DDD'로 전환하자고 소란을 피워서는 안되지 않은가. 게다가 제대로 설계되지 못한 도메인 주도 설계는 오히려 큰 화(속도가 크게 격감하거나 제대로된 관계 매핑을 하지 않아 이해가 더욱 어려워지는…)를 부를 수도 있고 함께 협업하는 팀원들이 공통된 아이덴티티를 공유하지 않는다면 삼천포로 빠질 가능성이 크다.

그렇다면 왜 "Domain Driven Design"인가? 이유는 간단하다. 현대의 많은 소프트웨어들이 'MVC' 아키텍트를 활용하여 개발함에 따라 공통적으로 발생했던 중대한 문제 때문이었다. 'MVC'는 계층을 효과적으로 분리해내고 역할 간의 협업을 쉽게 해주어 개발의 속도를 비약적으로 향상시켜 주었지만 소프트웨어의 개발이 완료됨과 동시에 기존의 코드를 레거시화(재사용이 불가능한 낡은 코드)시켜버렸다.

많은 개발자들은 공감할 것이다. 기존의 'MVC' 아키텍트로 작성된 코드들은 기능을 향상시키거나 변경하는데 꽤나 까다로운 과정을 거쳐야 한다는 것을 말이다. 테이블에 컬럼이 하나 추가되거나 비교적 간단한 수행연산만 하더라도 코드의 가독성이 너무 떨어지고 추가해줘야할 코드가 너무 많은 탓에 (검증과정에서부터 Model - Controller - View 를 전부 수정해야 한다…) 참 손을 대기가 겁난다.

에릭 에반스는 일찍부터 이런 재사용 불가능한 레거시 코드의 문제의 심각성을 깨닫고 이를 미연에 방지할 수 있는 아키텍트를 완성하고자 노력하였다. 에릭 에반스가 제창하는 'DDD'의 목표는 제법 원대한데, 1년이 지나도 10년이 지나도 계속적으로 재사용될 수 있는 코드를 추구하는 것이다.

참 어찌보면 황당할 수도 있겠지만 도메인 주도 설계의 원리를 파악하고 나면 결코 막연한 것이 아니다. 실제로 스프링 프레임워크는 'DDD'의 설계원칙을 정말 잘 지켜내며 만들었는데, 2년 전에 작성되었던 클래스를 근래에 작성되는 코드가 일절 변경없이 상속하여 확장하는 경우가 비일비재하다.

아직까지 로우레벨 기술이 안정화되지 못한 상황에서 사실 'DDD'는 개발자의 욕심이라고 할 수 있다. 그리고 국내의 'SI' 풍토에서 재사용 가능한 코드는 괜한 밥줄 끊어먹는 소리에 개발기간 연장하겠다는 소리인데 윗선에서 들으면 모가지 날라가는 소리 아니겠는가. 현실을 감안하여 어디까지나 개발자 스스로가 소프트웨어의 완성도를 높이고 지속적으로 발전가능한 상태를 추구한다는 가정하에 'DDD'는 필연적으로 선택되어야할 과제이다.

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

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

<HTML />

그동안 서두가 너무 길었으니 이제부터 본격적으로 HTML 포스트를 시작해보자. 글을 시작하기에 앞서 독자에게 하고 싶은 말이 하나 있는데 이 문서는 HTML에 대해 조금 진지하고 심도있게 다루고 있으니 빠른 해결을 원한다면 굳이 이 문서를 읽을 필요는 없다. 다만 HTML에 대해 조금 깊이 알고 싶고 훌륭하게 조합하여 사용하고 싶다면 이 문서는 독자에게... » 내용보기

디자이너들이 맥으로 디자인하는 하는 이유

최근에 맥을 이용해 디자인을 하기 시작하면서 깨달은 사실인데… 확실히 윈도우로 디자인하는 것보다 맥을 이용해 디자인하는 것이 전체적으로 더욱 빠르고 뛰어난 결과물을 낸다는 것이다. 뛰어난 결과물이라는 것이 어찌보면 너무 보편적인 결론인지는 몰라도 양쪽 모두를 사용해 개발해본 바로는 디자인에 있어서 맥이 가지는 장점은 윈도우와 비교할 수 없을 만큼 어마어... » 내용보기

웹에서 디자인이 사라지고 있다!

간만에 글을 쓰기는 하는데 별다른 지식은 없고 그냥 푸념이다. 여하튼 요즘들어 드는 생각이… 디자이너란 직업자체가 점점 무의미해 지는 듯 하면서도, 또 어찌보면 점차 그 역할이 확대되고 있다는 생각이 든다. 하고보니 좀 이상한 말이긴 한데 사실 대한민국은 아직 웹디자인에 대한 과도기적인 상황인지라 이런 생각이 조금 위험할 수도 있겠지만 실제로 산업현장을... » 내용보기