도메인 주도 설계로 시작하는 마이크로서비스 개발 : 핵심 개념과 패턴, 설계, 구현으로 배우는 DDD와 MSA
저자

한정헌,유해식,최은정,이주영

저자:한정헌
어느덧21년차개발자.인터넷서비스업체를시작으로동양시스템즈에근무했고,2006년부터SK(주)C&C에15년째근무중이다.다양한SI프로젝트를경험했으며개발방법론/설계전문가로다수의대규모프로젝트설계과정을리딩했다.애자일프랙티스,애플리케이션설계에관심이많으며최근에는클라우드기반의애플리케이션개발,도메인주도설계확산활동을하고있다.우리가살아가는세상이지금보다좀더나아지기를바라며개발자로써그에기여하고자한다.천성적인게으름에도불구하고KMOOC강좌,사외전문가멘토링활동,대학강의등의활동을병행하고있다.

저자:유해식
대학에서컴퓨터공학과를전공하고,첫직장인도담시스템스에서군용항공기시뮬레이터를개발했다.2011년SK(주)C&C로이직해서클라우드기반의애플리케이션개발방법론을정립하고클라우드기반MSA프로젝트의설계/개발기술지원업무를수행하고있다.올해는프로젝트인큐베이션업무를수행하고있으며,이활동을통해개발이행복한회사를만드는것이목표다.외부활동으로는2018년에K-MOOC에서온라인강좌를개발하는것을시작으로,사외ICT멘토링,그룹내MSA분야에서마스터로활동하고있다.

저자:최은정
SI와SM의경계에서자바기반의백엔드개발을해왔다.최근에는MSA애플리케이션개발지원업무를수행하고있다.언제나새로운분야에열린마음을가진IT엔지니어가되고자한다

저자:이주영
현재SK(주)C&C에개발자로입사하여MSA시스템의개발지원업무를수행하고있다.프런트엔드와백엔드개발을넘나드는풀스택개발자가되기위해자바,Vue.js,타입스크립트등다양한언어와프레임워크를공부하고실제프로젝트에적용해서개발하고있다.언제나초심을잃지않고어제보다나은오늘이되기위해열심히살아가는것이목표다.

목차

▣01장:아마존비즈니스민첩성의비밀
1.1성공한인터넷기업들과비즈니스민첩성
___1.1.1성공사례:아마존의배포속도
___1.1.2클라우드인프라의등장
___1.1.3클라우드인프라에어울리는애플리케이션의조건
______스케일업과스케일아웃
______특정서비스만탄력성있게확장(스케일아웃)
______클라우드프렌들리와클라우드네이티브
1.2마이크로서비스란무엇인가?
___1.2.1모노리스와마이크로서비스비교
___1.2.2SOA와마이크로서비스
1.3마이크로서비스를위한조건은무엇인가?
___1.3.1조직의변화:업무기능중심팀
___1.3.2관리체계의변화:자율적인분권거버넌스,폴리글랏
___1.3.3개발생명주기의변화:프로젝트가아니라제품중심으로
___1.3.4개발환경의변화:인프라자동화
___1.3.5저장소의변화:통합저장소가아닌분권데이터관리
___1.3.6위기대응방식의변화:실패를고려한설계
1.4정리

▣02장:MSA의이해
2.1리액티브선언:현대애플리케이션이갖춰야할바람직한속성들
2.2강결합에서느슨한결합의아키텍처로의변화
2.3마이크로서비스의외부아키텍처와내부아키텍처
2.4MSA구성요소및MSA패턴
___2.4.1인프라구성요소
______퍼블릭클라우드와베어메탈,프라이빗클라우드환경
______VM과컨테이너
______컨테이너오케스트레이션
______그밖의다양한클라우드인프라서비스
___2.4.2마이크로서비스운영과관리를위한플랫폼패턴
______개발지원환경:데브옵스인프라구성
______빌드/배포파이프라인설계
______마이크로서비스생태계와운영관리요소의탄생
______경험으로획득한지혜:마이크로서비스관리/운영패턴
______스프링클라우드:스프링부트+넷플릭스OSS
______다양한서비스의등록및탐색을위한서비스레지스트리,서비스디스커버리패턴
______서비스단일진입을위한API게이트웨이패턴
______BFF패턴
______외부구성저장소패턴
______인증/인가패턴
______장애및실패처리를위한서킷브레이커패턴
______모니터링과추적패턴
______중앙화된로그집계패턴
______MSA기술변화흐름
______서비스메시패턴
___2.4.3애플리케이션패턴
______UI컴포지트패턴또는마이크로프런트엔드
______마이크로서비스통신패턴
______저장소분리패턴
______분산트랜잭션처리패턴
______읽기와쓰기분리:CQRS패턴
______API조합과CQRS
______쓰기최적화:이벤트소싱패턴
2.5정리

▣03장:마이크로서비스애플리케이션아키텍처
3.1비즈니스로직은어디에?-관심사의분리
___3.1.1데이터베이스중심아키텍처의문제점
3.2헥사고날아키텍처와클린아키텍처
___3.2.1레이어드아키텍처
___3.2.2헥사고날아키텍처
___3.2.3클린아키텍처
3.3마이크로서비스의내부구조정의
___3.3.1바람직한마이크로서비스의내부아키텍처:클린마이크로서비스
___3.3.2내부영역-업무규칙
______트랜잭션스크립트패턴
______도메인모델패턴
______도메인주도설계의애그리거트패턴
___3.3.3외부영역-세부사항
______API퍼블리싱어댑터
______API프락시어댑터
______저장소처리어댑터
______도메인이벤트발행어댑터
______도메인이벤트핸들러
3.4정리

