diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponRepository.kt
index 012ab52..0882f50 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponRepository.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponRepository.kt
@@ -1,14 +1,18 @@
 package kr.co.vividnext.sodalive.can.coupon
 
+import com.querydsl.core.types.dsl.DateTimePath
+import com.querydsl.core.types.dsl.Expressions
+import com.querydsl.core.types.dsl.StringTemplate
 import com.querydsl.jpa.impl.JPAQueryFactory
 import kr.co.vividnext.sodalive.can.coupon.QCanCoupon.canCoupon
 import org.springframework.data.jpa.repository.JpaRepository
+import java.time.LocalDateTime
 
 interface CanCouponRepository : JpaRepository<CanCoupon, Long>, CanCouponQueryRepository
 
 interface CanCouponQueryRepository {
     fun getCouponTotalCount(): Int
-    fun getCouponList(offset: Long, limit: Long): List<CanCoupon>
+    fun getCouponList(offset: Long, limit: Long): List<GetCouponListItemResponse>
 }
 
 class CanCouponQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : CanCouponQueryRepository {
@@ -20,12 +24,38 @@ class CanCouponQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) :
             .size
     }
 
-    override fun getCouponList(offset: Long, limit: Long): List<CanCoupon> {
+    override fun getCouponList(offset: Long, limit: Long): List<GetCouponListItemResponse> {
         return queryFactory
-            .selectFrom(canCoupon)
+            .select(
+                QGetCouponListItemResponse(
+                    canCoupon.id,
+                    canCoupon.couponName,
+                    canCoupon.can,
+                    canCoupon.couponCount,
+                    Expressions.ZERO,
+                    getFormattedDate(canCoupon.validity),
+                    canCoupon.isMultipleUse,
+                    canCoupon.isActive
+                )
+            )
+            .from(canCoupon)
             .orderBy(canCoupon.id.desc())
             .offset(offset)
             .limit(limit)
             .fetch()
     }
+
+    private fun getFormattedDate(dateTimePath: DateTimePath<LocalDateTime>): StringTemplate {
+        return Expressions.stringTemplate(
+            "DATE_FORMAT({0}, {1})",
+            Expressions.dateTimeTemplate(
+                LocalDateTime::class.java,
+                "CONVERT_TZ({0},{1},{2})",
+                dateTimePath,
+                "UTC",
+                "Asia/Seoul"
+            ),
+            "%Y-%m-%d"
+        )
+    }
 }
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt
index 8fa9f8e..d8fbde0 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt
@@ -72,17 +72,9 @@ class CanCouponService(
         val items = repository.getCouponList(offset = offset, limit = limit)
             .asSequence()
             .map {
-                val useCouponCount = couponNumberRepository.getUseCouponCount(id = it.id!!)
-                GetCouponListItemResponse(
-                    id = it.id!!,
-                    couponName = it.couponName,
-                    can = it.can,
-                    couponCount = it.couponCount,
-                    useCouponCount = useCouponCount,
-                    validity = it.validity.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")),
-                    isMultipleUse = it.isMultipleUse,
-                    isActive = it.isActive
-                )
+                val useCouponCount = couponNumberRepository.getUseCouponCount(id = it.id)
+                it.useCouponCount = useCouponCount
+                it
             }
             .toList()
 
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponListResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponListResponse.kt
index f26bab4..ff416a7 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponListResponse.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponListResponse.kt
@@ -1,16 +1,18 @@
 package kr.co.vividnext.sodalive.can.coupon
 
+import com.querydsl.core.annotations.QueryProjection
+
 data class GetCouponListResponse(
     val totalCount: Int,
     val items: List<GetCouponListItemResponse>
 )
 
-data class GetCouponListItemResponse(
+data class GetCouponListItemResponse @QueryProjection constructor(
     val id: Long,
     val couponName: String,
     val can: Int,
     val couponCount: Int,
-    val useCouponCount: Int,
+    var useCouponCount: Int,
     val validity: String,
     val isMultipleUse: Boolean,
     val isActive: Boolean