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


