업스트림(Upstream)과 다운스트림(Downstream)을 구분하면 도메인 간 관계를 명확히 파악할 수 있다고 한다.
실제로 어떠한 효용성이 있을지 정리해 보자
업스트림에서 모델이나 로직이 변경되면 다운스트림이 영향을 받는다.
관계를 명확히 하면 변경이 어디까지 영향을 미칠지 예측하고, 미리 대비할 수 있다.
배송 도메인(업스트림)에서 '배송 상태' 필드를 변경한다면, 정산 도메인(다운스트림)이 그 데이터를 어떻게 사용하는지 파악하고 사전에 수정 작업을 준비할 수 있다.
이를 통해 장애나 릴리스 지연을 줄일 수 있다.
업스트림은 모델을 주도하고, 다운스트림은 이를 소비한다.
관계가 명확하면 소통이 수월해진다.
인증 도메인(업스트림)이 새 토큰 방식을 도입하면, 배송 도메인(다운스트림)은 이를 반영해 요청 형식을 수정해야 한다.
업스트림이 설계안을 제시하고, 다운스트림이 요구사항을 피드백하는 구조로 협업할 수 있다.
업/다운 관계는 API나 이벤트 스키마 같은 인터페이스 계약을 분명하게 한다.
다운스트림은 업스트림의 변경 가능성을 예측하고, 필요 시 ACL(Anti-Corruption Layer)을 통해 모델을 격리할 수 있다.
A 도메인(업스트림)의 API 응답 구조가 v1에서 v2로 변경될 때, B 도메인(다운스트림)은 일정 기간 병행 지원을 요청하며 수정 작업을 준비할 수 있다.
이로써 마이그레이션 부담을 줄일 수 있다.
업/다운 관계를 식별하면 도메인 간 책임이 명확해져 경계가 잘 유지된다.
그 결과 중복된 로직이나 혼선을 줄일 수 있다.
회원 정보는 인증 도메인(업스트림)에서만 관리하고, 게시판 도메인(다운스트림)은 이를 조회만 한다.
이 방식은 데이터 중복을 방지하고 유지보수를 단순화한다.
업스트림과 다운스트림을 식별하면 다음과 같은 이점을 얻을 수 있다.
정리하고보니 그냥 관계다이어그램의 의존성 방향 만 알아도 충분하지 않은가 싶다.
단순히 up/down 관계만으로는 아직은 효용가치가 큰지 잘 모르겠다.
OHS 같은 서로 어떤 관계에 있는지 까지 함께 정리를 해야 더 도움이 되려나 싶다.