회원정보 페이지 -> 회원정보 변경에서 noSession에러가 나타남
User Controller 에서 system.out.println된 부분을 전부 주석처리 해줘야한다.
@GetMapping("/user/{id}/update")
public String update(@PathVariable int id , @AuthenticationPrincipal PrincipalDetails principalDetails){
//1. 추천
//System.out.println("세션정보: " + principalDetails.getUser());
//2. 비추천
// Authentication auth = SecurityContextHolder.getContext().getAuthentication();
// System.out.println("직접찾은 세션정보: " + auth.getPrincipal());
return "user/update";
}
1. 서비스 단위에 @Transactional을 붙이지 않았는지 확인!
(롬복의 어노테이션이다)
2. System.out.println을 어디다가 잘못 붙이지 않았는지 확인해야한다
System.out.println을 하게되면 기본적으로 get함수가 호출되어서 값이 가져오게 된다. 문제는 연관관계가 복잡하게 얽혀있는 함수들이 전부 호출되어 꼬이게 되는 일이 종종 일어나게된다.
@Transactional 어노테이션
트랜섹션의 의미는 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위를 말하며 쉽게 말해 더이상 쪼개질수 없다는 의미이다.
해당 어노테이션은 작업을 처리하던 중 오류가 발생했을 때 모든 작업들을 원상태로 되돌릴 수 있다. 모든 작업들이 성공해야만 최종적으로 데이터베이스에 반영하도록 도와준다.
https://kafcamus.tistory.com/30
https://tecoble.techcourse.co.kr/post/2021-05-25-transactional/