이 책을 읽으면서 한번은 나오겠지 싶었던 MSA가 이 챕터에서 언급되었다.
매우 짧게 언급되었지만, 이번 포스팅에서는 MSA와 DDD를 연관지어 넓고 얕게 다뤄보려 한다.
(이벤트 관련 내용은 다음 챕터에서 등장하기 때문에 따로 언급하지 않는다.)
☑️ Monolithic : 모든 서비스를 하나의 애플리케이션에 구현(db도 공유)
☑️ MSA(Micro Service Architecture) : 분리될 수 있는 비즈니스 요소는 마이크로서비스 단위로 DB까지 나누고 이들이 모여 하나의 서비스를 구성하게 됨.
-> 결론적으로 마이크로서비스는 각각의 저장소를 독립적으로 보유하며 각 데이터는 다른 서비스의 직접 참조가 되어서는 안 됨
비유하자면 이렇다.
효율적인 리소스 사용
이 가능도메인 간의 결합도가 약함
-> 특정 마이크로 서비스에서 장애가 발생해도 다른 마이크로 서비스에는 적은 영향을 미치면서 복구할 수 있다.높은 개발 유연성
: 마이크로 서비스별로 다른 언어를 사용할 수도 있고, 다른 환경세팅 하에 개발할 수도 있다. 그렇지만 많은 IT 기업에서는 MSA를 채택하고, 적용하고 있다.
배달의 민족도 오랜시간에 걸쳐 모놀리틱에서 MSA로의 전환을 완료했다. (김영한님이 나오셔서 이 주제로 세션을 진행하시기도 했다..)
결론적으로 오늘날에는 MSA를 빼놓고는 서비스 아키텍처를 논하기 어려울 것 같다.
결국 잘게 쪼갠다는 것이 MSA의 본질이다.
그럼 여기서 문제가 생긴다. 무슨 기준으로 쪼갤 것인가?
MSA가 빛을 발하려면 마이크로 서비스 간의 느슨한 결합 & 높은 응집성
을 지키면서 잘 나눠야 한다.
이때 DDD의 바운디드 컨텍스트 개념을 도입한다.
카탈로그
에서 상품은 상품 이미지, 상품명, 상품 가격, 상세 설명 같은 상품 정보
가 위주이다..재고 관리
에서는 실존하는 개별 객체를 추적하기 위한 상품
이다.'회원'
'보내는 사람'
'주문자'
로 사용하는 언어가 다르다.내부적으로 응집성이 높고
& 다른 바운디드 컨텍스트와 의존관계가 낮아야
한다.이러한 바운디드 컨텍스트를 기반으로 마이크로 서비스를 도출해낼 수 있다.
바운디드 컨텍스트는 모델의 경계를 형성하기 때문에 바운디드 컨텍스트를 마이크로 서비스로 구현한다.
Facade Layer : 프레젠테이션 계층과 도메인 모델 계층 간의 논리적 의존성 분리
두 팀이 관련된 바운디드 컨텍스트를 개발하면 자연스럽게 두 바운디드 컨텍스트 간 통합이 발생한다.
두 바운디드 컨텍스트를 통합하는 방법은 다음과 같다.
메시지 큐
를 사용하는 것비동기
로 메시지를 처리한다.앞서 각각의 바운디드 컨텍스트는 다른 컨텍스트 경계와 의존관계가 낮아야
한다고 했다. 그러나 바운디드 컨텍스트 간에 아무런 관계도 없는 것은 아니다.
카탈로그 컨텍스트
는 추천 상품을 보여주기 위해 상류 컴포넌트인 추천 컨텍스트
가 제공하는 REST API를 호출한다.지금까지 바운디드 컨텍스트가 무엇인지, 바운디드 컨텍스트 간의 관계로는 무엇이 있는지에 대해 알아봤다.
이제는 최종적으로 컨텍스트 맵을 도출해보자. 컨텍스트 맵은 식별된 마이크로 서비스와 그들간의 의존관계를 보여준다.
아래 그림이 컨텍스트 맵의 예시이다. 상류 컨텍스트에서 OHS(오픈 호스트 서비스)를 발행하면, 하류 컨텍스트에서 ACL(안티코럽션 계층)을 통해 하류 콘텍스트에 맞게 모델을 변환하여 사용한다.
Do Not Use MSA - 마이크로서비스 아키텍처가 꼭 필요한가요?https://www.samsungsds.com/kr/insights/msa.html
SK(주) C&C's TECH BLOG : 마이크로서비스 모델링 시리즈
https://engineering-skcc.github.io/agile/microservice-agile/
[우아콘2020] 배달의민족 마이크로서비스 여행기
https://www.youtube.com/watch?v=BnS6343GTkY