본문 바로가기
컴퓨터 프로그래밍/Spring

[Spring] Soft Delete

by 한33 2024. 11. 2.

📚 배경

1. 탈퇴한 회원의 계정으로 중복 계정 생성을 막을 때

2. 데이터 분석을 위해서 탈퇴한 회원에 대한 데이터가 필요할 때

3. 서비스 정책 상 탈퇴한 유저의 정보를 정해진 기간동안 유지할 필요가 있을 때

 

등 위와 같은 이유로 soft Delete 가 사용된다.

직접 User Entity 에 userStatus 라는 필드를 만들어서 삭제 유무를 파악했었는데, Spring Boot 에서 이를 지원해주기 때문에 활용하는 방법에 대해서 알아보았다.


User

@Getter
@Entity
@SQLDelete(sql = "UPDATE users SET deleted = true WHERE id = ?")
@SQLRestriction("deleted = false")
@NoArgsConstructor
@Table(name = "users")
public class User extends Timestamped {

 

@SQLDelete(sql = "UPDATE users SET deleted = true WHERE id = ?")

 

해당 annotation 을 활용해서 User 가 delete 되면 데이터가 직접 삭제되는 것이 아니라 deleted 를 true 로 바꾸는 Soft Delete 기능이 구현되도록 설정할 수 있다.

@SQLRestriction("deleted = false")

 

해당 annotation 을 사용해서 user 조회시에 deleted 필드의 값이 false 값들만 조회되도록 설정할 수 있다.


User

private boolean deleted = Boolean.FALSE;

 

필드를 추가해준다.


UserRepository

@Query("SELECT u FROM User u WHERE u.deleted = true")
List<User> findAllDeleted();

 

해당 메서드를 통해서 삭제된 User 만 조회하는 것도 가능하다.