[스프링 게시판] 5. 회원 수정

kiwonkim·2021년 11월 24일
0
post-custom-banner

[ UpdateDto ]

회원 수정시 활용할 updatDto 객체이다. username, password 부터 해서 회원등록보다 많은 필드를 갖는다. 회원수정 시 User 객체로 변환하기위한 toEntity 메서드도 갖는다.


[ UserController - 뷰 반환 ]

뷰 반환 + 기존 정보 입력

UserController 에서 Get 요청시 뷰를 반환해주는 부분이다. th:object 를 활용하기 위해 updateDto 를 넘겨준다. 그런데 이때 기존 사용자 정보를 입력해주고 싶은데, 사용자 정보는 세션의 User 객체에 담겨져 있다. 그래서 User->UpdateDto 의 변환이 필요하다.

User -> UpdateDto

User 클래스에 Builder 를 활용하여 UpdateDto 로 변환하는 메서드를 추가했다. 해당 메서드로 loginUser 를 updateDto 객체에 담아 뷰로 넘기면 th:fields 에 의해 value가 설정되어 폼에 사용자 정보가 출력될 것이다.


[ UserService - 회원수정 ]

회원수정 메서드

userService 의 회원수정 메서드이다. userService 는 userRepository 를 주입받아 사용한다.

영속화

JPA 는 조회 쿼리문을 수행하면 영속화 컨텍스트에 해당 객체를 보관한다. 그리고 주기적으로 해당 객체가 변경되었는지 파악하고 변경되었다면 DB에 flush 요청을 해서 변경을 반영한다. 그래서 Id를 통해 객체를 찾아오고, 각 필드를 변경을 수행하면 객체와 DB에 변경이 반영된다.


[ UserController - 변경 처리 ]

검증 수행

@Valid 어노테이션을 통해 Bean Validation 으로 검증을 수행한다. 별개의 Dto 로 선언했기 때문에 회원가입과 다른 검증로직을 적용시킬 수 있다.

세션 속성 변경

현재 세션에는 변경 이전의 loginUser 가 들어가 있다. Service 로 회원수정을 수행하고, 세션의 객체도 변경 후의 loginUser 로 변경해야한다. 그렇지 않으면 세션의 유저를 사용하는 모든 뷰에서 변경이 반영되지 않을 것이다.


[ 실행 결과 ]

이메일 주소를 변경한 후에 다시 회원수정 페이지로 오자 변경한 이메일 주소가 그대로 유지되어 있다.

post-custom-banner

0개의 댓글