반응형
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
- H-index
- @Getter
- 정렬
- 전화번호 목록
- @Data
- 프로그래머스
- K번째수
- kubenetes
- 해시
- Java
- 기능개발
- 영속 자료구조
- @Setter
- 코딩 테스트
- 스택/큐
- 고차원 함수
- 알고리즘
- 크론 표현식
- 커링
- 모던 자바 인 액션
- 스프링 스케쥴러
- 완주하지 못한 선수
- @EnableScheduling
- 가장 큰 수
- @configuration
- 검색 기능 확장
- 다리를 지나는 트럭
- 쿠버네티스
- 롬복 어노테이션
- 루씬 인 액션
Archives
- Today
- Total
Today I Learned
[도메인 주도 설계] 14. 모델의 무결성 유지 (2) 본문
728x90
CONTEXT MAP (컨텍스트 맵)
- 서로 다른 CONTEXT를 연결하는 경우 CONTEXT는 서로에게 스며드는 경향이 있다.
- BOUNDED CONTEXT 간에 코드를 재사용하는 것은 피해야하며, 기능과 데이터는 번역 과정을 거쳐 통합해야 한다.
- 보통 컨텍스트의 경계는 팀 조직에 따라 정해지며, 물리적인 사무 공간 역시 컨텍스트 분리에 영향을 미칠 수 있다.
- 현재 진행중인 소프트웨어 모델과 설계의 개념적인 분할을 명확하게 바라볼 수 있도록 BOUNDED CONTEXT을 정의해야 한다.
- 경계가 모호한 모델을 발견했다고해서 전체적인 구조를 재구성하는 작업으로 이어져선 안된다. 분명한 CONTEXT MAP에 이르기까지는 명백하게 드러나는 모순만 변경한다.
- CONTEXT 경계에서의 테스트
- 테스트는 컨텍스트의 경계에 존재하는 번역의 미묘한 차이와 낮은 수준의 의사소통을 보완하는 데 기여한다.
- 통제할 수 없는 모델의 세부사항에 의존할 때 안심할 수 있게 만들어준다.
- CONTEXT MAP의 조직화와 문서화
- BOUNDED CONTEXT의 이름은 해당 BOUNDED CONTEXT에 관해 이야기할 수 있는 것이어야 한다.
- 모든 이들이 경계가 어디에 위치하는지 알아야하며, 어떠한 코드나 환경의 CONTEXT도 인식할 수 있어야 한다.
SHARED KERNEL (공유 커널)
- 공유커널의 목표는 중복을 줄이고 두 하위 시스템 간의 통합을 용이하게 만드는 것이다.
- 모델과 코드 기반 전체를 동기화하는 작업은 높은 비용이 들지만, 선택된 부분집합을 동기화하는 작업은 적은 비용으로 큰 이익을 얻을 수 있다.
- 두 팀 간에 공유하기로 한 도메인 모델 요소, 연관된 코드, 데이터베이스 설계의 부분집합을 명시한다.
- 명시적으로 공유하는 부분은 특별한 상태를 가지며, 다른팀과의 협의 없이는 변경할 수 없다.
CUSTOMER/SUPPLIER DEVELOPMENT TEAM (고객/공급자 개발 팀)
- 기본적으로 상류 컴포넌트와 하류 컴포넌트 간의 의존성은 단방향으로 흐른다.
- 하지만 변경에 대한 거부권이 하류 팀에 있거나 변경 요청 절차가 지나치게 복잡하다면 상류 팀의 개발이 하류 팀에 속박당할 여지가 있다.
- 하류 팀은 상류 팀에서 제공하는 것을 필요로 하지만 상류 팀은 하류 팀의 산출물에 대해서는 책임을 지지 않는다.
- 그러므로 두 팀간에 명확한 고객/공급자 관계를 확립한다. 하류 팀이 상류 팀에 대해 고객 역할을 맡아서 하류 요구사항에 대한 작업과 일정을 협의해야 한다.
- 인수 테스트를 추가해서 지속적인 통합의 일부로 실행한다. 상류 팀은 하류 팀에서 발생할지도 모르는 부수효과에서 자유로워질 수 있다.
CONFORMIST (준수자)
- CONFORMIST는 컴포넌트의 모델을 따르는 하위 모델을 의미한다.
- 상류/하류 관계에서 상류 팀이 하류 팀의 필요성을 충족시킬 충분한 동기를 느낄 수 없다면 하류 팀은 무력해진다.
- 상류 팀에서 제공하는 기능을 포기할 수 없다면, 상류팀의 모델을 준수해서 BOUNDED CONTEXT 간의 번역에 따른 복잡도를 제거할 수 있다.
ANTICORRUPTION LAYER (오류 방지 계층)
- 상호작용을 위해 새로운 시스템의 모델을 기존 모델과 유사하게 만들면 새로운 모델의 의도가 매몰될 수 있다.
- 저수준의 인터페이스를 사용하면 데이터를 표현하고 데이터의 값과 관계를 제약하는 모델의 힘이 사라진다.
- 또한 새로운 시스템의 모델에서는 사용하지 않는 용어를 사용해서 원시 데이터를 해석해야 한다.
- 그러므로 클라이언트 고유의 도메인 모델 측면에서 기능을 제공할 수 있는 격리 계층을 만들어서 두 모델을 상대로 양방향 번역을 수행한다.
- ANTICORRUPTION LAYER는 개념적인 객체와 행위를 하나의 모델과 프로토콜에서 다른 모델과 프로토콜로 변환하기 위한 메커니즘에 해당한다.
- ANTICORRUPTION LAYER의 인터페이스 설계
- 보통 SERVICE의 집합으로 표현되며, 우리 모델 관점에서 응집력 있는 책임을 맡는 여러 개의 SERVICE(혹은 ENTITY)를 사용한다.
- ANTICORRUPTION LAYER의 구현
- 여러 시스템 간의 상호작용에 필요한 통신 및 전송 메커니즘과 FACADE, ADEPTER, 번역기를 조합해서 ANTICORRUPTION LAYER의 설계를 구성할 수 있다.
- FACADE는 하위 시스템에 대한 클라이언트의 접근을 단순화하고 쉽게 하위시스템을 사용할 수 있게 만들어주는 대안 인터페이스이다.
- ADAPTER는 행위를 구현하는 측에서 이해한 것과 다른 프로토콜을 클라이언트에서 사용하게 해주는 래퍼(wrapper)에 해당한다. 즉, 응답이 변환되어 재전송된다.
- 번역기는 개념 객체나 데이터의 실제 변환을 담당한다.
SEPARATE WAYS (각자의 길)
- 요구사항을 철저하게 조사해서 두 기능 간의 관계가 필수적인 것이 아니라면 관계를 끊을 수도 있다.
- 통합의 혜택이 적다면 BOUNDED CONTEXT가 다른 것과 아무런 관계도 맺지 않도록 선언해서 범위 내에서 특화된 해결책을 찾을 수 있다.
OPEN HOST SERVICE (공개 호스트 서비스)
- 하위 시스템 접근과 관련된 프로토콜을 일련의 SERVICE로 정의하고 공개해서 통합을 원하는 모든 시스템에서 사용하도록 할 수 있다.
- 공유 프로토콜은 단순하고 일관되게 유지하며, 특수한 요구사항은 일회성 번역기로 처리한다.
728x90
'도메인 주도 설계' 카테고리의 다른 글
[도메인 주도 설계] 16. 대규모 구조 (1) (0) | 2022.04.28 |
---|---|
[도메인 주도 설계] 15. 디스틸레이션 (0) | 2022.04.22 |
[도메인 주도 설계] 14. 모델의 무결성 유지 (1) (0) | 2022.03.25 |
[도메인 주도 설계] 12. 모델과 디자인 패턴의 연결 (0) | 2022.03.11 |
[도메인 주도 설계] 11. 분석 패턴의 적용 (0) | 2022.03.04 |
Comments