From 4e09934bfe55701623eb8a1d3d518bc900c66c73 Mon Sep 17 00:00:00 2001 From: ian Date: Wed, 20 Aug 2025 21:29:56 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Fix:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=9C=20READ=20ONLY=20=ED=8A=B8=EB=9E=9C=EC=9E=AD=EC=85=98?= =?UTF-8?q?=EC=97=90=EC=84=9C=20FOR=20UPDATE=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EatPic/spring/domain/user/service/UserServiceImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/EatPic/spring/domain/user/service/UserServiceImpl.java b/src/main/java/EatPic/spring/domain/user/service/UserServiceImpl.java index 3e02d93..2558b22 100644 --- a/src/main/java/EatPic/spring/domain/user/service/UserServiceImpl.java +++ b/src/main/java/EatPic/spring/domain/user/service/UserServiceImpl.java @@ -31,6 +31,7 @@ import org.springframework.security.core.Authentication; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import EatPic.spring.global.aws.s3.*; @@ -40,7 +41,7 @@ import static EatPic.spring.global.common.code.status.ErrorStatus.*; @Service -@Transactional +@Transactional(readOnly = true) @RequiredArgsConstructor public class UserServiceImpl implements UserService{ @@ -96,6 +97,7 @@ public SignupResponseDTO signup(SignupRequestDTO request) { // 로그인 @Override + @Transactional(readOnly = false) public LoginResponseDTO loginUser(LoginRequestDTO request){ User user = userRepository.findByEmail(request.getEmail()) .orElseThrow(()-> new ExceptionHandler(ErrorStatus.MEMBER_NOT_FOUND)); @@ -247,6 +249,7 @@ public boolean isNicknameDuplicate(String nickname) { } @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) public User getLoginUser(HttpServletRequest request) { Authentication authentication = jwtTokenProvider.extractAuthentication(request); String email = authentication.getName(); From be6f13a0056e08b8962d4cae3684bb9e447c01ad Mon Sep 17 00:00:00 2001 From: ian Date: Wed, 20 Aug 2025 21:37:04 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Refactor:=20=EC=A0=9C=EB=AF=B8=EB=82=98?= =?UTF-8?q?=EC=9D=B4=20@Transactional=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EatPic/spring/domain/user/service/UserServiceImpl.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/EatPic/spring/domain/user/service/UserServiceImpl.java b/src/main/java/EatPic/spring/domain/user/service/UserServiceImpl.java index 2558b22..52a577e 100644 --- a/src/main/java/EatPic/spring/domain/user/service/UserServiceImpl.java +++ b/src/main/java/EatPic/spring/domain/user/service/UserServiceImpl.java @@ -58,6 +58,7 @@ public class UserServiceImpl implements UserService{ private final AmazonS3Manager s3Manager; // 회원가입 + @Transactional(readOnly = false) public SignupResponseDTO signup(SignupRequestDTO request) { // 이메일 중복 검사 if (userRepository.existsByEmail(request.getEmail())) { @@ -272,6 +273,7 @@ public UserResponseDTO.DetailProfileDto getProfile(HttpServletRequest request, L } @Override + @Transactional(readOnly = false) public UserResponseDTO.UserActionResponseDto unfollowUser(HttpServletRequest request, Long targetUserId) { User user = getLoginUser(request); User target = userRepository.findUserById(targetUserId); @@ -287,6 +289,7 @@ public UserResponseDTO.UserActionResponseDto unfollowUser(HttpServletRequest req } @Override + @Transactional(readOnly = false) public UserResponseDTO.UserActionResponseDto followUser(HttpServletRequest request, Long targetUserId) { User user = getLoginUser(request); if(user.getId().equals(targetUserId)) { @@ -309,6 +312,7 @@ public UserResponseDTO.UserActionResponseDto followUser(HttpServletRequest reque // 유저 프로필 이미지 업데이트 @Override + @Transactional(readOnly = false) public UserResponseDTO.ProfileDto updateUserProfileImage(HttpServletRequest request, MultipartFile profileImage,User user) { String profileImageUrl = null; @@ -338,6 +342,7 @@ public UserResponseDTO.ProfileDto updateUserProfileImage(HttpServletRequest requ // 유저 소개 업데이트 @Override + @Transactional(readOnly = false) public UserResponseDTO.ProfileDto updateIntroduce(HttpServletRequest request, UserRequest.UpdateUserInroduceRequest introduce, User user) { user.setIntroduce(introduce.getIntroduce()); // introduce 부분만 변경