본문 바로가기
백엔드(Back End)/Spring

[TIL]20230711 - 회원탈퇴 기능 구현

by tjsdn9803 2023. 7. 11.

어제 주특기 주차 과제 5레벨을 완료하였는데 아직 다음 주차까지 3일 가량 시간이 남아서 진행한 과제에서 추가로 구현해볼만한 것들을 구현해보았다. 우선 회원탈퇴기능을 구현해보기로 하였다.  

회원을 탈퇴하게 되면 회원이 작성한 게시글과 댓글이 삭제되고 관련된 댓글이 삭제 되도록 하였다.

컨트롤러

@DeleteMapping("/user/withdrawal")
    public JsonResponse<Result> withdrawal(@RequestParam Long id, @AuthenticationPrincipal UserDetailsImpl userDetails){
        User user = userDetails.getUser();
        userService.withdrawal(id, user);
        Result result = new Result("회원탈퇴가 성공적으로 처리되었습니다.",200);
        return JsonResponse.success(result);
}

회원삭제 api는 id를 RequestParam으로 요청하고 jwt를 통해 api를 호출한 유저를 확인한다.

서비스

public void withdrawal(Long id, User user) {
        User user1 = userRepository.findById(id).orElseThrow(() ->
                new CustomException(ErrorCode.LOGIN_NO));
        if(!user1.getId().equals(user.getId())){
            throw new CustomException(ErrorCode.WRONG_NAME_WITHDRAWL);
        }
        userRepository.delete(user);
}

우선 id에 해당하는 유저가 있는지 유저리포지토리에서 확인하고 없다면 예외를 발생시킨다.

있다면 찾은 유저의 id와 요청한 유저의 id가 같은지 확인하고 같지 않다면 본인이 회원 탈퇴를 신청한것이 아니므로 예외를 발생시키고 같다면 회원 탈퇴를 진행한다.

회원이 탈퇴되면 회원과 관련된 데이터를 함께 삭제해야하는데 이는 Entity의 연관관계에 

@OneToMany(mappedBy = "post",cascade = CascadeType.REMOVE)

을 추가하여 연관관계에 있는 엔티티도 함께 삭제하도록 하였다.