Skip to content

Feat: WebClientService 외부 요청 실패 처리 및 재시도 로직 #16

@JaesungGo

Description

@JaesungGo

🧐 기능 소개

외부 서버와 통신하는 WebClientService 에 대한 예외 처리 및 재시도 로직을 추가하고, 기존의 동기/비동기 요청 방식에 대한 아키텍처를 개선하려고 합니다.
특히 외부 요청 실패(예: 타임아웃, 외부 서버 에러) 에 대한 예외 처리를 중점적으로 구상하고 처리할 예정입니다.

🔗 연관된 이슈

🔧 작업 예정 내용

🔄 기존 결제 흐름 요약

  1. 가맹점 → SimplePG: 결제 요청
  2. SimplePG → 외부 서버: 결제 요청 (비동기)
  3. SimplePG → 가맹점: 결제 생성 완료 응답
  4. 외부 서버 → SimplePG: 웹훅 응답 (성공/실패)
  5. SimplePG: 결제 상태 및 로그 업데이트

🔄 WebClientService 개선

  • 외부 요청에 타임아웃 설정 적용 (Connection/Read Timeout 등)
  • 예외 처리 로직 분기 강화 (Timeout, 5xx, 비즈니스 실패 등)
  • 재시도 로직 구현 (지수 백오프 혹은 라이브러리 사용)

🔁 결제 흐름별 개선

Case 1: 결제 생성 (비동기 + 웹훅)

  • 외부 요청 실패 시 재시도 및 상태 추적 로직 추가
  • 요청 실패/지연 처리에 대비한 웹훅 응답 수신 처리 강화

Case 2: 결제 취소 (동기 + 웹훅)

  • 동기 요청에 타임아웃 설정 및 예외 처리 로직 보강
  • 실패 요청에 대한 알림 및 로깅 추가

Case 3: 결제 완료 (동기 처리)

  • 실패 시 사용자 명확한 응답 반환 및 트랜잭션 롤백 설계 고려

🧩 전송 실패 시 예외 처리 및 재시도

✅ Case 1. 요청 실패 (외부 서버 도달 X) → 재시도 O

  • 상태 코드: 없음 (예: 네트워크 오류, Timeout 등)
  • 처리 방식: 재시도 필요 (백오프 적용)
  • 처리 상황: 외부 서버에 도달하지 못한 경우

✅ Case 2. 요청 성공 + 외부 서버 내부 에러 → 재시도 O

  • 상태 코드: 5xx (500~599)
  • 처리 방식: 재시도 필요
  • 처리 상황: 서버 도달했으나 장애로 실패

❌ Case 3. 요청 성공 + 비즈니스 로직 실패 → 재시도 X

  • 상태 코드: 2xx (예: 202)
  • 처리 방식: 재시도 불필요
  • 처리 상황: 카드 한도 초과, 인증 실패 등 비즈니스 실패는 무의미

📝 웹훅 지연 응답 처리 방안

타임아웃 이후 외부 서버에서 웹훅 응답이 뒤늦게 도착하는 경우

  • 결제 상태 테이블에서 처리 상태 확인 후 중복 처리 방지
  • 타임아웃으로 일시적으로 실패 처리했더라도 웹훅 성공 응답 시 최종 상태 반영 고려
  • @transactional 내부에 비동기 + 보상 트랜잭션 고려중
  • 상태 업데이트는 idempotent하게 설계

📆 예상 기간

2025-06-13 ~ 2025-06-13


📝 추가 정보

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions