반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 알고리즘
- 가장 큰 수
- @Setter
- 기능개발
- 영속 자료구조
- @Data
- 프로그래머스
- kubenetes
- 다리를 지나는 트럭
- 루씬 인 액션
- 해시
- 스택/큐
- 코딩 테스트
- 쿠버네티스
- Java
- 롬복 어노테이션
- 크론 표현식
- 완주하지 못한 선수
- 커링
- 스프링 스케쥴러
- @configuration
- 검색 기능 확장
- H-index
- @EnableScheduling
- 모던 자바 인 액션
- 전화번호 목록
- @Getter
- 고차원 함수
- 정렬
- K번째수
Archives
- Today
- Total
Today I Learned
[도메인 주도 설계] 16. 대규모 구조 (1) 본문
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
'도메인 주도 설계' 카테고리의 다른 글
[도메인 주도 설계] 15. 디스틸레이션 (0) | 2022.04.22 |
---|---|
[도메인 주도 설계] 14. 모델의 무결성 유지 (2) (0) | 2022.04.01 |
[도메인 주도 설계] 14. 모델의 무결성 유지 (1) (0) | 2022.03.25 |
[도메인 주도 설계] 12. 모델과 디자인 패턴의 연결 (0) | 2022.03.11 |
[도메인 주도 설계] 11. 분석 패턴의 적용 (0) | 2022.03.04 |
Comments