From 199cbe573fe2e0ae82f694e9fe153d81898b0c50 Mon Sep 17 00:00:00 2001 From: pricelees Date: Tue, 15 Jul 2025 18:32:32 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20PaymentConfig=20=EC=BD=94=ED=8B=80?= =?UTF-8?q?=EB=A6=B0=20=EB=A7=88=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EB=B0=8F=20RestClient=EB=A5=BC=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infrastructure/client/PaymentConfig.kt | 63 ++++++++++--------- .../client/TossPaymentClient.java | 10 +-- 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/main/java/roomescape/payment/infrastructure/client/PaymentConfig.kt b/src/main/java/roomescape/payment/infrastructure/client/PaymentConfig.kt index b566d0a2..512d4e6a 100644 --- a/src/main/java/roomescape/payment/infrastructure/client/PaymentConfig.kt +++ b/src/main/java/roomescape/payment/infrastructure/client/PaymentConfig.kt @@ -1,36 +1,41 @@ -package roomescape.payment.infrastructure.client; +package roomescape.payment.infrastructure.client -import java.nio.charset.StandardCharsets; -import java.time.Duration; -import java.util.Base64; - -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.web.client.ClientHttpRequestFactories; -import org.springframework.boot.web.client.ClientHttpRequestFactorySettings; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.ClientHttpRequestFactory; -import org.springframework.web.client.RestClient; +import org.springframework.boot.context.properties.EnableConfigurationProperties +import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder +import org.springframework.boot.http.client.ClientHttpRequestFactorySettings +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration +import org.springframework.web.client.RestClient +import java.nio.charset.StandardCharsets +import java.time.Duration +import java.util.* @Configuration -@EnableConfigurationProperties(PaymentProperties.class) -public class PaymentConfig { +@EnableConfigurationProperties(PaymentProperties::class) +class PaymentConfig { - @Bean - public RestClient.Builder restClientBuilder(PaymentProperties paymentProperties) { - ClientHttpRequestFactorySettings settings = ClientHttpRequestFactorySettings.DEFAULTS - .withReadTimeout(Duration.ofSeconds(paymentProperties.getReadTimeout())) - .withConnectTimeout(Duration.ofSeconds(paymentProperties.getConnectTimeout())); - ClientHttpRequestFactory requestFactory = ClientHttpRequestFactories.get(settings); + @Bean + fun paymentClient( + paymentProperties: PaymentProperties, + restClientBuilder: RestClient.Builder + ): RestClient { + val settings: ClientHttpRequestFactorySettings = ClientHttpRequestFactorySettings.defaults().also { + it.withReadTimeout(Duration.ofSeconds(paymentProperties.readTimeout.toLong())) + it.withConnectTimeout(Duration.ofSeconds(paymentProperties.connectTimeout.toLong())) + } + val requestFactory = ClientHttpRequestFactoryBuilder.jdk().build(settings) - return RestClient.builder().baseUrl("https://api.tosspayments.com") - .defaultHeader("Authorization", getAuthorizations(paymentProperties.getConfirmSecretKey())) - .requestFactory(requestFactory); - } + return restClientBuilder + .baseUrl(paymentProperties.apiBaseUrl) + .defaultHeader("Authorization", getAuthorizations(paymentProperties.confirmSecretKey)) + .requestFactory(requestFactory) + .build() + } - private String getAuthorizations(String secretKey) { - Base64.Encoder encoder = Base64.getEncoder(); - byte[] encodedBytes = encoder.encode((secretKey + ":").getBytes(StandardCharsets.UTF_8)); - return "Basic " + new String(encodedBytes); - } + private fun getAuthorizations(secretKey: String): String { + val encodedSecretKey = Base64.getEncoder() + .encodeToString("$secretKey:".toByteArray(StandardCharsets.UTF_8)) + + return "Basic $encodedSecretKey" + } } diff --git a/src/main/java/roomescape/payment/infrastructure/client/TossPaymentClient.java b/src/main/java/roomescape/payment/infrastructure/client/TossPaymentClient.java index f746bdb1..373504dd 100644 --- a/src/main/java/roomescape/payment/infrastructure/client/TossPaymentClient.java +++ b/src/main/java/roomescape/payment/infrastructure/client/TossPaymentClient.java @@ -27,15 +27,15 @@ public class TossPaymentClient { private static final Logger log = LoggerFactory.getLogger(TossPaymentClient.class); - private final RestClient restClient; + private final RestClient paymentClient; - public TossPaymentClient(RestClient.Builder restClientBuilder) { - this.restClient = restClientBuilder.build(); + public TossPaymentClient(RestClient paymentClient) { + this.paymentClient = paymentClient; } public PaymentResponse confirmPayment(PaymentRequest paymentRequest) { logPaymentInfo(paymentRequest); - return restClient.post() + return paymentClient.post() .uri("/v1/payments/confirm") .contentType(MediaType.APPLICATION_JSON) .body(paymentRequest) @@ -49,7 +49,7 @@ public class TossPaymentClient { logPaymentCancelInfo(cancelRequest); Map param = Map.of("cancelReason", cancelRequest.cancelReason()); - return restClient.post() + return paymentClient.post() .uri("/v1/payments/{paymentKey}/cancel", cancelRequest.paymentKey()) .contentType(MediaType.APPLICATION_JSON) .body(param)