refactor: PaymentService / PaymentClient에서의 로깅 개선

This commit is contained in:
이상진 2025-10-09 15:56:16 +09:00
parent 308059b5b8
commit 97be1b8a1f
2 changed files with 29 additions and 20 deletions

View File

@ -2,15 +2,10 @@ package com.sangdol.roomescape.payment.business
import com.sangdol.common.persistence.TransactionExecutionUtil import com.sangdol.common.persistence.TransactionExecutionUtil
import com.sangdol.roomescape.payment.business.domain.UserFacingPaymentErrorCode 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.ExternalPaymentException
import com.sangdol.roomescape.payment.exception.PaymentErrorCode import com.sangdol.roomescape.payment.exception.PaymentErrorCode
import com.sangdol.roomescape.payment.exception.PaymentException 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.client.TosspayClient
import com.sangdol.roomescape.payment.infrastructure.persistence.* import com.sangdol.roomescape.payment.infrastructure.persistence.*
import com.sangdol.roomescape.payment.mapper.toResponse import com.sangdol.roomescape.payment.mapper.toResponse
@ -36,20 +31,28 @@ class PaymentService(
return paymentClient.confirm(request.paymentKey, request.orderId, request.amount).also { return paymentClient.confirm(request.paymentKey, request.orderId, request.amount).also {
log.info { "[requestConfirm] 결제 완료: paymentKey=${request.paymentKey}" } log.info { "[requestConfirm] 결제 완료: paymentKey=${request.paymentKey}" }
} }
} catch (e: ExternalPaymentException) { } catch (e: Exception) {
val errorCode = if (e.httpStatusCode in 400..<500) { when(e) {
PaymentErrorCode.PAYMENT_CLIENT_ERROR is ExternalPaymentException -> {
} else { val errorCode = if (e.httpStatusCode in 400..<500) {
PaymentErrorCode.PAYMENT_PROVIDER_ERROR PaymentErrorCode.PAYMENT_CLIENT_ERROR
} } else {
PaymentErrorCode.PAYMENT_PROVIDER_ERROR
}
val message = if (UserFacingPaymentErrorCode.contains(e.errorCode)) { val message = if (UserFacingPaymentErrorCode.contains(e.errorCode)) {
"${errorCode.message}(${e.message})" "${errorCode.message}(${e.message})"
} else { } else {
errorCode.message errorCode.message
} }
throw PaymentException(errorCode, message) throw PaymentException(errorCode, message)
}
else -> {
log.warn(e) { "[requestConfirm] 예상치 못한 결제 실패: paymentKey=${request.paymentKey}" }
throw PaymentException(PaymentErrorCode.PAYMENT_UNEXPECTED_ERROR)
}
}
} }
} }

View File

@ -142,10 +142,16 @@ private class TosspayErrorHandler(
): Nothing { ): Nothing {
val requestType: String = paymentRequestType(url) val requestType: String = paymentRequestType(url)
val errorResponse: TosspayErrorResponse = parseResponse(response) 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( throw ExternalPaymentException(
httpStatusCode = response.statusCode.value(), httpStatusCode = status.value(),
errorCode = errorResponse.code, errorCode = errorResponse.code,
message = errorResponse.message message = errorResponse.message
) )