Today I Learned

[도메인 주도 설계] 16. 대규모 구조 (1) 본문

도메인 주도 설계

[도메인 주도 설계] 16. 대규모 구조 (1)

하이라이터 2022. 4. 28. 20:49
728x90
  • MODULE은 관리 가능한 단위로 설계를 나누지만 MODULE이 너무 많아질지도 모른다. 모듈화가 반드시 설계에 균일함을 가져오는 것은 아니다.
  • BOUNDED CONTEXT에 의한 엄격한 분리는 손상과 혼동을 방지하지만 그 자체로 시스템이 전체적으로 보기 쉬워지는 것은 아니다.
  • 디스틸레이션은 CORE DOMAIN에 주의를 집중하고 다른 하위 도메인이 BOUNDED CONTEXT의 보조 역할을 맡도록 도와준다. 하지만 여전히 CORE DOMAIN과의 관계를 이해해야 한다.
  • 큰 시스템에는  전체의 세부사항을 파고들지 않아도 각 부분이 담당하는 역할을 이해할 수 있는 지배적인 원칙이 필요하다.
  • "대규모 구조"는 넓은 시각으로 시스템에 관해 토의하고 이해하게끔 돕는 언어다. 고수준 개념이나 규칙은 전체 시스템에 대한 설계 패턴을 확립한다.


EVOLVING ORDER (발전하는 질서)

  • 개념적인 대규모 구조가 애플리케이션과 함께 발전하게 해서 발전 과정에서 전혀 다른 형식의 구조로도 변화할 수 있게 해야한다.
  • 세부적인 지식을 토대로  내려야 할 세부적인 설계 및 모델과 관련된 의사결정을 과도하게 제약해서는 안된다.
  • 어떤 구조가 모델을 개발하는 데 부자연스러운 제약조건을 강제하지 않고도 시스템을 명확하게 만들도록 해야한다.

SYSTEM METAPHOR (시스템 은유)

  • 소프트웨어 설계는 매우 추상적이고 파악하기 힘든 경향이 있다. 개발자와 사용자 모두 시스템을 이해하고 시스템을 전체적으로 바라보는 시각을 공유할 구체적인 수단이 필요하다.
  • SYSTEM METAPHOR는 객체 패러다임과 조화를 이루는 느슨하고 쉽게 이해할 수 있는 대규모 구조다.
  • 시스템의 구체적인 비유가 팀원들의 사고를 유용한 방향으로 이끈다면 대규모 구조로 채택할 수 있다. 이러한 은유를 중심으로 설계를 구성하고 UBIQUITOUS LANGUAGE로 나타내면 시스템에 관한 의사소통을 촉진하고, 시스템 개발도 이끌 것이다.
  • 그러나 모든 은유는 부정확하므로 지속적으로 은유가 지나치거나 적절하지 못한가를 재점검해야한다.

RESPONSIBILITY  LAYER (책임 계층)

  • 각 개별 객체에 각각의 책임이 할당되어 있다면 가이드라인과 균일함을 잃는다. 큰 모델에 응집력을 부여하려면 책임 할당에 특정 구조를 도입하는 것이 도움이 된다.
  • 모델에 존재하는 개념적 의존성과 도메인의 변화에 적용할 수 있는 광범위한 추상적인 책임을 도출하고 각 도메인 객체의 책임이 한 계층의 책임 안에서 맞아떨어지도록 모델을 리팩터링해야 한다.

  • 예제 - 심화예제 : 해운 시스템의 계층
    • 운송수단에 실린 화물을 언급하지 않고도 운송일정에 관해 논의할 수는 있지만, 운송수단을 언급하지 않고 화물 추적에 관해 이야기하기란 아주 어렵다.
    • 이러한 개념적 의존성에 따라 "운영"과 "기능"이라는 두 계층으로 구분할 수 있다.

    • "운영" 책임
      • 가장 눈에 띄는 운영 객체는 Cargo이다. 회사의 일상 활동 대부분에서 이 객체가 중심을 차지한다. 
    • "기능" 책임
      • 운영활동을 수행하고자 회사에서 활용하는 자원을 반영한다. 예를 들면 Transit Leg(수송 구간)이 있다.
      • 이 예제에서 Customer는 잠재 계층에 속하며, Cargo와 Customer 사이의 연관관계는 한 방향으로만 탐색할 수 있으므로 특정 Customer의 Cargo를 모두 찾는 쿼리가 필요하다.
      • 대개 초기의 두 계층은 있는 그대로의 상황이나 계획에 초점을 맞춘다. 하지만 Router(항로설정기)를 비롯한 다른 여러 구성 요소는 현재 운영상의 현실이나 계획이 아니다. 의사결정을 책임질 새로운 계층이 필요하다.
    • "의사결정 지원" 책임
      • 사용자에게 계획과 의사결정을 위한 도구를 제공하고 특정 의사결정을 자동화할 수 있는 계층이다.
      • 이 모델에서 Transport Leg의 "선호여부" 속성은 "기능"과 무관하며, 의사결정의 방향을 제시하는 정책에 불과하다. 리팩토링이 필요하다.
      • 이제 Transport Leg가 운송 기능이라는 핵심적인 개념에 다가서는 동시에 Route Bias Policy(향로 편중 정책)가 더 명시적으로 드러난다.
    • 이 새로운 모델은 이제 대규모 구조와 매끄럽게 맞아떨어진다.
    • 이 구조가 어떻게 진행 중인 설계에 영향을 주는가?
      • 이제 후속 모델링과 설계 결정은 대규모 구조를 감안해서 이뤄져야 한다.
      • 설계 가능성은 많지만, 큰 규모의 규칙을 따르는 설계 가능성을 선택하도록 해야한다.
728x90
Comments