본문 바로가기
Spring boot

Springboot [회원정보 수정/ 수정시 관련 게시물도 변경]

by z00h 2022. 9. 27.

 

이번 포스팅에서는 회원정보를 수정하는 기능을 해보았다.

 

회원정보 수정 목록은 3가지로 만들었다.

 

1. nickName(닉네임)

2. phoneNumber(연락처)

3. password(비밀번호)

 

 

 

회원정보를 담고있는 member테이블을 우선 보면 7가지 컬럼이 있는데

 

 

 

위의 3가지 컬럼 제외 나머지의 회원 정보들은 변동될 여지가 거의 없기때문에 수정이 불가능하다.

 

 

 

 

 

현재 차량 판매 글을 쓰면 car테이블의 author에 nickName을 넘겨주어 (car.author = member.nickName)의 형식으로

글정보가 담겨 있는데 회원정보인 닉네임이 변경되면 글의 author 또한 똑같이 바뀌어야 한다.

회원정보 수정시 닉네임을 바꾸지 않으면 상관이 없지만 수정을 한다면 자동으로 바뀌게 기능을 만들어 놓았다.

 

 

 

 

 

차례대로 회원정보 수정부터 만들어 보도록 하자.

기존의 회원관련 api는 JPA로 만들어 놓았는데 mybatis로 회원정보 수정을 하기위해

새롭게 Member패키지하위에 controller, service, model, mapper를 만들어 주었다.

 

 

 

 

 

 

 

쿼리부터 살펴보면 Update쿼리를 이용하여 간단하게 나타낼 수 있다.

 

MemberMapper.xml

 

 

 

 

 

 

 

 

 

MemberControllerMybatis.java

 

PutMapping을 이용하였고 PathVariable로 MemberId인 mid, 

RequestBody에는 memberDTO를 담도록 하였다.

 

 

 

 

 

 

 

 

 

 

 

MemberService.java

 

Service단에서는 컨트롤러에서 받아온 mid, memberDTO를 이용해 

 

23: mid를 DTO에 set시키고

 

25: 받아온 password를 암호화 하여서 db에 저장해야 되기 때문에 passwordEncoder 메소드를 썼다. 

      그리고 암호화된 패스워드를 encodedPassword 변수에 담았다.

26: 암호화된 패스워드 encodedPassword를 memberDTO에 set 시킨다. (DTO에 password가 암호화된 상태)

 

28: putMember는 수정하는 회원 정보를 db에 update시키는 메서드이고 putMember변수에 담아주었다.

29: putAuthor는 putMember에서 닉네임 변경시 author도 똑같은 문자열로 수정하는 메서드이고

      putAuthor 변수에 담았다. memberDTO의 mid를 받고, 닉네임을 받아서 carDAO에서 메서드가 실행된다.

 

 

32~35: putMember변수가 0보다 크면(쿼리실행 성공하면) putAuthor + "member updated" 를 리턴, 

            실패하면 "failed to update " + mid + "content" 리턴.

 

 

 

 

 

 

처음에 패스워드를 암호화 하지않고 password를 받아 왔다가 password 수정은 되었지만

로그인이 안되는 문제가 발생하여서 알고보니 암호화 문제였다..

 

 

 

 

 

MemberDAO.java

 

MemberDAO의 putMember메서드.

 

 

 

 

 

 

 

 

CarDAO.java

 

CarDAO의 putAuthor메서드이고 memberDTO.getNickName이 String author로 받아졌다.

 

 

 

 

 

 

 

 

 

CarMapper.java

 

받아온 mid로 where조건에 맞는 author를 변경시키는 쿼리이다.

 

 

 

 

 

 

 

 

 

 

 

 

오류없이 서버가 잘 실행이 되었고 POSTMAN으로 회원정보를 수정해 보자.

 

 

 

수정할 회원정보는 

nickName : 도니 => 도니도니

phoneNumber : 010 -1234 - 1234 => 010 - 2222 - 2222

password: 13 => 1313

 

위와 같이 수정해 볼 예정이다.

 

 

 

 

 

 

 

api를 호출하니 성공했다는 리턴값이 들어왔다

 

 

 

 

 

 

 

 

 

db에 들어가서 회원정보가 바뀌었는지 확인해 보자

 

 

 

member 테이블의 닉네임, 전화번호가 잘 바뀌었다! 

password는 암호화 되어서 db로는 확인을 못하지만 정상적으로 로그인도 잘 되었다!

 

 

 

 

 

 

 

 

마지막으로 수정한 회원의 게시글 author를 확인해보자

 

 

 

 

 

 

모두 정상적으로 수정이 잘 된 것을 볼 수 있다!