14 Apr 2019

도메인 주도 설계 00 - 서문

도메인 주도 설계

  • 성공한 프로젝트의 공통적인 특징: 반복적인 설계를 거쳐 발전하고 프로젝트의 일부분이 된 풍부한 도메인 모델이 있다.

  • 복잡성으로 생기는 한계를 극복하려면, 도메인 로직 설계에 진지하게 접근해야 한다.

    • 요구사항에 대한 유연한 대응과 기능 확장은 계속 정제되고 표현되는 도메인 모델을 통해 이룰 수 있다.


도메인 주도 설계 (DDD)의 세가지 특징

  • 도메인 그 자체와 도메인 로직에 초점을 맞춘다.
    • 일반적인 데이터중심의 접근법을 탈피하여 순수한 도메인 모델과 로직에 집중한다.
  • 보편적인(ubiquitous) 언어의 사용이다.
    • 도메인 전문가와 개발자 간의 커뮤니케이션 문제를 없애고, 상호가 이해할 수 있고 모든 문서와 코드에 이르기까지 동일한 표현과 단어로 단일화된 언어체계를 구축해나가는 과정을 말한다.
    • 분석작업과 설계, 그리고 구현에 이르기까지 통일된 방식으로 커뮤니케이션이 가능해진다.
  • 소프트웨어 엔티티와 도메인 컨셉트를 가능한 가장 가까이 일치시키는 것이다.
    • 분석 모델과 설계가 다르고 또 그것과 코드가 다른 구조가 아니라, 도메인 모델부터 코드까지 항상 함께 움직이는 구조의 모델을 지향하는 것이 DDD의 핵심 원리이다.


도메인 로직에 초점을 맞춤으로써 생기는 장점

  • 각기 다른 요구사항에 유연함과 확장 능력을 토대로 대응할 수 있다.
    • 코드 안에 정제되고 표현되는 도메인 모델을 통해 이룰 수 있다.
    • 변경이나 확장이 점점 쉬워지는 구조로 바뀐다.
  • 도메인에 대한 새로운 통찰력을 얻으면서 모델은 깊이가 더해가고 의사소통의 품질도 향상된다.

모델링과 코드의 구현이 단절되어서는 안된다. 이러면 도메인을 분석한 내용이 설계에 반영되지 못하는 결과가 발생한다. 도메인 모델을 프로젝트에서 일어나는 의사소통의 중심에 놓일 때, 팀원들은 공통 언어를 사용하여 의사소통의 품질을 높이고 의사소통의 결과를 코드에 반영할 수 있게 된다.


복잡성이라는 도전과제

  • 얼마나 복잡한 소프트웨어를 만들어 낼 수 있는가를 결정하는 것은 설계 접근법에 있다.

  • 애플리케이션에서 가장 중요한 복잡성은 사용자의 활동이나 업무에 해당하는 도메인 그 자체이다.

    • 프로젝트는 가장 먼저 도메인과 도메인 로직에 집중해야 한다.
    • 복잡한 도메인 설계는 모델을 기반으로 해야 한다.

도메인 모델은 도메인에 대한 깊은 통찰력과 핵심 개념을 반영한다. 가치 있는 모델은 곧바로 나타나지 않으며, 먼저 도메인을 깊이 있기 이해해야 한다.

도메인을 이해하기 위해서는 원시적인 차원의 모델에 기반을 둔 초기 설계 내용을 구현해본 다음, 그 구현을 반복해서 변형하는 과정을 거쳐야 한다. 새로운 통찰력을 얻을 떄마다 모델에 더욱 풍부한 지식을 반영하게 되고, 코드 또한 더 심층적인 모델을 반영하게끔 리팩터링되어 애플리케이션에 적용되어진다. 이러한 리팩터링 과정에서 이따금 심오한 설계의 변화가 쇄도하면서 훨씬 심층적인 모델로 도약하는 기회로 이어지기도 한다.

어떤 설계 요소는 네트워크나 데이터베이스와 같은 기술과 관련이 있지만, 도메인의 복잡성을 제대로 다루지 않으면 기술을 잘 이해하더라도 무용지물이다.


설계 vs. 개발 프로세스

  • 도메인 주도 개발은 애자일 프로세스를 지향한다.
    • 개발은 반복주기를 토대로 진행되어야 한다.
    • 개발자와 도메인 전문가는 밀접한 관계에 있어야 한다.
      • 도메인 주도 설계에서는 도메인에 대한 깊은 통찰력과 핵심 개념을 반영한 모델을 만들어내는데, 이는 도메인 전문가와 개발자의 협업의 결과이다.

도메인 주도 설계에서의 가장 큰 이익은 팀이 합심해서 도메인 주도 설계 접근법을 적용하고 도메인 모델을 의사소통의 중심에 놓을 때 발생한다. 팀원들은 공통 언어를 통해 상호 의사소통의 품질을 높이고, 결과를 소프트웨어에 반영해야 한다.


Tags:
Stats:
0 comments