Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

회원 탈퇴하기 본문

Project/블로그 게시판 만들기

회원 탈퇴하기

Seung__ 2021. 10. 9. 14:37

1. 회원 탈퇴하기


  • 현재 연관관계는 아래와 같다.
    • Post : Member -> 다대일 
    • Comment : Member -> 다대일
  • Member는 삭제하면 Post, Comment는 고아객체가 된다.
  • 그렇다고 예외를 피하기 위해 CASCADE, OrphanRemoval을 사용하여
  • Member 삭제시 그 회원이 작성한 글, 댓글을 삭제하는건 안된다.
  • 회원 탈퇴 요청이 들어오면 해당 회원이 작성한 글은 "탈퇴회원"으로 변경해주자.

 

2. MemberController


  • 회원 탈퇴 요청이 들어오면
  • 해당 회원이 작성한 모든 글, 댓글을 탈퇴한 회원 개체로 변경.
  • 회원 data 삭제 후 홈으로 redirect
    @PostMapping("/{memberId}/delete")
    public String deleteMember(@PathVariable("memberId") Long id, Model model){
        Member member = memberService.findMemberById(id);
        Member withdrawnMember = memberService.findMemberByUserId("withdrawnMember");

        SetMemberAsWithdrawnMember(member, withdrawnMember);

        memberService.removeMember(id);
        model.addAttribute("status", "withdrawn");

        return "redirect:/logout";
    }

    private void SetMemberAsWithdrawnMember(Member member, Member withdrawnMember) {
        List<Comment> comments = member.getComments();
        for (Comment comment : comments) {
            comment.setMember(withdrawnMember);
        }

        List<Post> posts = member.getPosts();
        for (Post post : posts) {
            post.setMember(withdrawnMember);
        }
    }

 

 

3. 결과


  • 응? 왜 로그인 화면으로감.....세션 살아있네..

  • 삭제된 회원이 탈퇴한 회원으로 변경되었다.

 

 

4. 회원 탈퇴시 세션 종료시키기.


  • 간단하게 로그아웃으로 보내버리자.
    @PostMapping("/{memberId}/delete")
    public String deleteMember(@PathVariable("memberId") Long id){
        Member member = memberService.findMemberById(id);
        Member withdrawnMember = memberService.findMemberByUserId("withdrawnMember");

        List<Comment> comments = member.getComments();
        for (Comment comment : comments) {
            comment.setMember(withdrawnMember);
        }

        List<Post> posts = member.getPosts();
        for (Post post : posts) {
            post.setMember(withdrawnMember);
        }

        memberService.removeMember(id);
        
        return "redirect:/logout";
    }

 

5. 결과


  • 탈퇴 전

 

  • 탈퇴 후
    • 회원탈퇴 후 home으로 redirect 시 메시지가 하나 떴으면 좋겠따.
    • 다음에 추가할 예정.

탈퇴시 홈으로 이동 및 로그아웃 처리
작성자 변경
작성자 변경

 

6. 앞으로


  • est용 data 서버시작할 때 DB에 올리기
  • Listener
    • createdAt, updatedAt등
  • 게시글에 작성자 표시
  • view 정리
  • 게시글 검색
    • 검색 옵션 추가 : 작성자, 제목 구분
  • 영속성 전이 설정
    • 게시글 삭제
    • 회원 탈퇴
  • 댓글 삭제 버튼
  • 대댓글
  • 검증 & 예외처리
    • 회원 가입시 필수 정보 지정.
    • 데이터 타입 지정
  • 인증처리
    • 로그인한 사용자만 글 & 댓글 작성 가능.
    • 본인이 작성한 글, 댓글만 삭제 가능
    • 관리자는 모든 권한
  • 예외처리
  • 페이징 처리
  • 컬렉션 조회 최적화

 

7. GitHub: 211009 remove Member


 

GitHub - bsh6463/blog

Contribute to bsh6463/blog development by creating an account on GitHub.

github.com

 

Comments