도메인 주도 설계 - 16. 대규모 구조

백근영·2020년 2월 26일
0
post-thumbnail

큰 시스템에 해당 시스템의 요소를 전체 설계에 걸친 패턴에서의 역할 측면에서 해석하게 할 수 있는 지배적인 원칙이 없다면 개발자들은 나무만 보고 숲을 보지 못한다. 우리는 전체의 세부사항을 깊이 파고들지 않고도 전체의 각 부분이 담당하는 역할을 이해할 수 있어야 한다.

EVOLVING ORDER (발전하는 질서)

규모가 큰 시스템을 다룰 때는 아키텍쳐를 대하는 자세를 달리해야 한다. 대규모 구조를 사전에 부과하는 것은 많은 비용을 초래할 가능성이 높다. 미리 정해진 구조적인 제약 때문에 개발자들은 어쩔 수 없이 애플리케이션의 수준을 떨어뜨리는 선택을 할 수 있으며, 그렇지 않다고 해도 전체 애플리케이션 구조를 뒤엎는 식으로는 유의미한 발전을 이룰 수 없다.

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

SYSTEM METAPHOR (시스템 은유)

은유는 비유하고자 하는 대상의 본질을 깨닫는 데 도움을 준다. 대규모 구조에서는 개발자들이 전체를 조망하기가 힘들기 때문에 프로젝트가 본질적으로 나아가야 할 방향을 쉽게 알 수 있을 만한 수단이 필요하다. 시스템에 대한 METAPHOR는 때때로 시스템의 본질에 대한 시각을 제공해 원활한 의사소통과 개발을 촉진할 것이다.

RESPONSIBILITY LAYER

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

'운영' 책임 계층

과거, 현재, 미래의 회사 활동은 운영 계층에 모인다. 애플리케이션의 일상적인 활동 대부분에서는 이 계층의 객체가 중심을 차지하게 된다.

'기능' 책임 계층

이 계층은 운영활동을 수행하고자 회사에서 활용하는 자원을 반영한다.

'의사결정 지원' 책임 계층

이 계층은 사용자에게 계획과 의사결정을 위한 도구를 제공하고, 잠재적으로 특정 의사결정을 자동화할 수도 있다. SPECIFICATION을 사용해 적절한 의사결정을 주도하는 객체나 POLICY 객체 등이 이 계층에 들어갈 만 하다.

profile
서울대학교 컴퓨터공학부 github.com/BaekGeunYoung

0개의 댓글