refactor: common.utils에 분리된 MDC Util 서비스 반영

This commit is contained in:
이상진 2025-09-27 20:27:58 +09:00
parent 81572246d2
commit eada35f1ee
7 changed files with 12 additions and 38 deletions

View File

@ -55,6 +55,7 @@ dependencies {
// submodules // submodules
implementation(project(":common:config")) implementation(project(":common:config"))
implementation(project(":common:persistence")) implementation(project(":common:persistence"))
implementation(project(":common:utils"))
} }
tasks.jar { tasks.jar {

View File

@ -17,7 +17,7 @@ import com.sangdol.roomescape.auth.exception.AuthException
import com.sangdol.roomescape.auth.infrastructure.jwt.JwtUtils import com.sangdol.roomescape.auth.infrastructure.jwt.JwtUtils
import com.sangdol.roomescape.auth.web.support.AdminOnly import com.sangdol.roomescape.auth.web.support.AdminOnly
import com.sangdol.roomescape.auth.web.support.accessToken import com.sangdol.roomescape.auth.web.support.accessToken
import com.sangdol.roomescape.common.util.MdcPrincipalId import com.sangdol.common.utils.MdcPrincipalIdUtil
private val log: KLogger = KotlinLogging.logger {} private val log: KLogger = KotlinLogging.logger {}
@ -38,7 +38,7 @@ class AdminInterceptor(
try { try {
run { run {
val id: String = jwtUtils.extractSubject(token).also { MdcPrincipalId.set(it) } val id: String = jwtUtils.extractSubject(token).also { MdcPrincipalIdUtil.set(it) }
val type: AdminType = validateTypeAndGet(token, annotation.type) val type: AdminType = validateTypeAndGet(token, annotation.type)
val permission: AdminPermissionLevel = validatePermissionAndGet(token, annotation.privilege) val permission: AdminPermissionLevel = validatePermissionAndGet(token, annotation.privilege)

View File

@ -13,7 +13,7 @@ import com.sangdol.roomescape.auth.exception.AuthException
import com.sangdol.roomescape.auth.infrastructure.jwt.JwtUtils import com.sangdol.roomescape.auth.infrastructure.jwt.JwtUtils
import com.sangdol.roomescape.auth.web.support.UserOnly import com.sangdol.roomescape.auth.web.support.UserOnly
import com.sangdol.roomescape.auth.web.support.accessToken import com.sangdol.roomescape.auth.web.support.accessToken
import com.sangdol.roomescape.common.util.MdcPrincipalId import com.sangdol.common.utils.MdcPrincipalIdUtil
private val log: KLogger = KotlinLogging.logger {} private val log: KLogger = KotlinLogging.logger {}
@ -33,7 +33,7 @@ class UserInterceptor(
val token: String? = request.accessToken() val token: String? = request.accessToken()
try { try {
val id: String = jwtUtils.extractSubject(token).also { MdcPrincipalId.set(it) } val id: String = jwtUtils.extractSubject(token).also { MdcPrincipalIdUtil.set(it) }
/** /**
* CLAIM_ADMIN_TYPE_KEY 존재하면 관리자 토큰임 * CLAIM_ADMIN_TYPE_KEY 존재하면 관리자 토큰임

View File

@ -2,7 +2,7 @@ package com.sangdol.roomescape.common.log
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper
import jakarta.servlet.http.HttpServletRequest import jakarta.servlet.http.HttpServletRequest
import com.sangdol.roomescape.common.util.MdcPrincipalId import com.sangdol.common.utils.MdcPrincipalIdUtil
enum class LogType { enum class LogType {
INCOMING_HTTP_REQUEST, INCOMING_HTTP_REQUEST,
@ -33,7 +33,7 @@ class ApiLogMessageConverter(
controllerPayload: Map<String, Any>, controllerPayload: Map<String, Any>,
): String { ): String {
val payload: MutableMap<String, Any> = commonRequestPayload(LogType.CONTROLLER_INVOKED, request) val payload: MutableMap<String, Any> = commonRequestPayload(LogType.CONTROLLER_INVOKED, request)
val memberId: Long? = MdcPrincipalId.extractAsLongOrNull() val memberId: Long? = MdcPrincipalIdUtil.extractAsLongOrNull()
if (memberId != null) payload["principal_id"] = memberId else payload["principal_id"] = "NONE" if (memberId != null) payload["principal_id"] = memberId else payload["principal_id"] = "NONE"
payload.putAll(controllerPayload) payload.putAll(controllerPayload)
@ -47,7 +47,7 @@ class ApiLogMessageConverter(
payload["endpoint"] = request.endpoint payload["endpoint"] = request.endpoint
payload["status_code"] = request.httpStatus payload["status_code"] = request.httpStatus
MdcPrincipalId.extractAsLongOrNull() MdcPrincipalIdUtil.extractAsLongOrNull()
?.let { payload["principal_id"] = it } ?.let { payload["principal_id"] = it }
?: run { payload["principal_id"] = "NONE" } ?: run { payload["principal_id"] = "NONE" }

View File

@ -9,7 +9,7 @@ import org.slf4j.MDC
import org.springframework.web.filter.OncePerRequestFilter import org.springframework.web.filter.OncePerRequestFilter
import org.springframework.web.util.ContentCachingRequestWrapper import org.springframework.web.util.ContentCachingRequestWrapper
import org.springframework.web.util.ContentCachingResponseWrapper import org.springframework.web.util.ContentCachingResponseWrapper
import com.sangdol.roomescape.common.util.MdcPrincipalId import com.sangdol.common.utils.MdcPrincipalIdUtil
private val log: KLogger = KotlinLogging.logger {} private val log: KLogger = KotlinLogging.logger {}
@ -34,7 +34,7 @@ class HttpRequestLoggingFilter(
cachedResponse.copyBodyToResponse() cachedResponse.copyBodyToResponse()
} finally { } finally {
MDC.remove("startTime") MDC.remove("startTime")
MdcPrincipalId.clear() MdcPrincipalIdUtil.clear()
} }
} }
} }

View File

@ -1,27 +0,0 @@
package com.sangdol.roomescape.common.util
import org.slf4j.MDC
import java.util.*
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<Long> {
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)
}
}

View File

@ -1,7 +1,7 @@
package com.sangdol.roomescape.schedule.infrastructure.persistence package com.sangdol.roomescape.schedule.infrastructure.persistence
import com.sangdol.common.persistence.PersistableBaseEntity import com.sangdol.common.persistence.PersistableBaseEntity
import com.sangdol.roomescape.common.util.MdcPrincipalId import com.sangdol.common.utils.MdcPrincipalIdUtil
import jakarta.persistence.* import jakarta.persistence.*
import org.springframework.data.annotation.CreatedBy import org.springframework.data.annotation.CreatedBy
import org.springframework.data.annotation.CreatedDate import org.springframework.data.annotation.CreatedDate
@ -53,7 +53,7 @@ class ScheduleEntity(
} }
fun updateLastModifiedBy() { fun updateLastModifiedBy() {
MdcPrincipalId.extractAsLongOrNull()?.also { this.updatedBy = it } MdcPrincipalIdUtil.extractAsLongOrNull()?.also { this.updatedBy = it }
} }
} }