From afedaa21b85eb24ba94af0bca878ee1de519b024 Mon Sep 17 00:00:00 2001 From: pricelees Date: Tue, 16 Sep 2025 11:20:38 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=ED=9A=8C=EC=9B=90=20/=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=EC=9E=90=20PK=20=EA=B8=B0=EB=B0=98=20MDC=20=EC=9C=A0?= =?UTF-8?q?=ED=8B=B8=20=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/interceptors/AdminInterceptor.kt | 5 ++-- .../support/interceptors/UserInterceptor.kt | 5 ++-- .../roomescape/common/config/JpaConfig.kt | 13 ++------- .../roomescape/common/dto/CommonAuth.kt | 1 - .../common/log/ApiLogMessageConverter.kt | 7 +++-- .../kotlin/roomescape/common/util/MDCUtils.kt | 27 +++++++++++++++++++ 6 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 src/main/kotlin/roomescape/common/util/MDCUtils.kt diff --git a/src/main/kotlin/roomescape/auth/web/support/interceptors/AdminInterceptor.kt b/src/main/kotlin/roomescape/auth/web/support/interceptors/AdminInterceptor.kt index 2bd227f6..ed608e37 100644 --- a/src/main/kotlin/roomescape/auth/web/support/interceptors/AdminInterceptor.kt +++ b/src/main/kotlin/roomescape/auth/web/support/interceptors/AdminInterceptor.kt @@ -4,7 +4,6 @@ import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KotlinLogging import jakarta.servlet.http.HttpServletRequest import jakarta.servlet.http.HttpServletResponse -import org.slf4j.MDC import org.springframework.stereotype.Component import org.springframework.web.method.HandlerMethod import org.springframework.web.servlet.HandlerInterceptor @@ -18,7 +17,7 @@ import roomescape.auth.exception.AuthException import roomescape.auth.infrastructure.jwt.JwtUtils import roomescape.auth.web.support.AdminOnly import roomescape.auth.web.support.accessToken -import roomescape.common.dto.MDC_PRINCIPAL_ID_KEY +import roomescape.common.util.MdcPrincipalId private val log: KLogger = KotlinLogging.logger {} @@ -39,7 +38,7 @@ class AdminInterceptor( try { run { - val id: String = jwtUtils.extractSubject(token).also { MDC.put(MDC_PRINCIPAL_ID_KEY, it) } + val id: String = jwtUtils.extractSubject(token).also { MdcPrincipalId.set(it) } val type: AdminType = validateTypeAndGet(token, annotation.type) val permission: AdminPermissionLevel = validatePermissionAndGet(token, annotation.privilege) diff --git a/src/main/kotlin/roomescape/auth/web/support/interceptors/UserInterceptor.kt b/src/main/kotlin/roomescape/auth/web/support/interceptors/UserInterceptor.kt index ce02d644..4db11d08 100644 --- a/src/main/kotlin/roomescape/auth/web/support/interceptors/UserInterceptor.kt +++ b/src/main/kotlin/roomescape/auth/web/support/interceptors/UserInterceptor.kt @@ -4,7 +4,6 @@ import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KotlinLogging import jakarta.servlet.http.HttpServletRequest import jakarta.servlet.http.HttpServletResponse -import org.slf4j.MDC import org.springframework.stereotype.Component import org.springframework.web.method.HandlerMethod import org.springframework.web.servlet.HandlerInterceptor @@ -14,7 +13,7 @@ import roomescape.auth.exception.AuthException import roomescape.auth.infrastructure.jwt.JwtUtils import roomescape.auth.web.support.UserOnly import roomescape.auth.web.support.accessToken -import roomescape.common.dto.MDC_PRINCIPAL_ID_KEY +import roomescape.common.util.MdcPrincipalId private val log: KLogger = KotlinLogging.logger {} @@ -34,7 +33,7 @@ class UserInterceptor( val token: String? = request.accessToken() try { - val id: String = jwtUtils.extractSubject(token).also { MDC.put(MDC_PRINCIPAL_ID_KEY, it) } + val id: String = jwtUtils.extractSubject(token).also { MdcPrincipalId.set(it) } /** * CLAIM_ADMIN_TYPE_KEY 가 존재하면 관리자 토큰임 diff --git a/src/main/kotlin/roomescape/common/config/JpaConfig.kt b/src/main/kotlin/roomescape/common/config/JpaConfig.kt index 8944e26a..29a14094 100644 --- a/src/main/kotlin/roomescape/common/config/JpaConfig.kt +++ b/src/main/kotlin/roomescape/common/config/JpaConfig.kt @@ -1,11 +1,10 @@ package roomescape.common.config -import org.slf4j.MDC import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.data.domain.AuditorAware import org.springframework.data.jpa.repository.config.EnableJpaAuditing -import roomescape.common.dto.MDC_PRINCIPAL_ID_KEY +import roomescape.common.util.MdcPrincipalId import java.util.* @Configuration @@ -17,13 +16,5 @@ class JpaConfig { } class MdcAuditorAware : AuditorAware { - override fun getCurrentAuditor(): Optional { - val memberIdStr: String? = MDC.get(MDC_PRINCIPAL_ID_KEY) - - if (memberIdStr == null) { - return Optional.empty() - } else { - return Optional.of(memberIdStr.toLong()) - } - } + override fun getCurrentAuditor(): Optional = MdcPrincipalId.extractAsOptionalLongOrEmpty() } diff --git a/src/main/kotlin/roomescape/common/dto/CommonAuth.kt b/src/main/kotlin/roomescape/common/dto/CommonAuth.kt index af9b36f6..3d037d55 100644 --- a/src/main/kotlin/roomescape/common/dto/CommonAuth.kt +++ b/src/main/kotlin/roomescape/common/dto/CommonAuth.kt @@ -8,7 +8,6 @@ import roomescape.auth.web.LoginSuccessResponse import roomescape.auth.web.UserLoginSuccessResponse import roomescape.user.infrastructure.persistence.UserEntity -const val MDC_PRINCIPAL_ID_KEY: String = "principal_id" abstract class LoginCredentials { abstract val id: Long diff --git a/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt b/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt index 85e042be..8cf19eab 100644 --- a/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt +++ b/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt @@ -2,8 +2,7 @@ package roomescape.common.log import com.fasterxml.jackson.databind.ObjectMapper import jakarta.servlet.http.HttpServletRequest -import org.slf4j.MDC -import roomescape.common.dto.MDC_PRINCIPAL_ID_KEY +import roomescape.common.util.MdcPrincipalId enum class LogType { INCOMING_HTTP_REQUEST, @@ -34,7 +33,7 @@ class ApiLogMessageConverter( controllerPayload: Map, ): String { val payload: MutableMap = commonRequestPayload(LogType.CONTROLLER_INVOKED, request) - val memberId: Long? = MDC.get(MDC_PRINCIPAL_ID_KEY)?.toLong() + val memberId: Long? = MdcPrincipalId.extractAsLongOrNull() if (memberId != null) payload["principal_id"] = memberId else payload["principal_id"] = "NONE" payload.putAll(controllerPayload) @@ -48,7 +47,7 @@ class ApiLogMessageConverter( payload["endpoint"] = request.endpoint payload["status_code"] = request.httpStatus - MDC.get(MDC_PRINCIPAL_ID_KEY)?.toLongOrNull() + MdcPrincipalId.extractAsLongOrNull() ?.let { payload["principal_id"] = it } ?: run { payload["principal_id"] = "NONE" } diff --git a/src/main/kotlin/roomescape/common/util/MDCUtils.kt b/src/main/kotlin/roomescape/common/util/MDCUtils.kt new file mode 100644 index 00000000..b5e477bb --- /dev/null +++ b/src/main/kotlin/roomescape/common/util/MDCUtils.kt @@ -0,0 +1,27 @@ +package roomescape.common.util + +import org.slf4j.MDC +import java.util.Optional + +private const val MDC_PRINCIPAL_ID_KEY = "principal_id" + +object MdcPrincipalId { + + fun extractAsLongOrNull(): Long? { + return MDC.get(MDC_PRINCIPAL_ID_KEY)?.toLong() + } + + fun extractAsOptionalLongOrEmpty(): Optional { + return MDC.get(MDC_PRINCIPAL_ID_KEY)?.let { + Optional.of(it.toLong()) + } ?: Optional.empty() + } + + fun set(id: String) { + MDC.put(MDC_PRINCIPAL_ID_KEY, id) + } + + fun clear() { + MDC.remove(MDC_PRINCIPAL_ID_KEY) + } +}