업스트림과 다운스트림을 식별 해보면 어떤게 좋을까?
업스트림/다운스트림을 구분하면 무엇이 좋아지는지 정리해 본다.
업스트림(Upstream)과 다운스트림(Downstream)을 구분하면 도메인 간 관계를 명확히 파악할 수 있다고 한다. 실제로 어떤 효용이 있는지 정리해 보자.
1. 영향도 예측
업스트림에서 모델이나 로직이 변경되면 다운스트림이 영향을 받는다. 관계를 명확히 하면 변경의 파급 범위를 예측하고 대비할 수 있다.
예시
배송 도메인(업스트림)에서 배송 상태 필드를 바꾸면,
정산 도메인(다운스트림)이 어떻게 사용하는지 미리 확인하고 수정 준비가 가능하다.
2. 팀 간 협업
업스트림은 모델을 주도하고, 다운스트림은 이를 소비한다. 관계가 명확하면 소통이 수월해진다.
예시
인증 도메인(업스트림)이 새 토큰 방식을 도입하면, 배송 도메인(다운스트림)은 요청 형식을 수정해야 한다. 업스트림이 설계안을 제시하고, 다운스트림이 피드백하는 구조가 된다.
3. 인터페이스 계약 명확화
업/다운 관계는 API나 이벤트 스키마 같은 계약을 분명하게 만든다. 다운스트림은 업스트림의 변경 가능성을 예상하고, 필요하면 ACL(Anti-Corruption Layer)로 모델을 격리할 수 있다.
예시
A 도메인(업스트림)의 API 응답이 v1에서 v2로 바뀐다면, B 도메인(다운스트림)은 일정 기간 병행 지원을 요청하며 준비할 수 있다.
4. 도메인 경계 명확성
업/다운 관계를 식별하면 도메인 책임이 분명해진다. 그 결과 중복된 로직이나 혼선을 줄일 수 있다.
예시
회원 정보는 인증 도메인(업스트림)에서만 관리하고, 게시판 도메인(다운스트림)은 조회만 한다. 이 방식은 데이터 중복을 막고 유지보수를 단순화한다.
정리
업스트림과 다운스트림을 식별하면 다음 이점이 있다.
- 변경 영향 예측
- 팀 간 협업 명확화
- 인터페이스 계약 보장
- 도메인 경계 유지 및 중복 방지
정리하고 보니 관계 다이어그램의 의존성 방향만 알아도 충분한가 싶다. 단순히 up/down 관계만으로는 효용이 큰지 아직 확신이 없다. OHS 같은 서로의 관계까지 함께 정리해야 더 도움이 될지도 모르겠다.