문제 상황
- MOMO 프로젝트에서 도메인 간 통신을 위해 WebClient와 RabbitMQ 설정을 각 도메인에서 개별적으로 관리하던 중 다음과 같은 문제들이 발생했습니다:
- 설정 중복: 각 도메인마다 동일한 WebClient 설정 반복
- 의존성 혼재: 도메인 코드에 기술적 설정이 뒤섞임
- 유지보수 어려움: 설정 변경 시 모든 도메인을 수정해야 함
- 테스트 복잡성: 각 도메인별로 WebClient Mock 설정 필요
원인 분석
- 각 도메인별 개별 WebClient 설정으로 인한 코드 중복과 일관성 부족이 문제였습니다. 베이스 URL이나 타임아웃 설정 변경 시 모든 도메인을 수정해야 하고, 도메인별로 다른 재시도 설정으로 예측 불가능한 동작이 발생했습니다.
해결 방법: Global 패키지 기반 공유 커널 패턴
- 아키텍처 설계: Global 패키지에 통합 WebClient/RabbitMQ 설정을 배치하고, 각 도메인은 Global에서 제공하는 클라이언트를 주입받아 사용하도록 구조화했습니다.
- 통합 WebClient 설정: 내부 서비스용과 외부 API용으로 구분하여 각각 최적화된 설정을 제공했습니다. 내부용은 빠른 응답과 높은 처리량에 최적화하고, 외부용은 더 긴 타임아웃과 보수적인 재시도 설정을 적용했습니다.
- 도메인별 클라이언트: 각 도메인은 Global에서 제공하는 WebClient를 주입받아 비즈니스 로직에만 집중할 수 있도록 했습니다. UserClient, MeetingClient 등은 각각의 API 호출 로직만 담당합니다.
의존성 관리 전략
- 의존성 방향 제어: Domain → Global 방향으로만 의존하도록 하여 Global 패키지가 도메인을 알지 못하게 했습니다. 이를 통해 순환 의존성을 방지하고 깨끗한 레이어드 아키텍처를 구현했습니다.
- DSM 분석 결과: 패키지 의존성 매트릭스 분석을 통해 순환 의존성 0개, 단방향 의존성 구조를 검증했습니다. 모든 도메인이 Global에만 의존하고 서로 간 직접 의존성이 없는 것을 확인했습니다.

결과
- 코드 중복이 완전히 제거되고 설정 변경 시간이 6개 파일 수정에서 1개 파일 수정으로 단축되었습니다. 일관된 설정으로 설정 오류가 제거되고, 새 도메인 추가 시 WebClient 설정이 불필요해져 개발 속도가 향상되었습니다. 공유 커널 패턴을 통해 모놀리스 환경에서 공통 설정을 효율적으로 관리하면서도 도메인 간 결합도를 최소화할 수 있었습니다.