-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
🧐 기능 소개
외부 서버와 통신하는 WebClientService 에 대한 예외 처리 및 재시도 로직을 추가하고, 기존의 동기/비동기 요청 방식에 대한 아키텍처를 개선하려고 합니다.
특히 외부 요청 실패(예: 타임아웃, 외부 서버 에러) 에 대한 예외 처리를 중점적으로 구상하고 처리할 예정입니다.
🔗 연관된 이슈
🔧 작업 예정 내용
🔄 기존 결제 흐름 요약
- 가맹점 → SimplePG: 결제 요청
- SimplePG → 외부 서버: 결제 요청 (비동기)
- SimplePG → 가맹점: 결제 생성 완료 응답
- 외부 서버 → SimplePG: 웹훅 응답 (성공/실패)
- 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
📝 추가 정보
-
참고자료
-
도입 고려사항
Resilience4j,Spring Retry등 라이브러리 도입- 중간 상태 저장용 결제 상태 테이블 도입 고려중
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
Projects
Status
Done