반응형
Notice
Recent Posts
Recent Comments
Link
뜌릅
Soft Delete는 언제 사용하고, 어떻게 사용하나요?? 본문
반응형
- 용도: 데이터를 삭제시켜야 하지만 동시에 보존이 필요할 때
- FK등이 걸려 있어서 기존 데이터에 영향이 갈 수 있는 경우
- 로그처럼 남겨둬야 하는 경우
- 주의: 이 기능을 사용하기 전에, 정말로 데이터의 삭제를 구현하는 것이 목적인지 검토해보세요.
- 삭제된 데이터를 접근하는 경우가 있다면, 그건 사실 삭제가 아니라 “숨기기” 또는 “상태변화”일 가능성이 높습니다.
- 오로지 개발자만이 삭제된 데이터를 복구할 수 있게 됩니다. 직접 DB에 접근하여 수정해야 합니다.
- delete_at 컬럼을 활용하는 로직을 작성하지 마세요. 만약 작성해야 한다면 soft delete를 기능의 의미대로 사용하지 않는 것입니다.
- 단순히 상태 변화를 의미하는 것이면 상태 컬럼을 고치는 로직을 따로 작성하세요.
- Join으로 걸려있는 경우에도 데이터는 제외됩니다.
🍎 사용법
Hibernate에서 제공하는 @Where 어노테이션을 사용하시면 됩니다.

다음 어노테이션을 요약하자면, 해당 entitiy나 entitiy collection을 조회할 때 Where절의 sql문을 실행한다는 의미입니다.
Join절에도 Where절의 sql문은 붙게 됩니다.

위의 어노테이션은 enitity와 컬렉션에 대해 삭제할려는 경우 정의한 SQL문을 대신 실행한다는 의미입니다. JPA같은 ORM의 delete도 포함합니다.
아래의 예시를 봅시다.

위의 Where절은 deleted_at컬럼의 data가 null인경우만 조회하게 한다는 의미입니다.
SQLDELETE의 sql절은 delete대신 해당 데이터의 deleted_at 컬럼값만 현재 시간으로 update 시켜줍니다.
따라서 한번 업데이트된 데이타들은 테이블에는 데이터가 남아있으나, 조회상에서는 제외됩니다.
아래의 사진은 db의 실제 결과입니다.

감사합니다. ^^
🥷 출처
https://velog.io/@zeros0623/JavaSpring-soft-delete-handling
[Java/Spring] soft delete 쉽게하기
Spring Data JPA를 사용하면서 soft delete 쉽게 핸들링하기. 5분이면 됩니다!
velog.io
반응형
'SPRING' 카테고리의 다른 글
Audit Logging Column이 생성되지 않는 경우 (키중복 save) (0) | 2023.06.21 |
---|---|
부하테스트 (0) | 2023.06.21 |
Dispatcher Servlet이 뭔가요 (0) | 2023.06.21 |
HikariCP (0) | 2023.06.21 |
JPA, JDBC: Java의 API들 (0) | 2023.06.21 |