diff --git a/DuDoong-Common/src/main/java/band/gosrock/common/annotation/Phone.java b/DuDoong-Common/src/main/java/band/gosrock/common/annotation/Phone.java
index 9939b034..bdabce60 100644
--- a/DuDoong-Common/src/main/java/band/gosrock/common/annotation/Phone.java
+++ b/DuDoong-Common/src/main/java/band/gosrock/common/annotation/Phone.java
@@ -2,7 +2,10 @@
import band.gosrock.common.validator.PhoneValidator;
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
import javax.validation.Constraint;
@Target({ElementType.FIELD})
diff --git a/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/outer/api/tossPayments/client/PaymentsCancelClient.java b/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/outer/api/tossPayments/client/PaymentsCancelClient.java
index 7de07d59..924c7104 100644
--- a/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/outer/api/tossPayments/client/PaymentsCancelClient.java
+++ b/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/outer/api/tossPayments/client/PaymentsCancelClient.java
@@ -12,7 +12,7 @@
@FeignClient(
name = "PaymentsCancelClient",
- url = "https://api.tosspayments.com",
+ url = "${feign.toss.url}",
configuration = {PaymentsCancelConfig.class})
public interface PaymentsCancelClient {
@PostMapping("/v1/payments/{paymentKey}/cancel")
diff --git a/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/outer/api/tossPayments/config/PaymentCancelErrorDecoder.java b/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/outer/api/tossPayments/config/PaymentCancelErrorDecoder.java
index 90950629..7447884f 100644
--- a/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/outer/api/tossPayments/config/PaymentCancelErrorDecoder.java
+++ b/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/outer/api/tossPayments/config/PaymentCancelErrorDecoder.java
@@ -6,17 +6,47 @@
import band.gosrock.infrastructure.outer.api.tossPayments.exception.PaymentsCancelErrorCode;
import band.gosrock.infrastructure.outer.api.tossPayments.exception.PaymentsUnHandleException;
import band.gosrock.infrastructure.outer.api.tossPayments.exception.TossPaymentsErrorDto;
+import feign.FeignException;
import feign.Response;
+import feign.RetryableException;
+import feign.Retryer;
import feign.codec.ErrorDecoder;
+import java.util.concurrent.TimeUnit;
+import org.springframework.context.annotation.Bean;
+import org.springframework.http.HttpStatus;
public class PaymentCancelErrorDecoder implements ErrorDecoder {
+ private static final long PERIOD = 500L;
+ private static final long MAX_PERIOD = TimeUnit.SECONDS.toMillis(3L);
+ private static final int MAX_ATTEMPTS = 3;
+
+ @Bean
+ Retryer.Default retryer() {
+ return new Retryer.Default(PERIOD, MAX_PERIOD, MAX_ATTEMPTS);
+ }
+
@Override
public Exception decode(String methodKey, Response response) {
- TossPaymentsErrorDto body = TossPaymentsErrorDto.from(response);
try {
- PaymentsCancelErrorCode paymentsCancelErrorCode =
+ FeignException exception = feign.FeignException.errorStatus(methodKey, response);
+ int status = response.status();
+ // 500번대는 기본적으로 리트라이
+ if (HttpStatus.valueOf(status).is5xxServerError()) {
+ throw new RetryableException(
+ status,
+ exception.getMessage(),
+ response.request().httpMethod(),
+ exception,
+ null,
+ response.request());
+ }
+ // payments 에러 코드 Decode
+ TossPaymentsErrorDto body = TossPaymentsErrorDto.from(response);
+
+ final PaymentsCancelErrorCode paymentsCancelErrorCode =
PaymentsCancelErrorCode.valueOf(body.getCode());
- ErrorReason errorReason = paymentsCancelErrorCode.getErrorReason();
+ final ErrorReason errorReason = paymentsCancelErrorCode.getErrorReason();
+
throw new DuDoongDynamicException(
errorReason.getStatus(), errorReason.getCode(), errorReason.getReason());
} catch (IllegalArgumentException e) {
diff --git a/DuDoong-Infrastructure/src/main/resources/templates/eventSettlement.html b/DuDoong-Infrastructure/src/main/resources/templates/eventSettlement.html
index e43270f0..f2a6ea00 100644
--- a/DuDoong-Infrastructure/src/main/resources/templates/eventSettlement.html
+++ b/DuDoong-Infrastructure/src/main/resources/templates/eventSettlement.html
@@ -41,10 +41,10 @@