[Spring Boot & JPA] Soft Delete

jin·2023년 1월 3일
0

Spring Boot

목록 보기
6/8

물리삭제(hard delete)와 논리삭제(soft delete)

  • 물리삭제는 SQL DELETE명령어를 사용하여 직접 데이터를 삭제하는 것이다.
  • 논리삭제는 SQL UPDATE명령어를 사용하여 delete flag를 담당할 컬럼을 생성하여 지정한 타입으로 넣어주는 것이다.

CommentEntity

@Where(clause = "deleted_at is null")
@SQLDelete(sql = "UPDATE Comment SET deleted_at=current_timestamp WHERE Comment_id = ?") 
public class Comment {
// 생략
	@Column(name = "deleted_at")
    private LocalDateTime deletedAt = null;
// 생략
}

위와 같이 @SQLDelete를 사용하여 쿼리문을 직접 작성해주면 된다.
@Where는 조회시 null인 데이터만 조회할 수 있게 설정해준 것이다.
delete 명령어가 발생하면 실제로는@SQLDelete의 쿼리 UPDATE가 실행된다.

이러한 논리삭제의 장점은 복구가 필요한 데이터의 경우 되돌리기 용이하다는 장점이 있다.

물리삭제 vs 논리삭제

대부분의 실무에서는 논리삭제를 구현하고 있는데 한가지 예로 어떠한 사이트에서 불법을 저지른 회원이 탈퇴한 경우 데이터베이스에는 정보가 남아있기 때문에 찾을 수 있게 된다. 보통 회원가입을 진행하면 탈퇴 시 일정기간 이상 보유한다는 조항이 있으니 확인해볼 수 있을 것이다. 그러나 회원의 개인정보와 같은 민감한 정보는 유출을 방지하기 위해 물리삭제를 구현하는 곳도 있을 것이다. 상황과 용도에 맞게 삭제 방법을 적용하는 것이 중요하다.

profile
jin

0개의 댓글