도메인 주도 설계 첫걸음 - 책 소개
표지
책 소개
도메인 주도 설계를 이해하고 적용하는 데 필요한 이론과 사례를 담은 실질적인 지침서!
소프트웨어 개발은 예전보다 어렵다. 개발자로서 지속적으로 변화하는 기술 트렌드를 따라잡아야 할 뿐 아니라 소프트웨어 이면의 비즈니스 도메인도 이해해야 한다. 이 실용서는 비즈니스 도메인을 분석하고 비즈니스 전략을 이해하는 것은 물론이고, 무엇보다 비즈니스 요건에 맞춰 소프트웨어 설계를 조정하기 위한 일련의 핵심 패턴, 원리, 실천법을 알아본다.
저자는 실무를 통해 견고한 비즈니스 로직이 어떻게 구현되는지, 그리고 어떻게 미래지향적인 소프트웨어 설계와 아키텍처가 되는지를 보여준다. 독자는 비즈니스 요구사항을 충족하는 아키텍처 의사결정을 내리기 위한 도메인 주도 설계(DDD: Domain-Driven Design)와 다른 방법론과의 관계를 검토하게 될 것이다. 또한 스타트업에서 DDD를 구현한 실제 실무 사례를 살펴볼 것이다.
★ 이 책에서 다루는 내용 ★
- 개발하는 시스템이 회사의 경쟁 전략에 어떻게 부합하는지 알아보기 위해 회사의 비즈니스 도메인을 분석하는 방법
- 비즈니스 요건을 충족하는 효과적인 소프트웨어 솔루션을 설계하기 위해 DDD의 전략적, 전술적 도구를 사용하는 방법
- 당면한 비즈니스 도메인에 대한 공동의 이해를 쌓는 법
- 시스템을 바운디드 컨텍스트로 분해하는 법
- 브라운필드 프로젝트에서 DDD를 점진적으로 도입하는 법
책 정보
원서
- 제목
- Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy
- 지은이
- Vlad Khononov(블라드 코노노프)
- 출판사
- O’Reilly Media
- 출간일
- November 2, 2021
번역서
- 제목
- 도메인 주도 설계 첫걸음: 소프트웨어 아키텍처와 비즈니스 전략의 일치를 위한 핵심 패턴, 원칙, 실천법
- 옮긴이
- 김민석, 오창윤
- 출판사
- 위키북스
- 출간일
- 2022년 5월 30일
- 쪽수
- 340쪽
목차
- [Part 1] 전략적 설계
- 01장: 비즈니스 도메인 분석하기
- 비즈니스 도메인이란?
- 하위 도메인이란?
- 하위 도메인의 유형
- 하위 도메인 비교
- 하위 도메인 경계 식별
- 도메인 분석 예제
- Gigmaster
- BusVNext
- 도메인 전문가는 어떤 사람인가?
- 결론
- 연습문제
- 02장: 도메인 지식 찾아내기
- 비즈니스 문제
- 도메인 지식 찾아내기
- 커뮤니케이션
- 유비쿼터스 언어란 무엇인가?
- 비즈니스 언어
- 시나리오
- 일관성
- 비즈니스 도메인 모델
- 모델이란 무엇인가?
- 효과적인 모델링
- 비즈니스 도메인 모델링
- 지속적인 노력
- 도구
- 도전과제
- 결론
- 연습문제
- 03장: 도메인 복잡성 관리
- 일관성 없는 모델
- 바운디드 컨텍스트란 무엇인가?
- 모델 경계
- 정제된 유비쿼터스 언어
- 바운디드 컨텍스트의 범위
- 바운디드 컨텍스트 대 하위 도메인
- 하위 도메인
- 바운디드 컨텍스트
- 하위 도메인과 바운디드 컨텍스트 사이의 상호작용
- 경계
- 물리적 경계
- 소유권 경계
- 실생활의 바운디드 컨텍스트
- 시맨틱 도메인
- 과학
- 냉장고 구입
- 결론
- 연습문제
- 04장: 바운디드 컨텍스트 연동
- 협력형 패턴 그룹
- 파트너십 패턴
- 공유 커널 패턴
- 사용자-제공자 패턴 그룹
- 순응주의자 패턴
- 충돌 방지 계층 패턴
- 오픈 호스트 서비스 패턴
- 분리형 노선
- 커뮤니케이션 이슈
- 일반 하위 도메인
- 모델의 차이
- 컨텍스트 맵
- 유지보수
- 한계
- 결론
- 연습문제
- 협력형 패턴 그룹
- 01장: 비즈니스 도메인 분석하기
- [Part 2] 전술적 설계
- 05장: 간단한 비즈니스 로직 구현
- 트랜잭션 스크립트
- 구현
- 그렇게 쉽진 않다!
- 트랜잭션 스크립트를 사용하는 경우
- 액티브 레코드
- 구현
- 액티브 레코드를 사용하는 경우
- 실용적인 접근 방식
- 결론
- 연습문제
- 트랜잭션 스크립트
- 06장: 복잡한 비즈니스 로직 다루기
- 배경
- 도메인 모델
- 구현
- 구성요소
- 복잡성 관리
- 결론
- 연습문제
- 07장: 시간 차원의 모델링
- 이벤트 소싱
- 검색
- 분석
- 원천 데이터
- 이벤트 스토어
- 이벤트 소싱 도메인 모델
- 장점
- 단점
- 자주 묻는 질문
- 성능
- 데이터 삭제
- 이렇게 하면 안될까요…?
- 결론
- 연습문제
- 이벤트 소싱
- 08장: 아키텍처 패턴
- 비즈니스 로직과 아키텍처 패턴
- 계층형 아키텍처
- 프레젠테이션 계층
- 비즈니스 로직 계층
- 데이터 접근 계층
- 계층 간 커뮤니케이션
- 변종(variation)
- 계층형 아키텍처를 사용하는 경우
- 포트와 어댑터
- 용어
- 의존성 역전 원칙
- 인프라 구성요소의 연동
- 변형
- 포트와 어댑터를 사용하는 경우
- CQRS
- 폴리글랏 모델링
- 읽기 모델의 프로젝션
- 도전과제
- 모델 분리
- CQRS를 사용해야 하는 경우
- 범위
- 결론
- 연습문제
- 09장: 커뮤니케이션 패턴
- 모델 변환
- 스테이트리스 모델 변환
- 스테이트풀 모델 변환
- 애그리게이트 연동
- 아웃박스
- 사가
- 프로세스 관리자
- 결론
- 연습문제
- 모델 변환
- 05장: 간단한 비즈니스 로직 구현
- [Part 3] 도메인 주도 설계 적용 실무
- 10장: 휴리스틱 설계
- 휴리스틱
- 바운디드 컨텍스트
- 비즈니스 로직 구현 패턴
- 아키텍처 패턴
- 테스트 전략
- 피라미드형 테스트
- 다이아몬드형 테스트
- 역전된 피라미드형 테스트
- 전술적 설계 의사결정 트리
- 결론
- 연습문제
- 11장: 진화하는 설계 의사결정
- 도메인 변경
- 핵심에서 일반으로
- 일반에서 핵심으로
- 지원에서 일반으로
- 지원에서 핵심으로
- 핵심에서 지원으로
- 일반에서 지원으로
- 전략적 설계 문제
- 전술적 설계 문제
- 트랜잭션 스크립트에서 액티브 레코드로
- 액티브 레코드에서 도메인 모델로
- 도메인 모델에서 이벤트 소싱 도메인 모델로
- 전환에 필요한 과거 이력 생성
- 마이그레이션 이벤트 모델링
- 조직 변화
- 파트너십에서 사용자-제공자로
- 사용자-제공자에서 분리형 노선으로
- 도메인 지식
- 성장
- 하위 도메인
- 바운디드 컨텍스트
- 애그리게이트
- 결론
- 연습문제
- 도메인 변경
- 12장: 이벤트 스토밍
- 이벤트 스토밍이란?
- 누가 이벤트 스토밍에 참석하나?
- 이벤트 스토밍에 무엇이 필요한가?
- 이벤트 스토밍 과정
- 1단계: 자유로운 탐색
- 2단계: 타임라인
- 3단계: 고충점
- 4단계: 중요 이벤트
- 5단계: 커맨드
- 6단계: 정책
- 7단계: 읽기 모델
- 8단계: 외부 시스템
- 9단계: 애그리게이트
- 10단계: 바운디드 컨텍스트
- 변형
- 이벤트 스토밍을 사용하는 경우
- 진행 팁
- 활력도 살피기
- 원격 이벤트 스토밍
- 결론
- 연습문제
- 13장: 실무에서의 도메인 주도 설계
- 전략적 분석
- 비즈니스 도메인 이해하기
- 현재 설계 탐색
- 현대화 전략
- 전략적 현대화
- 전술적 현대화
- 유비쿼터스 언어 육성
- 실용적인 도메인 주도 설계
- 도메인 주도 설계 확산
- 실무에 활용하는 도메인 주도 설계
- 결론
- 연습문제
- 전략적 분석
- 10장: 휴리스틱 설계
- [Part 4] 다른 방법론 및 패턴과의 관계
- 14장: 마이크로서비스
- 서비스란 무엇인가?
- 마이크로서비스란 무엇인가?
- 서비스형 메서드: 완벽한 마이크로서비스?
- 설계 목표
- 시스템의 복잡성
- 깊은 서비스로서의 마이크로서비스
- 깊은 모듈로서의 마이크로서비스
- 도메인 주도 설계와 마이크로서비스의 경계
- 바운디드 컨텍스트
- 애그리게이트
- 하위 도메인
- 마이크로서비스의 퍼블릭 인터페이스 압축하기
- 오픈 호스트 서비스
- 충돌 방지 계층
- 결론
- 연습문제
- 15장: 이벤트 주도 아키텍처
- 이벤트 주도 아키텍처
- 이벤트
- 이벤트, 커맨드, 메시지
- 구조
- 이벤트 유형
- 이벤트 주도 연동 설계
- 분산된 커다란 진흙 덩어리
- 시간 결합
- 기능 결합
- 구현 결합
- 이벤트 주도 연동의 리팩터링
- 이벤트 주도 설계 휴리스틱
- 결론
- 연습문제
- 16장: 데이터 메시
- 분석 데이터 모델과 트랜잭션 데이터 모델의 비교
- 팩트 테이블
- 디멘전 테이블
- 분석 모델
- 분석 데이터 관리 플랫폼
- 데이터 웨어하우스
- 데이터 레이크
- 데이터 웨어하우스와 데이터 레이크 아키텍처의 도전과제
- 데이터 메시
- 도메인 기준의 데이터 분리
- 제품 관점에서 데이터 다루기
- 자율성 활성화
- 에코시스템 구축
- 데이터 메시와 도메인 주도 설계를 엮기
- 결론
- 연습문제
- 분석 데이터 모델과 트랜잭션 데이터 모델의 비교
- 맺음말
- 문제
- 솔루션
- 구현
- 추가 자료
- 고급 도메인 주도 설계
- 아키텍처 및 통합 패턴
- 레거시 시스템 현대화
- 이벤트 스토밍
- 결론
- 부록A: DDD 적용: 사례 연구
- 다섯 가지 바운디드 컨텍스트
- 비즈니스 도메인
- 바운디드 컨텍스트 #1: 마케팅
- 바운디드 컨텍스트 #2: CRM
- 바운디드 컨텍스트 #3: 이벤트 크런처
- 바운디드 컨텍스트 #4: 보너스
- 바운디드 컨텍스트 #5: 마케팅 허브
- 논의
- 유비쿼터스 언어
- 하위 도메인
- 바운디드 컨텍스트의 경계
- 결론
- 다섯 가지 바운디드 컨텍스트
- 14장: 마이크로서비스
- 부록B: 연습문제 정답