데이터 삭제 방식의 종류

화낼거양's avatar
Dec 04, 2024
데이터 삭제 방식의 종류
 
 
데이터를 삭제하는 방법을 크게 5가지 분류로 나누어 정리한 내용입니다.
 

데이터 삭제 방법

 
  • 외래 키(FK)에 걸기:
    • 부모 엔티티 삭제 시 관련된 자식 엔티티도 자동으로 삭제되도록 설정합니다. (cascade 설정)
@OnDelete(action = OnDeleteAction.CASCADE) @ManyToOne(fetch = FetchType.LAZY) private Board board;
 
  • 게시글 삭제 시 댓글을 null로 업데이트:
    • 부모 엔티티 삭제 시 자식 엔티티의 외래 키를 null로 설정하여 관계를 해제합니다.
// 게시글 삭제 로직에서 댓글의 board를 null로 업데이트 public void deleteBoard(Board board) { List<Reply> replies = replyRepository.findByBoard(board); for (Reply reply : replies) { reply.setBoard(null); replyRepository.save(reply); } boardRepository.delete(board); }
 
  • 게시글 삭제 시 댓글을 직접 삭제하기 (쿼리 튜닝):
    • 부모 엔티티 삭제 시 자식 엔티티를 직접 삭제하는 쿼리를 실행합니다.
// 게시글 삭제 로직에서 댓글을 먼저 삭제 public void deleteBoard(Board board) { replyRepository.deleteByBoard(board); boardRepository.delete(board); }
 
  • 제약 조건 해제 후 삭제:
    • 외래 키 제약 조건을 해제하여 관계를 자유롭게 관리할 수 있도록 합니다.
@JoinColumn(foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) @ManyToOne(fetch = FetchType.LAZY) private Board board;
 
  • (가장 중요!)실무에서 주로 사용하는 방법 (논리적 삭제):
    • 데이터베이스에서 실제로 데이터를 삭제하지 않고, 특정 칼럼을 사용하여 삭제된 것처럼 처리합니다.
@ManyToOne(fetch = FetchType.LAZY) private Board board; @Column(nullable = false) private boolean visible = true; @Column(nullable = true) private Timestamp updatedAt; public void delete() { this.visible = false; this.updatedAt = new Timestamp(System.currentTimeMillis()); }
 
Share article

moohyun