162
2부
구조
5.4.2 5.4.2
사이드카사이드카 및 서비스 메시: 직교 운영 커플링 및 서비스 메시: 직교 운영 커플링
마이크로서비스 아키텍처의 설계 목표 중 하나는 높은 수준의 분리도다. 이 목표는 종종 ‘중복
이 결합보다 낫다’는 금언으로 표현되곤 한다.
PenultimateWidgets
의 두 서비스를 예로 들
어보자. 이 두 서비스는 모두 고객 정보를 전달하며, 도메인 주도 설계의 경계 콘텍스트 원칙
에 따라 서비스의 세부 구현 사항을 내부에서 비공개로 유지한다. 이 경우 일반적으로 각 서비
스는 내부에서 고유하게
Customer
엔티티를 표현하며 느슨하게 결합된 형식으로 전달한다.
JSON
의 이름/값 쌍을 생각하면 쉽다. 이러한 방식으로 각 서비스는 통합을 저해하지 않고 내
부의 고객 표현과 기술 스택을 자유롭게 변경할 수 있다. 일반적으로 아키텍트는 중복 코드를
보며 눈쌀을 찌푸리곤 한다. 중복은 동기화, 의미론적 변화
semantic
drift
등 기타 여러 문제를 유발
하기 때문이다. 그러나 중복보다 더 해로운 힘이 작용할 때가 있는데, 마이크로서비스 아키텍
처의 커플링이 바로 그런 존재에 해당한다. ‘이 기능은 중복과 커플링 중 어느 쪽에 적합한가’에
대한 대답은 상황에 따라 다르다. 마이크로서비스 스타일의 아키텍처는
중복
을,
SOA
기반 아
키텍처는
커플링
을 채택할 가능성이 높다.
마이크로서비스를 설계하는 아키텍트는 커플링을 지양하기 위해 현실적으로 중복 구현과 타
협해야 한다. 그러나 모니터링, 로깅, 인증, 권한 ...