반응형
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 |
Tags
- 프로그래머스
- 전화번호 목록
- @Setter
- 검색 기능 확장
- 다리를 지나는 트럭
- 모던 자바 인 액션
- @Getter
- 쿠버네티스
- 크론 표현식
- 스프링 스케쥴러
- Java
- 기능개발
- 루씬 인 액션
- 커링
- 롬복 어노테이션
- kubenetes
- @Data
- 완주하지 못한 선수
- @EnableScheduling
- 해시
- 영속 자료구조
- 가장 큰 수
- K번째수
- H-index
- 스택/큐
- 알고리즘
- @configuration
- 정렬
- 코딩 테스트
- 고차원 함수
Archives
- Today
- Total
Today I Learned
[도메인 주도 설계] 14. 모델의 무결성 유지 (1) 본문
728x90
- 모델의 근본적인 요구사항은 모델의 각 용어가 모호하지 않고 모순되는 규칙이 없으며 내적 일관성 유지하는 것이고 이를 단일화라 한다.
- 하지만 대규모 시스템의 도메인 모델을 완전하게 단일화한다는 것은 타당하지 않거나 비용 대비 효과적이지 않다.
- 단일 모델로 통합하고자 할때는 다음과 같은 위험요소를 고려해야 한다.
- 한번에 지나치게 많은 레거시를 교체해야 할 수 있다.
- 능력이 비해 조율에 드는 비용이 너무 클 수 있다.
- 특화된 요구사항을 완전하게 충족하지 못해 애플리케이션의 행위를 다른 곳에 둘 수 밖에 없을 수 있다.
- 모델이 지나치게 복잡해져 사용하기 어려워질 수 있다.
- 단일화된 모델을 유지하기 어렵다면, 모델 간의 경계와 관계를 표현해 줄 수단이 필요하다.
BOUNDED CONTEXT(제한된 컨텍스트)
- 다수의 모델 탓에 발생하는 문제를 해결하려면 모델이 적용되는 컨텍스트를 명시적으로 정의해야 한다.
- 컨텍스트의 경계를 팀 조직, 애플리케이션의 특정 부분에서의 사용법, 코드 기반의 데이터베이스 스키마와 같은 물리적 형태의 관점에서 명시적으로 설정해야 한다.
- 이 경계 내에서는 모델을 일관된 상태로 유지하고 경계 바깥의 이슈 때문에 초점이 흐려져서는 안된다.
- BOUNDED CONTEXT는 팀 구성원이 어떤 부분에서 일관성을 지녀야하고 다른 CONTEXT와 어떤 식으로 관련되어 있는 가를 명확하게 이해할 수 있게 특정 모델의 적용범위를 제한한다.
- 예제 - 예약 컨텍스트
- A팀은 예약 애플리케이션을 작업중이다. A팀은 모델 객체를 수정하지는 않겠지만 애플리케이션에서는 그와같은 객체를 보여주고 조작해야 한다. 모델은 애플리케이션 내에서 유효하므로 예약 애플리케이션은 구획 내에 존재한다고 볼 수 있다.
- 예약이 완료되면 해당 예약 내역은 레거시 화물추적 시스템으로 전달돼야 한다. 새로운 모델은 레거시 모델과 구분하기로 결정했으므로 레거시 화물추적 시스템은 구획 밖에 존재한다.
- 새로운 모델과 레거시 사이에 필요한 번역은 레거시 유지보수 팀의 몫이며, 번역 메커니즘은 모델에 의해 주도되지 않는다. 번역은 CONTEXT 밖에 있으며, 레거시 팀에서는 모델을 사용하기 위해 요청하는 것이 불가능하다.
- B팀은 화물선 운항일정을 관리하는 모델과 애플리케이션을 개발 중이다. A팀과 B팀의 목표는 하나의 단일화된 시스템을 만들어내는 것이지만, 동일한 BOUNDED CONTEXT 내에서 일하고 있는건 아니다. 따라서 코드를 공유하는 것은 위험하다.
- 문제가 일어나지 않게 하려면 두 팀은 정보를 공유했을 때 발생하는 비용과 이득의 타협점을 결정하고 정보 공유가 잘 될 수 있게 프로세스를 정립할 필요가 있다.
- BOUNDED CONTEXT 안의 팀은 명확함을 얻고, 밖의 팀은 자유로움을 얻는다.
- BOUNDED CONTEXT 안의 균열 인식
- 뚜렷이 구분되는 모델 요소를 결합할 경우, 중복된 개념과 허위동족 언어 문제가 발생할 수 있다.
- 중복된 개념은 실제로 같은 개념을 나타내는 두 개의 모델 요소가 존재하는 것이다. 개념은 동일하지만 서로 다른 규칙을 따르고 데이터까지 다른 두 버전의 객체가 존재하게 된다.
- 허위 동족 언어는 같은 용어를 사용하는 두사람이 서로 같은 것을 이야기하고 있다고 생각하지만 실제로는 그렇지 않은 경우를 말한다. 이 때문에 개발팀은 서로의 코드를 침범하게 되고, 데이터베이스에 이상한 불일치가 생기고, 팀 내 의사소통이 혼란스러워 질 수 있다.
CONTINUOUS INTEGRATION
- CONTINUOUS INTEGRATION은 내부적으로 균열이 발생할 때 이를 빠르게 포작하고 정정할 수 있을 정도로 컨텍스트 내의 모든 작업을 빈번하게 병합해서 일관성을 유지하는 것을 의미한다.
- 개념은 팀 구성원 간의 부단한 의사소통을 토대로 통합되며, 팀은 끊임없이 변화하는 모델을 함께 이해하고 이를 발전시켜야 한다.
- 통한을 위한 가장 효과적인 프로세스에는 공통적으로 다음과 같은 특징이 있다.
- 단계적이고 재생 가능한 병합/빌드 기법
- 자동화된 테스트 스위트
- 수정사항이 통합되지 않은 상태로 존재할 수 있는 시간을 적당히 짧게 유지하는 규칙
- 또한 모델과 애플리케이션에 관해 논의할 때 UBIQUTOUS LANGUAGE를 지속적으로 사용하는 것이 개념적인 통합에 도움이 된다.
728x90
'도메인 주도 설계' 카테고리의 다른 글
[도메인 주도 설계] 15. 디스틸레이션 (0) | 2022.04.22 |
---|---|
[도메인 주도 설계] 14. 모델의 무결성 유지 (2) (0) | 2022.04.01 |
[도메인 주도 설계] 12. 모델과 디자인 패턴의 연결 (0) | 2022.03.11 |
[도메인 주도 설계] 11. 분석 패턴의 적용 (0) | 2022.03.04 |
[도메인 주도 설계] 10. 유연한 설계 (3) (0) | 2022.02.25 |
Comments