
아키텍처
결재 연동 이벤트 핸들러 구축
두줄요약
MSA 환경에서 외부 전자결재 서비스와 근태·휴가 도메인을 비동기 이벤트로 연동한 사례를 정리했습니다. 멱등 처리와 DB 제약 조건 수정으로 장애 격리와 최종 일관성을 확보했습니다.
문제 상황
- MSA 환경에서 근태·휴가 서비스와 외부 전자결재 서비스 연동 필요
- 동기식 호출 시 결재 서버 지연·장애가 내부 트랜잭션으로 전파되는 문제
- 승인, 반려, 회수 같은 비동기 상태 변화에 맞춘 최종 일관성 요구
원인 분석
- 외부 결재 상태가 내부 도메인 상태 머신에 직접 반영되지 않는 구조
- approvalId 매핑과 중복 이벤트 처리에 대한 정합성 장치 필요
- DB CHECK 제약 조건이 외부 연동으로 추가된 상태값 InApproval을 반영하지 못함
해결 방법
- ApprovalStatusHandler로 외부 이벤트를 수신해 도메인 Task로 라우팅
- LeavePlan에 approvalId를 저장해 대상 엔티티를 비동기적으로 추적
- LeavePlanTask에서 상태 기반 멱등 가드와 상태 전이 후 이벤트 발행 적용
- Flyway 마이그레이션으로 DB 제약 조건을 최신 상태값에 맞게 동기화

