MSA 환경에서 네트워크 예외를 잘 다루는 방법
두줄요약
MSA 결제에서 네트워크 예외를 성공·실패·알 수 없음으로 분리해 처리하는 방식을 소개했습니다.\n멱등성 API와 Kotlin ActResult로 재시도 및 상태별 후처리 흐름을 구성했습니다.
문제 상황
- MSA 결제 트랜잭션에서 타임아웃·중복 요청·요청 순서 역전·인프라 장애로 인한 데이터 불일치 위험
- 응답 미수신 상태에서 실제 결제 성공·실패 여부를 판단하기 어려운 Unknown 상태
해결 방법
- 요청 결과를 Success·Failure·Unknown으로 분리하고 Unknown 상태에서 제한적 재시도와 후처리 수행
- 거래별 유니크 키 기반 멱등성 API로 중복 결제 방지 및 재요청의 동일 응답 보장
- 후처리도 실패한 경우 Unknown 상태 저장 후 고객 재시도와 별도 데이터 보정 장치 활용
구조와 흐름
- Kotlin sealed class 기반 ActResult로 성공·실패·알 수 없음 상태와 오류 정보 캡슐화
- map·flatMap으로 성공 흐름 연결, recoverUnknown으로 Unknown 상태에만 재시도 적용
- onSuccess·onFailure·onUnknown 콜백으로 상태별 결제 기록 처리 분리
주의할 점
- 예외를 상위로 전파하는 트랜잭션 분리 과정에서 의도치 않은 롤백 가능성
- 보상 트랜잭션도 네트워크 예외 대상이므로 무한 재시도 대신 처리 범위 제한 필요
- 멱등성 보장을 위한 동일 요청 기준과 유니크 거래 키 설계 필요



