목록 보기
MSA 환경에서 네트워크 예외를 잘 다루는 방법
아키텍처

MSA 환경에서 네트워크 예외를 잘 다루는 방법

카카오페이
카카오페이
2022년 5월 25일

두줄요약

MSA 결제에서 네트워크 예외를 성공·실패·알 수 없음으로 분리해 처리하는 방식을 소개했습니다.\n멱등성 API와 Kotlin ActResult로 재시도 및 상태별 후처리 흐름을 구성했습니다.

문제 상황

  • MSA 결제 트랜잭션에서 타임아웃·중복 요청·요청 순서 역전·인프라 장애로 인한 데이터 불일치 위험
  • 응답 미수신 상태에서 실제 결제 성공·실패 여부를 판단하기 어려운 Unknown 상태

해결 방법

  • 요청 결과를 Success·Failure·Unknown으로 분리하고 Unknown 상태에서 제한적 재시도와 후처리 수행
  • 거래별 유니크 키 기반 멱등성 API로 중복 결제 방지 및 재요청의 동일 응답 보장
  • 후처리도 실패한 경우 Unknown 상태 저장 후 고객 재시도와 별도 데이터 보정 장치 활용

구조와 흐름

  • Kotlin sealed class 기반 ActResult로 성공·실패·알 수 없음 상태와 오류 정보 캡슐화
  • map·flatMap으로 성공 흐름 연결, recoverUnknown으로 Unknown 상태에만 재시도 적용
  • onSuccess·onFailure·onUnknown 콜백으로 상태별 결제 기록 처리 분리

주의할 점

  • 예외를 상위로 전파하는 트랜잭션 분리 과정에서 의도치 않은 롤백 가능성
  • 보상 트랜잭션도 네트워크 예외 대상이므로 무한 재시도 대신 처리 범위 제한 필요
  • 멱등성 보장을 위한 동일 요청 기준과 유니크 거래 키 설계 필요

카카오 계열사 채용30건

채용 사이트에서 전체 보기

다음 읽기

#Kotlin 주제를 다룬 다른 회사 글

도메인 Error를 다루는 고민과 Arrow의 Either

결제 도메인의 오류 처리를 위해 sealed class를 검토한 뒤 Arrow의 Either를 도입한 과정을 정리했습니다. 트랜잭션, 캐시, 예외 처리와의 충돌을 피하기 위해 계층별 경계도 함께 설계했습니다.

네이버 페이
네이버 페이
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...