diff --git a/src/main/java/com/goormthon/backend/firstsori/domain/message/application/usecase/MessageUseCaseImpl.java b/src/main/java/com/goormthon/backend/firstsori/domain/message/application/usecase/MessageUseCaseImpl.java index cee9797..f5a8f09 100644 --- a/src/main/java/com/goormthon/backend/firstsori/domain/message/application/usecase/MessageUseCaseImpl.java +++ b/src/main/java/com/goormthon/backend/firstsori/domain/message/application/usecase/MessageUseCaseImpl.java @@ -32,7 +32,6 @@ @Slf4j @Service @RequiredArgsConstructor -@Transactional public class MessageUseCaseImpl implements MessageUseCase { private final GetMessageService getMessageService; @@ -42,6 +41,7 @@ public class MessageUseCaseImpl implements MessageUseCase { private final SaveMusicService saveMusicService; private final RedisTemplate redisTemplate; // RedisTemplate 주입 + @Transactional(readOnly = true) @Override public MessageResponse getMessage(UUID messageId) { @@ -62,6 +62,7 @@ public PageResponse getMessages(UUID userId, Pageable pagea } @Override + @Transactional public void createMessage(SaveMessageRequest request) { Board board = getBoardService.getBoardBySharedId(request.shareUri()); diff --git a/src/main/java/com/goormthon/backend/firstsori/domain/music/domain/service/SaveMusicService.java b/src/main/java/com/goormthon/backend/firstsori/domain/music/domain/service/SaveMusicService.java index 608bc24..6906922 100644 --- a/src/main/java/com/goormthon/backend/firstsori/domain/music/domain/service/SaveMusicService.java +++ b/src/main/java/com/goormthon/backend/firstsori/domain/music/domain/service/SaveMusicService.java @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.TransactionSynchronizationAdapter; import org.springframework.transaction.support.TransactionSynchronizationManager; @@ -15,13 +16,18 @@ @Slf4j @Service @RequiredArgsConstructor -@Transactional public class SaveMusicService { private final MusicRepository musicRepository; private final MusicEventProducer musicEventProducer; private final MusicAsyncService musicAsyncService; + /** + * music 저장 전용 트랜잭션 + * - 중복 시 DB 유니크 제약에 의해 실패 + * - 실패해도 상위 트랜잭션(message)은 영향받지 않도록 REQUIRES_NEW + */ + @Transactional(propagation = Propagation.REQUIRES_NEW) public Music saveMusic(Music music) { Music targetMusic;