soft delete
는 실제로 데이터베이스에서 데이터를 삭제하는 것이 아니라,
테이블에 deleted와 같은 필드를 추가해주고,
update 쿼리를 날려서 deleted 값을 변경해주는 방법이다.
JPA의 구현체인 하이버네이트에는 아래 2가지 기능이 있는데,
이를 이용하면 soft delete처리와 삭제되지 않은 데이터 조회를 편리하게 할 수 있다.
기존 hard delete는 deletemapping을 통해 ID를 삭제한다.
soft delete의 경우 삭제가 아닌 update를 통해 deleted 컬럼에 값을 넣어주어야 하기때문에
delete 를 수행하기 어렵다.
하여 soft delete를 위해서는
삭제 로직이 수행되면 delete 쿼리 대신, update 쿼리를 통해 deleted 필드 값만 변경 시켜줘야 한다.
이때 SQLDelete
를 사용할 수 있다.
@SQLDelete
는 엔티티 삭제가 발생했을 때 delete 쿼리 대신 실행시켜줄 커스텀 sql 구문을 뜻하는 어노테이션으로 이렇게 @SQLDelete
를 적어주면 엔티티 삭제 요청시 delete 쿼리 대신 적어준 update 쿼리가 실행된다.
@SQLDelete(sql = "UPDATE member m SET m.deleted_at = current_timestamp WHERE m.id = ?")
@Entity
public class Member {
...
이런식으로 사용하게 되며 선택한 update를 원하는 테이블의 delete 컬럼에 원하는 값을 넣어주면 된다.
Open image-20240201-075523.png