Kakao Pay
기술 블로그
B레벨 - 심화

카카오페이의 MSA 환경에서 네트워크 예외를 안전하게 다루는 방법

백엔드
MSA
결제
분산시스템
KotlinKafkaSaga PatternIdempotency Key
2024년 3월조회 0면접 0원문 보기

배경

카카오페이의 결제 시스템은 수십 개의 마이크로서비스가 상호 연결된 MSA 구조로, 온라인·오프라인·해외 결제와 잔액 서비스가 각각 독립된 데이터베이스를 관리하고 있다.

도전 과제

타임아웃 발생 시 트랜잭션 성공 여부를 알 수 없는 Unknown 상태 문제, 요청 순서가 뒤바뀌는 네트워크 순서 문제, 보상 트랜잭션 실패 시 무한 보상 루프가 발생할 수 있는 문제가 있었다.

해결 방안

클라이언트 측에서는 Unknown 에러에 대한 점진적 복구 전략을 구현했다. 서버 측에서는 멱등성 API를 도입하고, Kotlin sealed class를 활용해 Success/Failure/Unknown 세 상태를 타입 안전하게 표현했다.

결과

네트워크 장애 시에도 결제 정합성을 보장할 수 있게 되었고, 깊은 try-catch 중첩 없이 깔끔하고 유지보수 가능한 코드를 달성했다.

핵심 인사이트

  • 1.결제 시스템에서 Unknown 상태는 반드시 별도의 타입으로 명시적 처리해야 한다
  • 2.멱등성 키는 분산 환경의 결제 안전성을 위한 필수 요소이다
  • 3.함수형 프로그래밍 패턴으로 에러 핸들링 복잡도를 줄일 수 있다

이 사례 기반 면접에 도전해보세요

Kakao Pay의 실제 기술적 결정과 트레이드오프를 깊이 파고드는 면접 질문 2가 준비되어 있습니다

BACKEND
SYSTEM_DESIGN
타이머사례 참조 가능결과 아카이브

로그인 없이 바로 면접을 시작할 수 있습니다