
아키텍처
결재 연동 이벤트 핸들러 구축
두줄요약
외부 전자결재와 근태/휴가 서비스를 MSA 환경에서 비동기 이벤트로 연동한 사례입니다. approvalId 매핑과 멱등성 가드, DB 제약 조건 정합성으로 장애 격리와 최종 일관성을 확보했습니다.
문제 상황
- MSA 환경에서 근태/휴가 서비스와 외부 전자결재 서비스 연동 필요
- 동기식 호출 시 결재 서버 지연·장애가 내부 트랜잭션으로 전파되는 문제
- 승인, 반려, 회수 시점이 비동기라 최종 일관성 보장 필요
원인 분석
- 내부 결재 상태만 기준으로 설계된 상태 머신과 외부 결재 라이프사이클 불일치
- approvalId 매핑 부재 시 비동기 상태 이벤트의 대상 도메인 추적 곤란
- 중복 이벤트 유입 대비 멱등성 가드와 상태 전이 검증 필요
해결 방법
- ApprovalStatusHandler로 외부 결재 이벤트를 수신해 도메인 Task로 라우팅
- LeavePlan에 approvalId를 저장해 비동기 상태 변경의 참조 키로 활용
- 승인 완료 처리에 멱등성 가드 적용, Flyway로 CHECK 제약 조건 동기화
