DDD는 2003년 에릭 에반스의 Domain-Driven Design이라는 책에서 처음 소개된 개발 방법론으로, “훌륭한 소프트웨어를 개발하고 싶다면 서비스 도메인에 귀를 기울여라”라는 슬로건으로 시작되었다.
현재 서비스 개발에서 가장 큰 주류를 이루고 있는 개발 방법이다.
DDD의 주요 설계 원칙은 Loose Coupling
(느슨한 결합)과 High Cohesion
(높은 응집)이다.
도메인들 간에는 느슨한 결합을 갖고, 도메인 내에서는 높은 응집을 가져야 한다.
여기서 도메인
이란 소프트웨어로 해결하고자 하는 문제의 영역(ex. 서비스 단위)을 가리킨다.
Loose Coupling과 High Cohesion 설계 원칙이 잘 적용된 서비스 도메인을 도식화하면 다음과 같다.
MSA는 DDD를 기반으로 서비스 아키텍처 패턴을 정의한 것이다. 마이크로 서비스가 도메인 내부/외부에 위치하는지에 따라 서비스 간의 커뮤니케이션 방식, 설계 원칙이 달라진다.
MSA의 핵심 이점을 Loose Coupling과 High Cohesion 원칙으로 해석하면 다음과 같다.
MSA 구조에서 마이크로 서비스의 가장 큰 장점이 모듈 경계가 명확하다는 것이다. 시스템 변경 사항이 발생하면, 특정 도메인 내 마이크로 서비스 단위만 이해하고 처리하면 된다. 도메인을 잘 나눠 제대로 된 경계를 가져야 이러한 이점을 누릴 수 있다.
MSA는 Loose Coupling과 High Cohesion 같은 의존성 관계를 고려하여 시스템을 설계, 구축함으로, 각 마이크로 서비스를 독립적으로 배포하는 것을 용이하게 한다. MSA는 배포를 고려한 설계를 하게 된다.
각각의 마이크로 서비스의 독립성이 강화되면서, 마이크로 서비스 내 기술 선택이 자유로워졌다. 도메인 내의 마이크로 서비스들은 High Cohesion 원칙에 따라 최대한 유사한 기술 스택을 가져야 하지만, 도메인 밖의 마이크로 서비스들은 Loose Coupling 원칙에 따라 해당 서비스 도메인에 적합한 기술 스택을 가질 수 있게 되었다.
Reference
kurly - DDD와 MSA 기반으로 좋은 서비스 개발하기