From be19e57b61897026d4419f8e43c7e823f562480f Mon Sep 17 00:00:00 2001 From: pricelees Date: Sun, 28 Sep 2025 13:12:47 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20StartTime=20=EA=B8=B0=EB=A1=9D=EC=9A=A9?= =?UTF-8?q?=20MDC=20=EC=9C=A0=ED=8B=B8=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sangdol/common/utils/MdcStartTimeUtil.kt | 25 ++++++++++++++ .../common/utils/MdcPrincipalIdUtilTest.kt | 2 +- .../common/utils/MdcStartTimeUtilTest.kt | 34 +++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 common/utils/src/main/kotlin/com/sangdol/common/utils/MdcStartTimeUtil.kt create mode 100644 common/utils/src/test/kotlin/com/sangdol/common/utils/MdcStartTimeUtilTest.kt diff --git a/common/utils/src/main/kotlin/com/sangdol/common/utils/MdcStartTimeUtil.kt b/common/utils/src/main/kotlin/com/sangdol/common/utils/MdcStartTimeUtil.kt new file mode 100644 index 00000000..0e15ecfe --- /dev/null +++ b/common/utils/src/main/kotlin/com/sangdol/common/utils/MdcStartTimeUtil.kt @@ -0,0 +1,25 @@ +package com.sangdol.common.utils + +import org.slf4j.MDC + +object MdcStartTimeUtil { + const val MDC_START_TIME_KEY = "start_time" + + fun extractDurationMsOrNull(): Long? { + return extractOrNull()?.let { System.currentTimeMillis() - it } + } + + fun setCurrentTime() { + extractOrNull() ?: run { + MDC.put(MDC_START_TIME_KEY, System.currentTimeMillis().toString()) + } + } + + fun clear() { + MDC.remove(MDC_START_TIME_KEY) + } + + private fun extractOrNull(): Long? { + return MDC.get(MDC_START_TIME_KEY)?.toLong() + } +} diff --git a/common/utils/src/test/kotlin/com/sangdol/common/utils/MdcPrincipalIdUtilTest.kt b/common/utils/src/test/kotlin/com/sangdol/common/utils/MdcPrincipalIdUtilTest.kt index 388c61d8..043d4646 100644 --- a/common/utils/src/test/kotlin/com/sangdol/common/utils/MdcPrincipalIdUtilTest.kt +++ b/common/utils/src/test/kotlin/com/sangdol/common/utils/MdcPrincipalIdUtilTest.kt @@ -25,4 +25,4 @@ class MdcPrincipalIdUtilTest : StringSpec({ MdcPrincipalIdUtil.extractAsOptionalLongOrEmpty() shouldBe Optional.empty() } } -}) \ No newline at end of file +}) diff --git a/common/utils/src/test/kotlin/com/sangdol/common/utils/MdcStartTimeUtilTest.kt b/common/utils/src/test/kotlin/com/sangdol/common/utils/MdcStartTimeUtilTest.kt new file mode 100644 index 00000000..0f57e753 --- /dev/null +++ b/common/utils/src/test/kotlin/com/sangdol/common/utils/MdcStartTimeUtilTest.kt @@ -0,0 +1,34 @@ +package com.sangdol.common.utils + +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.nulls.shouldNotBeNull +import io.kotest.matchers.shouldBe + +class MdcStartTimeUtilTest : FunSpec({ + + test("기존에 등록된 startTime 값을 기준으로 duration_ms를 구한다.") { + MdcStartTimeUtil.setCurrentTime() + MdcStartTimeUtil.extractDurationMsOrNull().shouldNotBeNull() + MdcStartTimeUtil.clear() + } + + test("기존에 등록된 startTime 값이 없으면 duration_ms는 null이다.") { + MdcStartTimeUtil.extractDurationMsOrNull() shouldBe null + } + + test("현재 시간을 등록한다.") { + MdcStartTimeUtil.setCurrentTime() + MdcStartTimeUtil.extractDurationMsOrNull().shouldNotBeNull() + MdcStartTimeUtil.clear() + } + + test("등록된 시간을 지운다.") { + MdcStartTimeUtil.setCurrentTime().also { + MdcStartTimeUtil.extractDurationMsOrNull().shouldNotBeNull() + } + + MdcStartTimeUtil.clear().also { + MdcStartTimeUtil.extractDurationMsOrNull() shouldBe null + } + } +})