데브허브 | DEVHUB | [10분 테코톡] 도기의 Soft Delete[10분 테코톡] 도기의 Soft Delete
- Soft Delete는 데이터를 물리적으로 삭제하지 않고 삭제 상태로 표시하여 보관하는 방식입니다. ♻️
- 주요 장점은 데이터 복구 가능성을 제공하여 서비스 신뢰도를 높이고 데이터 손실 위험을 줄이는 것입니다. 🛡️
- Hibernate에서는
@SQLDelete로 삭제 시 UPDATE 쿼리를 정의하고, @SQLRestriction으로 조회 시 자동 필터링 조건을 추가하여 Soft Delete를 구현할 수 있습니다. 🛠️
- Hibernate 6.4부터는
@SoftDelete 어노테이션을 통해 삭제 플래그 생성, UPDATE 쿼리 실행, 자동 조회 필터링을 한 번에 처리할 수 있지만, 타임스탬프 컬럼 지정은 7.0 버전부터 지원될 예정입니다. ✨
- 주의할 점으로는 네이티브 쿼리에서는 Soft Delete 어노테이션이 적용되지 않으며, 벌크 삭제 연산(예:
deleteAllInBatch)은 Hard Delete를 수행합니다. ⚠️
- Soft Delete는 조회 성능 저하를 유발할 수 있으므로, 삭제 플래그 컬럼에 인덱스를 추가하여 성능을 개선해야 합니다. 🚀
- 외래키 제약 조건의 의미가 약해질 수 있으며, 부모 엔티티가 Soft Delete되면 자식 엔티티도 함께 처리해야 합니다. 🔗
- 복구 가능성이 있거나 기록으로서 가치가 있는 데이터에 Soft Delete를 적용하는 것이 좋으며, DB 부하를 막기 위해 Hard Delete 정책을 반드시 수립해야 합니다. 🗓️