diff --git a/src/main/java/com/ayucoupon/coupon/domain/CouponRepository.java b/src/main/java/com/ayucoupon/coupon/domain/CouponRepository.java
index fa28820..e2b8c4a 100644
--- a/src/main/java/com/ayucoupon/coupon/domain/CouponRepository.java
+++ b/src/main/java/com/ayucoupon/coupon/domain/CouponRepository.java
@@ -5,7 +5,10 @@
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Lock;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.List;
@@ -16,6 +19,9 @@ public interface CouponRepository extends JpaRepository<Coupon, Long> {
     @Query("select c from Coupon c where c.couponId=:couponId")
     Coupon findByIdWithPessimisticLock(Long couponId);
 
+    @Query("select c.usageHours from Coupon c where c.couponId=:couponId")
+    Long findCouponUsageHours(Long couponId);
+
     @Query("select c from Coupon c " +
             "where c.issuePeriod.startedAt <= :currentTime and :currentTime <= c.issuePeriod.finishedAt")
     List<Coupon> findCouponsInProgress(LocalDateTime currentTime, Pageable pageable);
diff --git a/src/main/java/com/ayucoupon/usercoupon/service/issue/IssueUserCouponModuleImpl.java b/src/main/java/com/ayucoupon/usercoupon/service/issue/IssueUserCouponModuleImpl.java
index 74f078b..eeea544 100644
--- a/src/main/java/com/ayucoupon/usercoupon/service/issue/IssueUserCouponModuleImpl.java
+++ b/src/main/java/com/ayucoupon/usercoupon/service/issue/IssueUserCouponModuleImpl.java
@@ -20,21 +20,22 @@ public class IssueUserCouponModuleImpl implements IssueUserCouponModule {
     @Override
     @Transactional
     public Long issue(IssueUserCouponCommand command) {
-        UserCoupon issuedUserCoupon = issueUserCoupon(command);
-        return saveCoupon(issuedUserCoupon);
-    }
-
-    private UserCoupon issueUserCoupon(IssueUserCouponCommand command) {
-        Coupon coupon = couponRepository.findByIdWithPessimisticLock(command.couponId());
-
         LocalDateTime currentTime = LocalDateTime.now();
+        Long userCouponId = issueUserCoupon(command, currentTime);
+        decreaseCouponQuantity(command, currentTime);
+        return userCouponId;
+    }
 
-        coupon.decrease(currentTime);
-        return new UserCoupon(command.userId(), coupon.getCouponId(), coupon.getUsageHours(), currentTime);
+    private Long issueUserCoupon(IssueUserCouponCommand command, LocalDateTime currentTime) {
+        Long couponUsageHours = couponRepository.findCouponUsageHours(command.couponId());
+        UserCoupon issuedCoupon = new UserCoupon(command.userId(), command.couponId(), couponUsageHours, currentTime);
+        return userCouponRepository.save(issuedCoupon)
+                .getUserCouponId();
     }
 
-    private Long saveCoupon(UserCoupon issuedCoupon) {
-        return userCouponRepository.save(issuedCoupon).getUserCouponId();
+    private void decreaseCouponQuantity(IssueUserCouponCommand command, LocalDateTime currentTime) {
+        Coupon coupon = couponRepository.findByIdWithPessimisticLock(command.couponId());
+        coupon.decrease(currentTime);
     }
 
 }