본문 바로가기
TIL & WIL

[TIL] #124. 240115

by mmm- 2024. 1. 15.

어제 목표 & 오늘 완료한 한 일 

더보기
  • 알고리즘 문제 / SQL 문제
  • Redis 공부
  • 최종 팀 프로젝트
  • 기술면접 대비

 

내일 목표

  • 알고리즘 문제 / SQL 문제
  • Redis 공부
  • 최종 팀 프로젝트
  • 기술면접 대비

 

발생한 문제와 해결 방법

1️⃣. 회원정보 수정 기능이 제대로 동작하지 않는 문제

회원정보 수정 기능을 구현하고 정상적으로 동작하는지 확인해봤는데 올바른 값을 넣어줬고 어떠한 오타도 없었는데도 불구하고 403에러가 발생했다. 출력문을 통해 확인해봤더니 UserController에 있는 infoUpdate() 메서드 자체가 실행되지 않는 것을 확인할 수 있었다. 콘솔창에도 아무것도 나타나지 않고, log을 찍어봐도 아무것도 나타나지 않아 왜 이러한 에러가 발생하는지 확인이 불가능했다. 그런데 headers를 확인해보니 key에 Authorization을 넣어주지 않은 것을 발견해서 해당 부분을 수정해주었다.


2️⃣. 업데이트 부분 관련 문제

회원정보 수정 기능을 구현하기 위해 코드를 작성했다. 확인을 해보니 오류 없이 잘 회원정보가 수정되었다는 response 메시지를 받았음에도 불구하고 DB에 해당 내용이 저장되지 않았다. 보통 이런 경우 @Transactional을 깜빡하고 붙여주지 않아서 발생했었다. 그런데 이번에는 @Transactional을 제대로 붙여줬음에도 불구하고 이러한 문제가 발생했다.

@Transactional
    public void updateInfo(InfoUpdateRequest infoUpdateReq, User user) {
        String nickname = infoUpdateReq.nickname();
        String password = infoUpdateReq.password();

        if(!passwordEncoder.matches(password, user.getPassword())) {
            throw new GlobalException(UserErrorCode.NOT_MATCH_PASSWORD);
        }
        user.updateInfo(nickname);
        userRepository.save(user);
    }

userRepository.save(user); 를 붙여주니 해결이 되었다. 그런데 그 전까지는 update부분에서 save를 해주지 않아도 잘 update가 됐는데 여기서는 해당 부분을 추가해줘야지만 DB가 수정되는 이유가 궁금했다. 이전에는 영속 상태의 user를 가져왔기 때문에 user객체가 자동적으로 수정되었지만, user객체를 인자로 받아왔을 뿐 해당 객체가 영속 상태인지 알 수 없어서 그렇다고 한다. 문제가 되었던 코드도 아래와 같이 코드를 수정해주었더니 문제가 해결되었다.

@Transactional
    public void updateInfo(InfoUpdateRequest infoUpdateReq, User user) {
        String nickname = infoUpdateReq.nickname();
        String password = infoUpdateReq.password();

        User findUser = userRepository.findById(user.getId()).orElseThrow(() -> new IllegalArgumentException("adsaag"));

        if(!passwordEncoder.matches(password, user.getPassword())) {
            throw new GlobalException(UserErrorCode.NOT_MATCH_PASSWORD);
        }
        findUser.updateInfo(nickname);
        //userRepository.save(user);
    }

 

 

느낀점

영속성 관련 부분을 다시 공부해야 할 것 같다. 그 당시에 강의를 들으면서도 어렵다고 생각이 들었고, 영속성 부분을 듣는데 많은 시간을 보냈던 것 같은데 여전히 잘 모르겠다.

그리고 대용량 트래픽 발생시 어떻게 대응하면 좋을지, ORM을 사용하면서 쿼리가 복잡해지는 경우에는 어떻게 해결하면 좋을지에 대해서 알아봤다. 사실 이 부분도 아직은 내가 접근하기 어려운 부분이라고 느껴지지만 열심히 해서 오늘 문제가 됐던 부분들을 다 문제없이 쉽게쉽게 할 수 있는 날들이 올 수 있도록 많은 노력을 해야겠다.

'TIL & WIL' 카테고리의 다른 글

[TIL] #126. 240117  (0) 2024.01.17
[TIL] #125. 240116  (0) 2024.01.17
[WIL] #18. 240108~ 240114  (0) 2024.01.15
[TIL] #123 . 240114  (0) 2024.01.15
[TIL] #122. 240113  (0) 2024.01.14