From 97be1b8a1f082858f0e1c38a81a7adf197d40002 Mon Sep 17 00:00:00 2001 From: pricelees Date: Thu, 9 Oct 2025 15:56:16 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20PaymentService=20/=20PaymentClient?= =?UTF-8?q?=EC=97=90=EC=84=9C=EC=9D=98=20=EB=A1=9C=EA=B9=85=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payment/business/PaymentService.kt | 39 ++++++++++--------- .../infrastructure/client/TosspayClient.kt | 10 ++++- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/service/src/main/kotlin/com/sangdol/roomescape/payment/business/PaymentService.kt b/service/src/main/kotlin/com/sangdol/roomescape/payment/business/PaymentService.kt index 7985b20d..99794588 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/payment/business/PaymentService.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/payment/business/PaymentService.kt @@ -2,15 +2,10 @@ package com.sangdol.roomescape.payment.business import com.sangdol.common.persistence.TransactionExecutionUtil import com.sangdol.roomescape.payment.business.domain.UserFacingPaymentErrorCode -import com.sangdol.roomescape.payment.dto.PaymentCancelRequest +import com.sangdol.roomescape.payment.dto.* import com.sangdol.roomescape.payment.exception.ExternalPaymentException import com.sangdol.roomescape.payment.exception.PaymentErrorCode import com.sangdol.roomescape.payment.exception.PaymentException -import com.sangdol.roomescape.payment.dto.PaymentGatewayCancelResponse -import com.sangdol.roomescape.payment.dto.PaymentConfirmRequest -import com.sangdol.roomescape.payment.dto.PaymentCreateResponse -import com.sangdol.roomescape.payment.dto.PaymentGatewayResponse -import com.sangdol.roomescape.payment.dto.PaymentResponse import com.sangdol.roomescape.payment.infrastructure.client.TosspayClient import com.sangdol.roomescape.payment.infrastructure.persistence.* import com.sangdol.roomescape.payment.mapper.toResponse @@ -36,20 +31,28 @@ class PaymentService( return paymentClient.confirm(request.paymentKey, request.orderId, request.amount).also { log.info { "[requestConfirm] 결제 완료: paymentKey=${request.paymentKey}" } } - } catch (e: ExternalPaymentException) { - val errorCode = if (e.httpStatusCode in 400..<500) { - PaymentErrorCode.PAYMENT_CLIENT_ERROR - } else { - PaymentErrorCode.PAYMENT_PROVIDER_ERROR - } + } catch (e: Exception) { + when(e) { + is ExternalPaymentException -> { + val errorCode = if (e.httpStatusCode in 400..<500) { + PaymentErrorCode.PAYMENT_CLIENT_ERROR + } else { + PaymentErrorCode.PAYMENT_PROVIDER_ERROR + } - val message = if (UserFacingPaymentErrorCode.contains(e.errorCode)) { - "${errorCode.message}(${e.message})" - } else { - errorCode.message - } + val message = if (UserFacingPaymentErrorCode.contains(e.errorCode)) { + "${errorCode.message}(${e.message})" + } else { + errorCode.message + } - throw PaymentException(errorCode, message) + throw PaymentException(errorCode, message) + } + else -> { + log.warn(e) { "[requestConfirm] 예상치 못한 결제 실패: paymentKey=${request.paymentKey}" } + throw PaymentException(PaymentErrorCode.PAYMENT_UNEXPECTED_ERROR) + } + } } } diff --git a/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/client/TosspayClient.kt b/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/client/TosspayClient.kt index f296fc38..d769bb35 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/client/TosspayClient.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/payment/infrastructure/client/TosspayClient.kt @@ -142,10 +142,16 @@ private class TosspayErrorHandler( ): Nothing { val requestType: String = paymentRequestType(url) val errorResponse: TosspayErrorResponse = parseResponse(response) - log.warn { "[TosspayClient] $requestType 요청 실패: response: $errorResponse" } + val status = response.statusCode + + if (status.is5xxServerError) { + log.warn { "[TosspayClient] $requestType 요청 실패: response: $errorResponse" } + } else { + log.info { "[TosspayClient] $requestType 요청 실패: response: $errorResponse" } + } throw ExternalPaymentException( - httpStatusCode = response.statusCode.value(), + httpStatusCode = status.value(), errorCode = errorResponse.code, message = errorResponse.message )