도메인 주도 설계 첫걸음 - 13장 실무에서의 도메인 주도 설계
범위
[Part 3] 도메인 주도 설계 적용 실무 - 13장: 실무에서의 도메인 주도 설계
개념 정리
책에서 기억하고 싶은 내용
전략적 분석
비즈니스 도메인 이해하기
- 조직의 비즈니스 도메인은 무엇인가?
- 고객은 누구인가?
- 조직이 고객에게 제공하는 서비스 또는 가치는 무엇인가?
현재 설계 탐색
- 컴포넌트의 특성 중 수명주기를 분리할 수 있는지 찾아라.
- 하위 시스템이 같은 소스 관리 저장소(하나의 레파지토리)에서 관리되거나 모든 컴포넌트가 하나의 모놀리식 코드베이스에 있는 경우에도 어느 것이 다른 컴포넌트와 독립적으로 개선되고 테스트되고 배포될 수 있는 지 확인하라.
현대화 전략
- 최소한 논리적 경계(기술 스택에 따라 네임스레이스, 모듈, 패키지)가 하위 도메인의 경계와 일치하는지 확인하는 것부터 시작하자.
전략적 현대화
- 논리적 경계를 물리적 경계로 전환하여 가장 많은 가치를 얻을 수 있는 곳을 찾아라.
- 논리적 경계를 물리적 경계로 바꿔 바운디드 컨첵스트를 추출하는 과정
- 여러 팀이 동일한 코드베이스에서 작업하고 있는가? 그렇다면 각 팀에 대한 바운디드 컨텍스트를 정의하여 개발 수명주기를 분리하라.
- 서로 다른 컴포넌트에서 충돌하는 모델을 사용하고 있는가? 그렇다면 충동하는 모델을 별도의 바운디드 컨텍스트로 재배치하라.
- 필요한 최소 바운디드 컨텍스트가 있으면 이들간 관계와 연동 패턴을 조사하라.
- 서로다른 바운디드 컨텍스트에서 작업하는 팀이 어떻게 의사소통하고 협업하는지 확인하라.
- 컨텍스트 통합 패턴이 해결할 수 있는 문제에 주목하라.
- 사용자-제공자 관계
- 충돌 방지 계층
- 오픈 호스트 서비스
- 분리형 노선
전술적 현대화
- 무엇보다도 먼저 전술적 관점에서 비즈니스 가치와 구현 전략에서 가장 ‘고통스러운’ 부조화를 찾아내야 한다.
유비쿼터스 언어 육성
- 도메인 주도 설계의 유비쿼터스 언어는 지식을 획득하고 효과적인 솔루션 모델을 만드는 데 반드시 필요하다.
- 이벤트 스토밍은 도메인 시직을 복구하기 위한 환상적인 도구다.
- 도메인 지식와 해당 모델을 갖췄다면 논의 중인 비즈니스 기능에 가장 적합한 비즈니스 로직 구현 패턴을 결정하라.
- 시스템의 전체 컴포넌트를 점진적으로 교체(스트랭글러 패턴)하거나 기존 솔루션을 점진적으로 리팩터링하는 것.
- 일반적으로 스트랜글러 패턴은 파사드 패턴(facade pattern)과 함께 사용한다.
- 파사드 패턴의 얇은 추상화 계층은 퍼블릭 인터페이스 역할을 하며, 레거시 또는 현대화된 바운디드 컨텍스트로 요청을 전달해 처리하는 역할을 한다.
- 레거시 코드베이스를 현대화
- 작은 점진적인 초치가 대규모 재작성보다 안전하다.
- 작은 점진적은 조치를 수행하는 것과 동일한 이유로, 도메인 모델로 리팩터링이 한 번에 이루어질 필요는 없다.
- 레거시 시스템을 리팩터링하는 것처럼 필요시 충돌 방지 계층을 사용하여 이전 모델로부터 새 코드베이스를 보호할 수 있으며, 오픈 호스트 서비스를 구현하고 공표된 언어를 노충하여 레거시 코드베이스의 변경으로부터 사용자를 보호한다.
실용적인 도메인 주도 설계
- 비즈니스 도메인과 해당 전략을 분석하고, 특정 문제를 해결하기 위한 효과적인 모델을 찾고, 무엇보다도 비즈니스 도메인의 요구사항에 따라 설계 의사결정을 내린다면 그것이 바로 도메인 주도 설계다.
- 도메인 주도 설계는 애그리게이트나 밸류 오브젝트에 관한 것이 아니다.
- 도메인 주도 설계는 비즈니스 도메인이 소프트웨어 설계 의사결정을 주도하게 하는 것이다.
도메인 주도 설계 확산
실무에 활용하는 도메인 주도 설계
- 유비쿼터스 언어
- 이해관계자가 비즈니스 도메인에 대해 말할 때 사용하는 언어에 주의 깊게 귀를 기울여라.
- 일치하지 않는 용어를 찾고 설명을 요청하라.
- 도메인 전문가와 소통하라.
- 그들의 언어를 사용하라.
- 코드와 모든 프로젝트 관련 의사소통에 유비쿼터스 언어를 사용하라.
- 인내심을 가져라.
결론
- 항상 비즈니스 도메인 분석부터 시작하라.
- 회사의 목표와 이를 달성하기 위한 전략은 무엇인가?
- 조직 구조와 기존 소프트웨어 설계 의사결정을 사용하여 조직의 하위 도메인과 해당 유형을 식별하라.
- 이 지식을 바탕으로 현대화 전략을 계획하라.
- 고충점을 찾아라.
- 최고의 비즈니스 가치를 얻고자 노력하라.
- 관련 컴포넌트를 리팩터링하거나 교체함으로써 레거시 코드를 현대화하라.
- 어떤 방법이든 점진적으로 수행하라.
- 대대적인 재작성은 비즌스 가치보다 더 큰 위험을 수반한다.
- 올바른 도구를 사용하고 동료와 논의할 때 항상 각 패턴 뒤에 있는 논리와 원칙을 사용하라.
This post is licensed under CC BY 4.0 by the author.