[DDD] 대규모 구조

skayjays·2021년 12월 7일
0

DDD

목록 보기
15/16

필요성

  • 큰 시스템에 해당 시스템의 요소를 전체 설계에 걸친 패턴에서의 역할 측면에서 해석하게 할 수 있는 지배적인 원칙이 없다면 개발자들은 나무만 보고 숲을 보지 못한다.
  • 전체의 세부사항을 깊이 파고들지 않고도 전체의 각 부분이 담당하는 역할을 이해할 수 있어야 한다.
  • 대규모 구조는 넓은 시각으로 시스템에 관해 토의하고 이해하게끔 돕는 언어다.
  • 고수준 개념이나 규칙, 또는 둘 모두는 전체 시스템에 대한 설계 패턴을 확립한다.
  • 전체 시스템을 포괄하고 각 부분의 책임을 자세히 알지 못해도 전체적인 관점에서 해당 부분의 위치를 어느 정도 이해하는 데 도움을주는 규칙 또는 규칙과 관계의 패턴을 고안하라.

EVOLVING ORDER

문제점

  • 아무나 설계할 수 있다면 누구도 전체적으로 이해할 수 없는 시스템이 만들어지고 유지보수하기 어렵다.
  • 아키텍쳐가 구조를 속박하게되면 개발자의 권한을 너무 많이 앗아 갈수 있다.
  • 개발자는 그 구조에 맞춰려고 어플리케이션의 수준을 떨어뜨리거나 뒤엎는 식으로 아무런 구조도 없게 만들어 조율이 이뤄지지 않는 개발 과정에서 일어나는 문제가 다시금 초래하게 된다.
  • 설계를 관장하는 규칙이 정말로 상황에 맞아떨어진다면 방해가 되지 않고 실질적으로 도움이 되는 방향으로 개발을 이끌 뿐만 아니라 일관성도 제공할 것이다.

해결

  • 이러한 개념적인 대규모 구조가 애플리케이션과 함께 발전하게 해서 발전 과정에서 전혀 다른 형식의 구조로도 변화할 수 있게 하라.
  • 반드시 세부적인 지식을 토대로 내려야 할 세부적인 설계 및 모델과 관련된 의사결정을 과도하게 제약해서는 안된다.

대규모 구조는 어떤 구조가 모델을 개발하는 데 부자연스러운 제약조건을 강제하지 않고도 시스템을 굉장히 명확하게 만드는 것으로 판명될 때 적용해야 한다.

대규모 구조의 패턴

SYSTEM METAPHOR

특정 프로젝트에 유용한 대규모 구조의 잘 알려진 형태로서 해당 구조의 일반적인 개념을 잘 보여준다.

문제점

  • 소프트웨어 설계는 매우 추상적이고 파악하기 힘든 경향이 있다.
  • 개발자와 사용자가 모두 시스템을 이해하고 시스템을 전체적으로 바라보는 시각을 공유할 구체적인 수단이 필요하다.

해결

  • 어떤 시스템의 구체적인 비유가 나타나 팀원의 상상력을 포착하고 유용한 방향으로 사고를 이끄는 것으로 보인다면 그것을 대규모 구조로 채택하라.
  • 은유를 중심으로 설계를 구성하고 그것을 Ubiquitous language로 흡수하라.
  • System metaphor는 시스템에 관한 의사소통을 촉진하고, 더불어 해당 시스템의 개발도 이끌 것이다.
  • 모든 은유는 부정확하므로 지속적으로 은유가 지나치거나 적절하지 못한가를 체크하고 언제든 버릴 준비를 한다.

RESPONSIBLITY LAYER

필요성

  • 각 개별 객체에 손수 만든 책임이 할당돼 있다면 가이드라인도 없고, 균일함도 없고, 넒은 범위에 걸친 도메인을 동시에 다룰 능력도 없는셈이다.
  • 큰 모델에 응집력을 부여하려면 그러한 책임 할당에 특정 구조를 도입하는 것이 도움이 된다.

RESPONSIBILITY LAYER에 가장 잘 부합하는 계층화 패턴은 RELAXED LAYERED SYSTEM 이라고 하는 계층화의 일종인데, 이것은 한 계층의 구성요소가 바로 아래에 있는 것만이 아니라 모든 하위 계층에 접근하는 것을 허용한다.

해결

  • 모델에 존재하는 개념적 의존성과 도메인의 여러 부분에 대한 다양한 변화율과 변화의 근원을 검토하라.
  • 도메인에서 자연적인 층을 식별하면 그것을 광범위한 추상적 책임으로 간주하라.
  • 이러한 책임은 시스템의 높은 수준에서의 목적과 설계에 관한 이야기를 들려줄 것이다.
  • AGGREGATE, MODULE과 같은 각 도메인 객체의 책임이 한계층의 책임 안에서 말끔히 맞아떨어지도록 모델을 리팩터링하라.

적절한 계층의 선택

  • 스토리 텔링
    • 계층은 도메인의 기본적인 실제 상황과 우선순위를 전해줘야 한다.
  • 개념적 의존성
    • 상위 계층에 있는 개념은 하위 계층을 배경으로 하는 의미를 지녀야 하고 동시에 하위 계층의 개념은 독자적인 의미를 지녀야 한다.
  • CONCEPTUAL CONTOUR

정리

  • 이번 장에서는 대규모 구조에 대한 정의와 이를 구현하기 위한 패턴인 SYSTEM METAPHOR, RESPONSIBLITY LAYER 에 대해서 알아봤다. 읽으면서 이해가 쉽지 않았다. 하지만
    시스템을 이해하기 위해 은유가 필요하다는 부분에는 공감이 많이 되었고 책임 계층을 분리해 도메인의 표현력과 응집력, 의존성을 잘 나눠갈 수 있다는 점에서 시도해봐야겠다.
profile
기초를 탄탄하게

0개의 댓글