From 607688da7eda6872cff4b8132d3143355bb5a723 Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Thu, 12 Feb 2026 16:02:26 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20RestClient=20=EB=A1=9C=EA=B9=85?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- external/build.gradle | 1 + .../global/aop/TosspaymentsLoggingAspect.java | 41 ++++++++++++++ .../payment/external/TosspaymentsClient.java | 56 +++++-------------- 3 files changed, 55 insertions(+), 43 deletions(-) create mode 100644 external/src/main/java/com/samhap/kokomen/global/aop/TosspaymentsLoggingAspect.java diff --git a/external/build.gradle b/external/build.gradle index a818bbd..b03b7e8 100644 --- a/external/build.gradle +++ b/external/build.gradle @@ -6,6 +6,7 @@ dependencies { // implementation 'org.springframework:spring-beans' // implementation 'org.springframework:spring-context' implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-aop' } bootJar { diff --git a/external/src/main/java/com/samhap/kokomen/global/aop/TosspaymentsLoggingAspect.java b/external/src/main/java/com/samhap/kokomen/global/aop/TosspaymentsLoggingAspect.java new file mode 100644 index 0000000..cbe4dd1 --- /dev/null +++ b/external/src/main/java/com/samhap/kokomen/global/aop/TosspaymentsLoggingAspect.java @@ -0,0 +1,41 @@ +package com.samhap.kokomen.global.aop; + +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.util.StopWatch; +import org.springframework.web.client.HttpClientErrorException; + +@Slf4j +@Order(1) +@Aspect +@Component +public class TosspaymentsLoggingAspect { + + @Around("execution(* com.samhap.kokomen.payment.external.TosspaymentsClient.*(..))") + public Object logTosspaymentsApiCall(ProceedingJoinPoint joinPoint) throws Throwable { + String methodName = joinPoint.getSignature().getName(); + Object[] args = joinPoint.getArgs(); + + log.info("[토스페이먼츠 API 요청] {} - args: {}", methodName, args); + + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + try { + Object result = joinPoint.proceed(); + stopWatch.stop(); + log.info("[토스페이먼츠 API 응답] {} - {}ms - response: {}", + methodName, stopWatch.getTotalTimeMillis(), result); + return result; + } catch (HttpClientErrorException e) { + stopWatch.stop(); + log.error("[토스페이먼츠 API 실패] {} - {}ms - status: {}, body: {}", + methodName, stopWatch.getTotalTimeMillis(), + e.getStatusCode(), e.getResponseBodyAsString(), e); + throw e; + } + } +} diff --git a/external/src/main/java/com/samhap/kokomen/payment/external/TosspaymentsClient.java b/external/src/main/java/com/samhap/kokomen/payment/external/TosspaymentsClient.java index cebe58b..12380ec 100644 --- a/external/src/main/java/com/samhap/kokomen/payment/external/TosspaymentsClient.java +++ b/external/src/main/java/com/samhap/kokomen/payment/external/TosspaymentsClient.java @@ -1,16 +1,11 @@ package com.samhap.kokomen.payment.external; -import com.samhap.kokomen.global.annotation.ExecutionTimer; import com.samhap.kokomen.payment.external.dto.TosspaymentsConfirmRequest; import com.samhap.kokomen.payment.external.dto.TosspaymentsPaymentCancelRequest; import com.samhap.kokomen.payment.external.dto.TosspaymentsPaymentResponse; -import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestClient; -@Slf4j -@ExecutionTimer @Component public class TosspaymentsClient { @@ -21,45 +16,20 @@ public TosspaymentsClient(TossPaymentsClientBuilder tossPaymentsClientBuilder) { } public TosspaymentsPaymentResponse confirmPayment(TosspaymentsConfirmRequest request) { - try { - // TODO: interceptor로 로깅 처리 - log.info("토스페이먼츠 결제 승인 API 호출 - paymentKey: {}, orderId: {}, amount: {}", - request.paymentKey(), request.orderId(), request.amount()); - - TosspaymentsPaymentResponse response = restClient.post() - .uri("/v1/payments/confirm") - .body(request) - .retrieve() - .body(TosspaymentsPaymentResponse.class); - log.info("토스페이먼츠 결제 승인 완료 - response: {}", response); - - return response; - - } catch (HttpClientErrorException e) { - log.error("토스페이먼츠 결제 승인 실패 - paymentKey: {}, status: {}, responseBody: {}", - request.paymentKey(), e.getStatusCode(), e.getResponseBodyAsString(), e); - throw e; - } + return restClient.post() + .uri("/v1/payments/confirm") + .body(request) + .retrieve() + .body(TosspaymentsPaymentResponse.class); } - public TosspaymentsPaymentResponse cancelPayment(String paymentKey, TosspaymentsPaymentCancelRequest request) { - try { - log.info("토스페이먼츠 결제 취소 API 호출 - paymentKey: {}, cancelReason: {}", - paymentKey, request.cancelReason()); - - TosspaymentsPaymentResponse response = restClient.post() - .uri("/v1/payments/{paymentKey}/cancel", paymentKey) - .body(request) - .retrieve() - .body(TosspaymentsPaymentResponse.class); - log.info("토스페이먼츠 결제 취소 완료 - response: {}", response); - - return response; - - } catch (HttpClientErrorException e) { - log.error("토스페이먼츠 결제 취소 실패 - paymentKey: {}, status: {}, responseBody: {}", - paymentKey, e.getStatusCode(), e.getResponseBodyAsString(), e); - throw e; - } + public TosspaymentsPaymentResponse cancelPayment( + String paymentKey, + TosspaymentsPaymentCancelRequest request) { + return restClient.post() + .uri("/v1/payments/{paymentKey}/cancel", paymentKey) + .body(request) + .retrieve() + .body(TosspaymentsPaymentResponse.class); } } From bb229b3f05ba7afec7795cd356cfa14026587118 Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Thu, 12 Feb 2026 16:33:08 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20RestClient=20=EB=A1=9C=EA=B9=85?= =?UTF-8?q?=20=EC=A4=91=EB=B3=B5=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/aop/TosspaymentsLoggingAspect.java | 19 +++++-------------- .../payment/external/TosspaymentsClient.java | 3 ++- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/external/src/main/java/com/samhap/kokomen/global/aop/TosspaymentsLoggingAspect.java b/external/src/main/java/com/samhap/kokomen/global/aop/TosspaymentsLoggingAspect.java index cbe4dd1..88b02e4 100644 --- a/external/src/main/java/com/samhap/kokomen/global/aop/TosspaymentsLoggingAspect.java +++ b/external/src/main/java/com/samhap/kokomen/global/aop/TosspaymentsLoggingAspect.java @@ -7,7 +7,6 @@ import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.util.StopWatch; -import org.springframework.web.client.HttpClientErrorException; @Slf4j @Order(1) @@ -24,18 +23,10 @@ public Object logTosspaymentsApiCall(ProceedingJoinPoint joinPoint) throws Throw StopWatch stopWatch = new StopWatch(); stopWatch.start(); - try { - Object result = joinPoint.proceed(); - stopWatch.stop(); - log.info("[토스페이먼츠 API 응답] {} - {}ms - response: {}", - methodName, stopWatch.getTotalTimeMillis(), result); - return result; - } catch (HttpClientErrorException e) { - stopWatch.stop(); - log.error("[토스페이먼츠 API 실패] {} - {}ms - status: {}, body: {}", - methodName, stopWatch.getTotalTimeMillis(), - e.getStatusCode(), e.getResponseBodyAsString(), e); - throw e; - } + Object result = joinPoint.proceed(); + stopWatch.stop(); + log.info("[토스페이먼츠 API 응답] {} - {}ms - response: {}", + methodName, stopWatch.getTotalTimeMillis(), result); + return result; } } diff --git a/external/src/main/java/com/samhap/kokomen/payment/external/TosspaymentsClient.java b/external/src/main/java/com/samhap/kokomen/payment/external/TosspaymentsClient.java index 12380ec..93dca34 100644 --- a/external/src/main/java/com/samhap/kokomen/payment/external/TosspaymentsClient.java +++ b/external/src/main/java/com/samhap/kokomen/payment/external/TosspaymentsClient.java @@ -25,7 +25,8 @@ public TosspaymentsPaymentResponse confirmPayment(TosspaymentsConfirmRequest req public TosspaymentsPaymentResponse cancelPayment( String paymentKey, - TosspaymentsPaymentCancelRequest request) { + TosspaymentsPaymentCancelRequest request + ) { return restClient.post() .uri("/v1/payments/{paymentKey}/cancel", paymentKey) .body(request)