From 40ea7680c5d7b70a5800adc696bd27c671a1d944 Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 1 Jul 2026 12:36:02 +0900 Subject: [PATCH] =?UTF-8?q?fix(can):=20=EC=BA=94=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=20=EC=A1=B0=ED=9A=8C=20=ED=8A=B8=EB=9E=9C=EC=9E=AD?= =?UTF-8?q?=EC=85=98=EC=9D=84=20=EC=A0=81=EC=9A=A9=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/kr/co/vividnext/sodalive/can/CanService.kt | 2 ++ .../kr/co/vividnext/sodalive/can/CanServiceTest.kt | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/CanService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/CanService.kt index 39680d37..b24964b9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/CanService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/CanService.kt @@ -6,10 +6,12 @@ import kr.co.vividnext.sodalive.common.CountryContext import kr.co.vividnext.sodalive.member.Member import org.springframework.data.domain.Pageable import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional import java.time.ZoneId import java.time.format.DateTimeFormatter @Service +@Transactional(readOnly = true) class CanService( private val repository: CanRepository, private val countryContext: CountryContext diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/can/CanServiceTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/can/CanServiceTest.kt index cbfcef2c..53f2b4a9 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/can/CanServiceTest.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/can/CanServiceTest.kt @@ -10,6 +10,7 @@ import org.junit.jupiter.api.Test import org.mockito.Mockito.mock import org.mockito.Mockito.`when` import org.springframework.data.domain.PageRequest +import org.springframework.transaction.annotation.Transactional import java.time.LocalDateTime class CanServiceTest { @@ -134,6 +135,14 @@ class CanServiceTest { assertEquals("캐릭터 톡 이용권 구매", result[5].title) } + @Test + @DisplayName("캔 서비스 조회 로직은 read-only 트랜잭션 경계에서 실행된다") + fun `should run can service queries in read only transaction`() { + val transactional = CanService::class.java.getAnnotation(Transactional::class.java) + + assertEquals(true, transactional.readOnly) + } + private fun createUseCanDto( usage: CanUsage, can: Int,