티스토리 뷰

회원로직, 게시글 crud, 댓글 crud까지 다 구현한 후에 포스트맨으로 전체적으로 한 번씩 확인을 해주었다.

 

회원탈퇴 오류

 

근데... 회원로직만 테스트했을 땐 잘 됐던 회원탈퇴가 갑자기

 이런 오류가 뜨면서 안됐다..ㅜㅜ 

trace를 잘 읽어보니 외래키 제약조건과 관련된 문제였다. 

member 테이블에서 member_id를 기반으로 한 행을 삭제하려고 시도했으나, article 테이블에 member_id를 참조하는 외래 키(FK6l9vkfd5ixw8o8kph5rj1k7gu)가 있어서 해당 작업이 실패한 것이다.

 

즉 로그인한 회원이 게시글을 쓴 상태에서 탈퇴를 하려니, 게시글에서 회원의 정보를 외래키로 갖고 있기 때문에 게시글 - 회원 간 제약조건을 설정하지 않으면 회원의 정보를 지울 수 없다(회원 탈퇴를 할 수 없다)는 것이다. 

 

생각해보니 게시글 북마크와 댓글 좋아요 엔티티를 구현할 때도 

public class Bookmark {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "member_id")
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Member member;

    @ManyToOne
    @JoinColumn(name = "article_id")
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Article article;

 

이렇게 @OnDelete(action = OnDeleteAction.CASCADE)를 사용해서 멤버 즉 회원이 지워지면, 북마크 릴레이션도 자동으로 삭제되게 외래키 제약조건을 설정해주었다. 그러니 로그인한 회원이 어떤 게시글들을 북마크하고 (자신이 쓰지 않은 게시글들 중에) 탈퇴를 해도, 탈퇴하는 동시에 북마크 릴레이션도 자동으로 삭제가 되기 때문에 아무 오류도 나타나지 않았던 것이다..!

 


회원탈퇴를 해도 회원이 작성했던 게시글과 댓글은 남아있게 하고 싶다면,,,?

회원 탈퇴를 하면 계정 자체가 사라지는 것이기 때문에 그 회원이 북마크했던 db들은 남겨둘 필요가 없지만, 

탈퇴한 회원이 작성했던 게시글과 댓글은 남아있게 하고 싶었다. 

 

그럼 멤버가 지워지면, article과 comment 테이블에서 member_id 컬럼을 null로 만들면 되겠다!!고 생각하고 

public class Comment {
    .
    .
    .

    @OnDelete(action = OnDeleteAction.SET_NULL)
    @ManyToOne
    @JoinColumn(name="member_id")
    private Member member;
    
    .
    .
    .
}
public class Article {
    .
    .
    .

    @OnDelete(action = OnDeleteAction.SET_NULL)
    @ManyToOne
    @JoinColumn(name="member_id")
    private Member member;
    
    .
    .
    .
}

 

@OnDelete(action = OnDeleteAction.SET_NULL)를 추가해주었다!!

 

짜잔. member_id 컬럼이 null로 바뀐 것을 볼 수 있다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
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
글 보관함