복잡해지는 요구사항 속 도메인 간 강결합
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 소프트웨어 개발자, 시스템 아키텍트, DevOps 엔지니어
- 중간~고급 수준 (이벤트 기반 아키텍처, Spring 프레임워크 이해 필요)
핵심 요약
- 도메인 간 강결합은 요구사항 변화에 따라 시스템 복잡도와 유지보수 비용을 급격히 증가시킴
- 이벤트 기반 아키텍처(Event-Driven Architecture)를 통해
ReservationService
와AutoWaitingPromotionService
간 의존성 제거 가능 - Spring Event 활용 시
@EventListener
및ApplicationEventPublisher
를 통해 느슨한 결합(Loose Coupling) 달성
섹션별 세부 요약
1. 요구사항의 변화와 도메인 간 강결합 문제
- 요구사항은 예측 중심에서 변화 대응 중심으로 이동
- 예: 방탈출 예약 시스템에서
자동 승인
,결제 취소
기능 추가 시 예약 도메인과 대기/결제 도메인 간 강결합 발생 - OCP 위반 가능성으로 인한 유지보수 어려움
2. 강결합의 부작용과 수동 승인 방안
- 예약 도메인이
대기
,결제
도메인 직접 의존 → 책임 비대화 - 수동 승인으로 구현 시 관리자 개입 필요 → 운영 부담 증가
- 도메인 복잡도 감소는 있으나 사용자 편의성 저하
3. 이벤트 기반 아키텍처 도입
- 이벤트 발행자(Publisher)와 수신자(Subscriber) 구조로 간접적 소통 가능
- Spring Event 활용 시
@EventListener
로 이벤트 수신,ApplicationEventPublisher
로 발행 가능 - 예:
ReservationCancelEvent
발행 후AutoWaitingPromotionService
에서 자동 승인 처리
4. 비동기 처리와 컨텍스트 전파
- @Async 어노테이션으로 이벤트 처리 비동기화 가능
- MDC(ThreadLocal) 정보 전파 문제 발생 → CompletableFuture 등으로 해결
- 비동기 처리 시 응답 속도 향상 가능
결론
- 이벤트 기반 아키텍처를 통해 도메인 간 강결합 해소 → 유연성과 확장성 증대
- Spring Event와
@EventListener
활용 시 코드 재사용성 및 유지보수성 향상 - 비동기 처리와 컨텍스트 전파 기술을 병행하여 시스템 성능과 운영 효율성 균형 유지