우리는 시스템에서 도메인과 관련이 적은 기능으로부터 도메인 객체를 분리할 필요가 있다. 도메인의 격리는 도메인 지식을 그와 상관이 없는 기술적인 부분과 혼동하거나, 애플리케이션에서
도메인 지식이 흐려지는 것을 방지할 수 있다.
얼마 전 공부했던 클린 아키텍쳐 또한 layered architecture의 일종으로 볼 수 있으며, 이러한 아키텍쳐의 근본적인 목적은 도메인의 격리이다.
사용자에게 정보를 보여주고 사용자의 명령을 해석하는 일을 책임진다. 우리가 만들 어플리케이션을 백엔드로 한정한다면, 이는 리퀘스트의 첫 진입점인 Controller에 대응될 것이다.
소프트웨어가 수행할 작업을 정의하고 표현력 있는 도메인 객체가 문제를 해결하게 한다. 이 계층에서 책임지는 작업은 업무상 중요하거나 다른 시스템의 응용 계층과 상호작용하는 데 필요한 것들이다.
소프트웨어가 실제로 수행할 작업에 대한 정의는 이 계층에서 이루어지지만, 어떠한 비즈니스 로직이나 도메인 지식도 포함되지 않는다. 이들에 대한 처리는 모두 도메인 계층의 책임이다.
업무 개념과 업무 상황에 관한 정보, 업무 규칙을 표현하는 일을 책임진다. 바로 이 계층에 개발자와 도메인 전문가가 함께 고민한 도메인 지식이 담긴다. 이 계층에서는 업무 상황을 반영하는 상태를 제어하고 사용하며, 그와 같은 상태 저장과 관련된 기술적인 세부사항은
인프라스트럭처에 위임한다. 이 계층은 업무용 소프트웨어의 핵심이다.
위에서 언급한 상위 계층을 지원하는 일반화된 기술적 기능을 제공한다.
스마트 UI는 위에서 설명한 UI 계층에 모든 업무 로직이 담기는 아키텍쳐를 뜻한다. 이러한 아키텍쳐도 그 나름의 장점이 있지만, 이 책에서 설명하는 도메인 주도 설계와는 배타적인
설계 방법이기 때문에 어느 상황에서 이 아키텍쳐를 써도 되는지, 혹은 쓰면 안되는지 알아둘 필요가 있다.
현재 내가 속한 회사는 전형적인 SMART UI 패턴을 따르고 있는 듯 하다. 회사에서 개발을 하면서 많은 불만과 답답함을 느꼈지만 문제를 명확하게 규명하거나 확실한 대안을 찾을 수 없었는데,
이 부분의 글을 읽으면서 현재 처해 있는 문제 상황을 좀 더 정확하게 바라볼 수 있게 된 것 같다.