4/21/2018

(구버전) 스프링 게시판 만들기 #14. 회원정보 변경 기능 구현

'(구버전) 스프링 게시판 만들기'는 내용이 부족하다고 판단하여
스프링 게시판 만들기를 새로 작성하였습니다.

링크 및 참조용으로 현재 게시물은 남겨두겠지만,
가급적이면 새로운 스프링 게시판 만들기를 참조해주시기 바랍니다.

회원가입과 로그인 기능이 구현되었으니, 회원가입한 회원이 자신의 정보를 변경하는 기능을 구현하겠습니다.

이번 게시물에 변경하는건 비밀번호 하나뿐이지만, 회원 테이블과 매퍼에 따라서 여러개도 가능합니다.

먼저 수정이 되는 쿼리를 작성하여 정상적으로 작동되는지 확인합니다.

정상적으로 작동되는 쿼리를 매퍼에 작성합니다.

<!-- 회원정보 수정 --> 
<update id="modify">
 update myMember
  set
   userPass = #{userPass}
  where userName = #{userName}  
</update>

비밀번호(userPass)를 변경하는 조건으로 닉네임(userName)를 사용했습니다. 닉네임으로 하지 않더라도 회원 한명을 특정할 수 있는 조건이어야하며, 제 테이블에서는 아이디(userId)와 닉네임(userName) 두가지입니다.

DAO와 Service를 작성합니다.

MemberController에 회원정보 페이지를 위한 메서드를 작성합니다.

회원가입 페이지(register.jsp)를 복사하여 이름을 modify.jsp로 변경하고, 내용을 약간 수정합니다.

매퍼에 있는 쿼리에는 닉네임(userName)을 받아서 조건으로 사용하기 때문에, name값이 userName인 인풋박스의 value에 ${member.userName}를 넣고 읽기전용(readonly)속성을 설정합니다.

여기서 ${member.userName}로그인하면서 받은 세션에 부여된 값입니다.

메인 페이지에서 회원정보 수정 페이지로 이동할 수 있도록 링크를 추가합니다.

<a href="member/modify">회원정보 수정</a>

프로젝트를 실행한 뒤 로그인을 한 화면입니다. 회원정보 수정 링크가 있습니다.

수정 페이지(member/modify)로 이동하면, 닉네임은 세션에서 값을 받아와서 자동으로 입력됩니다.

새로운 비밀번호를 입력한 뒤 수정 버튼을 클릭해도 비밀번호는 변경되지 않습니다.

컨트롤러에 회원정보를 처리할 메서드를 작성합니다.

// 회원정보 수정 post
@RequestMapping(value = "/modify", method = RequestMethod.POST)
public String postModify(HttpSession session, MemberVO vo) throws Exception {
 logger.info("post modify");
 
 service.modify(vo);
 
 session.invalidate();
 
 return "redirect:/";
}
비밀번호를 수정하면 session.invalidate(); 에 의해 현재 세션이 제거되어 로그아웃이 됩니다. 로그아웃 메서드는 이미 만들었기 때문에 저 코드를 사용하는것보다 logout(session); 을 사용해도 결과는 똑같습니다.

지금은 단순히 한줄짜리 코드지만, 이미 만들어놓은 코드가 있다면 그것을 재사용하는것이 더 효율적입니다.

이제 회원정보 페이지에서 새로운 패스워드를 입력한 뒤 수정 버튼을 클릭하면

메인 페이지로 이동되고, 로그아웃된걸 확인할 수 있습니다.

테이블을 확인하면 비밀번호가 바뀐것을 확인할 수 있습니다.

게시물 수정