Dick Dowdell의 The Problem with Microservices를 읽고 정리한 글입니다.
MSA를 도입해야하는 경우
- 시스템간의 결속력이 너무 높은 경우
- 결합이 유연하지 못하고 확장성이 떨어지는 경우
서비스 경계 사항 : 결속력이 높은 경우
- 보안 취약
- 결합도 높음
- 변경시 비용이 많이 든다.
대안 : DDD
- DDD란, 서비스를 제한된 컨텍스트와 컨텍스트의 집합체로 모델링한 것을 의미한다.
제한된 컨텍스트
- 애플리케이션 내에 특정 도메인을 둘러싼 명확한 경계를 정의한 것을 의미
- 캡슐화를 통해 상호적이고 약속아래에 관리될 수 있도록 사용할 수 있다.
서비스 구성 및 연결 : 동적 구성
- 기존의 정적이고 종속성이 높은 형태는 유연성이 떨어져서 서비스 변경시에 재구성, 재배치에 제한이 생긴다.
개선 : 바인딩 가능한 인터페이스를 사용
- REST API와 같은 프로토콜을 사용하여 커뮤니케이션을 통일화하면 서비스와 런타임시 동적 연결 및 확장에 용이하다.
분리된 커뮤니케이션을 위한 메시징 모델
기존
- 병목 현상이 발생하고, 확장성 제한이 발생할 수 있는 긴밀하게 결합된 동기식 메시징 형태
중개를 이용
- 중개를 통해 대상의 서비스 및 런타임 조건에 따라 메세지를 통적으로 라우팅하여 개선할 수 있다.
메시징 종류
동기식 메시징
- 즉각적인 요청 및 응답이 필요한 경우

비동기식 메시징
- 발신자와 수신자가 독립적으로 작동하는 경우

이벤트 기반 커뮤니케이션
- 서비스가 이벤트를 개시하고 관심있는 구독자가 이벤트 메시지를 받을 것이라는 이해를 바탕으로 작동하는 것

중개자란
- 인스턴스 사용불가 상태 또는 응답시간이 너무 저하되었을 경우 다른 인스턴스로 라우터 또는 나중에 메세지를 전달하기 위해 대기열에 넣음으로써 서비스를 장애를 유연하게 대비할 수 있다.
- 중개자를 거치기 때문에, 검증이나 서명, 암호화가 가능하기 때문에 보안 강화도 할 수 있다.
참고
https://medium.com/nerd-for-tech/the-problem-with-microservices-0b721c40bf47