컬리가 커머스 플랫폼을 MSA·DDD 기반으로 전환하며 세운 서비스 개발 원칙을 정리한 글이다. DDD의 핵심인 느슨한 결합(Loose Coupling)과 높은 응집(High Cohesion)을 도메인 분리 관점에서 설명하고, 이를 MSA 설계와 마틴 파울러의 MSA 장점 3가지로 연결한다.
핵심 포인트- DDD(2003, 에릭 에반스)의 핵심 원칙인 Loose Coupling과 High Cohesion이 MSA 설계의 기준이 됨
- 도메인 간에는 느슨하게, 도메인 내에서는 높게 응집하도록 도메인을 잘 나누는 것이 가장 중요
- 도메인 내 마이크로서비스는 sync API 호출과 같은 DB를, 도메인 간에는 async 메시지 통신과 DB 분리로 설계
- 마틴 파울러의 MSA 장점 3가지(명확한 모듈 경계·독립 배포·기술 다양성)를 두 원칙으로 재해석
- 도메인을 잘못 나누면 MSA의 분리가 장점이 아닌 핸디캡이 됨
상세 정리- DDD 정의: 에릭 에반스가 2003년 소개한 방법론으로 좋은 소프트웨어를 원하면 서비스 도메인에 귀를 기울이라는 슬로건에서 출발해 현재 서비스 개발의 주류가 됐다.
- 핵심 개념: MSA를 구현하는 필수 개념이 DDD에서 왔고, 좋은 서비스의 기본 요소인 Loose Coupling과 High Cohesion이 MSA 설계 시 기억할 원칙이다.
- 무엇을 나누나: 대상은 도메인이며, 도메인은 소프트웨어로 풀 문제 영역을 잘라낸 단위다. 도메인을 잘못 나누면 결합해야 할 인터페이스를 응집시키거나 응집해야 할 서비스를 분리해 문제가 생긴다.
- 지향점: 도메인을 잘게 나누는 것만이 능사가 아니라 어떤 서비스를 하나의 도메인으로 잘 묶어 High Cohesion 할지까지 설계하는 것이 DDD·MSA의 목표다.
- DDD로 MSA 해석: 도메인 내 마이크로서비스는 API 기반 sync call이나 같은 DB를 볼 수 있고, 다른 도메인의 서비스와 통신할 땐 async 메시지 기반 통신에 DB도 분리해야 한다.
- MSA 장점 1: Strong Module Boundaries — 모듈 경계가 명확해 변경 시 해당 도메인 마이크로서비스만 이해·처리하면 되며, 경계가 부실하면 분리가 오히려 핸디캡이 된다.
- MSA 장점 2: Independent Deployment — 의존성을 고려해 설계·구축하므로 각 서비스를 독립 배포하기 쉽고, DevOps CI/CD 자동화가 강화된 배경에 배포 단위까지 고려하는 MSA가 있다.
- MSA 장점 3: Technology Diversity — 도메인 내부는 High Cohesion으로 유사 기술 스택을, 도메인 밖은 Loose Coupling으로 문제에 더 맞는 기술 스택을 자유롭게 택할 수 있다.
- 주의: 너무 다양한 기술 도입은 복잡성·비효율을 낳으므로 조직 성숙도에 맞춰 조절하고, 기술 다양성이 커질수록 도메인 간 연동 인터페이스 설계 원칙을 더 면밀히 검토해야 한다.
왜 읽나커머스 플랫폼을 MSA로 전환하며 도메인 경계를 어떻게 그을지 고민하는 아키텍트·백엔드 개발자에게 Loose Coupling/High Cohesion 관점의 설계 원칙 정리.