▣04장:마이크로서비스와애자일개발프로세스
4.1도메인주도설계와마이크로서비스
4.2기민한설계/개발프로세스
___4.2.1점진/반복적인스크럼생명주기
___4.2.2아키텍처정의와마이크로서비스도출
___4.2.3스프린트내개발공정
4.3정리

▣05장:마이크로서비스설계
5.1마이크로서비스를도출하는방법
___5.1.1비즈니스능력에근거한도출
___5.1.2DDD의바운디드컨텍스트기반도출
5.2DDD에서의설계
5.3DDD의전략적설계
___5.3.1도메인과서브도메인
___5.3.2유비쿼터스언어와도메인모델,바운디드컨텍스트
___5.3.3컨텍스트매핑
______주요컨텍스트매핑관계
______컨텍스트맵
5.4이벤트스토밍을통한마이크로서비스도출
___5.4.1이벤트스토밍워크숍준비
___5.4.2이벤트스토밍워크숍진행
5.5마이크로서비스상세설계
___5.5.1프런트엔드모델링
___5.5.2백엔드모델링
______API설계
5.6도메인모델링
___5.6.1DDD의전술적설계(도메인모델링구성요소)
______엔티티
______값객체
______표준타입
______애그리거트
______도메인서비스
______도메인이벤트
5.7정리

▣06장:사례연구-마이크로서비스도출과아키텍처구성
6.1요구사항정의
6.2이벤트스토밍을통한마이크로서비스도출
___6.2.1이벤트스트밍워크숍
___6.2.2바운디드컨텍스트식별
___6.2.3컨텍스트다이어그램
___6.2.4이벤트스토밍결과를헥사고날아키텍처로표현하기
6.3외부아키텍처정의
6.4내부아키텍처정의
___6.4.1패키지구조및명명규칙
6.5JHipster를활용한아키텍처구성
___6.5.1MSA외부아키텍처구성(게이트웨이,레지스트리서비스)
___6.5.2마이크로서비스빠르게만들어보기
___6.5.3백엔드서비스의프로젝트구조리팩터링
6.6정리

▣07장:사례연구-백엔드마이크로서비스구현
7.1도서대출마이크로서비스개발
___7.1.1구현기능소개
___7.1.2내부아키텍처결정
___7.1.3API설계
___7.1.4도메인모델링
___7.1.5유스케이스흐름
___7.1.6내부영역-도메인모델개발(도서대출,반납)
___7.1.7내부영역-서비스개발
___7.1.8내부영역-리포지토리개발
___7.1.9외부영역-REST컨트롤러개발
___7.1.10외부영역-아웃바운드어댑터개발(동기호출)
______타서비스에대한동기호출:페인클라이언트연결
______EnableFeignClients처리
___7.1.11외부영역-아웃바운드어댑터개발(비동기호출EDA구현)
______타서비스에대한비동기호출처리:카프카를이용한EDA구현
______대출서비스에카프카Producer만들기
______도메인이벤트객체-StockChanged.java
______도서마이크로서비스에컨슈머(Consumer)어댑터구현하기
___7.1.12내부영역-도메인모델개발:도서연체및연체된도서반납
______서비스흐름처리
___7.1.13내부영역-도메인모델개발:대출불가해제처리기능구현
___7.1.14외부영역-REST컨트롤러개발
7.2사용자마이크로서비스개발
___7.2.1사용자마이크로서비스의기능소개
___7.2.2API설계
___7.2.3도메인모델링
___7.2.4유스케이스흐름
___7.2.5내부영역-도메인모델개발
___7.2.6내부영역-서비스개발
___7.2.7내부영역-리포지토리개발
___7.2.8외부영역-REST컨트롤러개발
___7.2.9외부영역-아웃바운드어댑터개발
7.3사용자마이크로서비스-포인트관리기능구현
___7.3.1기본포인트부여기능구현
___7.3.2포인트적립/결제기능구현
______User엔티티의포인트적립메서드-User.java
______User엔티티의포인트결제메서드-User.java
7.3.3포인트적립,결제기능에대한호출구현
7.4정리

▣08장:CQRS패턴을활용한백엔드마이크로서비스개발
8.1도서마이크로서비스개발
___8.1.1구현기능소개
___8.1.2내부아키텍처결정
___8.1.3API설계
___8.1.4도메인모델링
___8.1.5입고도서등록과재고도서등록에대한유스케이스흐름
___8.1.6내부영역-도메인모델개발
___8.1.7내부영역-서비스개발
___8.1.8내부영역-리포지토리개발
___8.1.9외부영역-REST컨트롤러개발
___8.1.10외부영역-아웃바운드어댑터개발
___8.1.11외부영역-인바운드어댑터개발
8.2도서카탈로그마이크로서비스
___8.2.1기능소개
___8.2.2내부아키텍처결정
___8.2.3API설계
___8.2.4도메인모델링
___8.2.5내부영역-도메인모델개발
___8.2.6내부영역-서비스개발
___8.2.7내부영역-리포지토리개발
___8.2.8외부영역-REST컨트롤러개발
___8.2.9외부영역-인바운드어댑터개발
8.3정리

▣09장:사례연구-시연수행
9.1서비스동작환경실행
9.2게이트웨이와마이크로서비스동작시키기
9.3웹화면에서시나리오테스트하기
9.4정리

▣10장:애플리케이션통합과배포
10.1통합및배포파이프라인정의
___10.1.1지속적통합
___10.1.2지속적배포
10.2GCP배포환경구성
___10.2.1GCP환경설정
___10.2.2GKE생성
10.3JHipster를이용한애플리케이션배포
___10.3.1지속적통합
___10.3.2지속적배포
10.4정리