필요성 측면
느려지는 개발, 배포 과정으로 인해 필요한 비즈니스 개발지 지연된 적이 있나?Business Capability가능 여부 측면
사내 엔지니러이 최고 책임자 MSA 전환에 대한 충분한 필요성 공감?분해패턴 : 분해를 해결하기 위한 패턴
모놀리식에서는 1개의 서비스였지만 MSA로 이동하며 1개의 서비스를 N개로 분리비즈니스와 하위 도메인 패턴별 분리 2가지는 유동적임비즈니스 능력에 대한 분해 : Business Ability복잡한 비즈니스 능력을 기준장점단점서비스, 즉 도메인 별 팀의 구조가 희석될 가능성 높음하위 도메인 패턴별 분해(Sub-Domain) from DDD복잡한 비즈니스여도, 포함된 내부의 하위 도메인을 단위로 분리장점단점

송금 서비스 예시

통신패턴서비스가 쪼개졌으니까 어떻게 통신 할래? 해결Sync Pattern : 동기Response 받을 때까지 멈취있어도 되는 경우Async Pattern : 비동기Response를 당장 받을 필요 없는 경우
트랜젝션패턴2PC : 2 Phase Commit, 고전적 방식코디네이터 : 2PC manage2단계로 관리2번의 커밋 전부 성공해도 코디네이터에게 알려주는 과정에서도 Error 발생 가능성이 있음보상 트랜젝션 : Compensating Transactions완정히 종료된 트랜젝션을 그 이전 상태로 되돌리기 위한 트랜젝션사가 패턴 : Sage Pattern보상 트랜젝션의 장점 + 2PC 장점2PC
보상 트랜젝션사용안하는 것이 가장 BEST
SagaSaga 시작 후, 일정시간 동안 코디네이터에게 롤백/커밋 이 날라오지 않으면 자동으로 보상트랜젝션 사용
데이터 쿼리 패턴 : MSA 설계하면서 생긴 데이터 쿼리의 어려움을 해결하는 패턴
2가지 패턴 모두 목적은 동일
API Aggregation 패턴 : API 조합 패턴
API 조합기를 통해 여러개의 도메인에 대한 데이터 요청 후, 받아와서 1개의 값으로 return 하는 패턴
CQRS 패턴 : Command와 Query 분리 패턴
Command : Write, Update, DeleteQuery : Read
가시성 : Visibility, Observability
로깅, 모니터링의 어려움 해결하기 위한 패턴한곳에서 모니터링하나의 요청처럼 보이게 하는 트레이싱(여러개의 트랜잭션을)로깅 : 트러블 슈팅, 누락 X문제를 디테일하게 봐야하기 때문에 누락이 되면 안됨.메트릭 : 시계열 지표들 저장, 누락 가능증감률을 확인하는 것이 목적, 따라서 누락 가능일정 시간으로 확인 : N second구체적으로 로깅, 메트릭을 저장하고 인덱싱하여 검색할 지에 집중하는 패턴
신뢰성 : Reliablilty
MSA 설계하면서 분리/분해로 인해 떨어진 신뢰성을 해결하기 위한 패턴
서킷 브레이커 : Circuit Breaker
분산 시스템에서 장애 전파를 막고 피해를 최소화 하기 위한 패턴
서킷 브레이커 있는 경우
200과 msg 전달, 이를 통해 A는 신뢰할 수 있는 서비스
서킷 브레이커 없는 경우

장애복구, 자가 치유, 무정지 배포

MSA로 인한 문제 발생 후, 해결 방법 패턴
테스트 패턴테스트 본질을 해결하기 위한 패턴외부 API 패턴MSA에서 서비스 호출 시, 직접 호출이 아닌 외부 API를 통해 호출통신과 관련된 종속성을 해결하기 위한 패턴디스커버리 패턴
