Backend) soft delete AND hard delete

오성민·2022년 12월 13일
0

spring

목록 보기
10/17
post-thumbnail

개인 프로젝트로 주제를 커뮤니티로 정한 후 프로젝트를 진행하는 중에 한 가지에 의문점이 생겼었다.

그건 바로 사용자가 계정을 삭제하면 해당 사용자가 글에 작성한 리뷰를 삭제하는 문제이다.
이것이 문제가 된 이유로는 A 사용자가 B 사용자의 댓글을 신고하고 B 사용자가 탈퇴를 해버린다면 해당 댓글을 신고를 한 이유가 있을까 하는 것이였다.

이러한 의문이 들었던 상태에서 삭제의 종류에는 물리삭제와 논리삭제가 존재한다는 것을 알게 됐다.

물리삭제(hard delete)

물리삭제 란, 사용자 SQL문 중 DELETE문을 사용해서 DB에 데이터를 직접적으로 삭제하는 것이다.
물리삭제는 특정 데이터를 삭제하고 난 뒤에 다시 재사용(조회 등등...)을 하지 않을 때 사용한다.

논리삭제(soft delete)

논리삭제 란, DB에서 삭제를 하는 것이 아닌 특정 값을 사용하지 못하도록 설정을 하는 것이다.
논리삭제는 특정 데이터를 삭제하고 난 뒤에 물리삭제와는 다르게 재사용(조회 등등...)을 할 필요가 있을 때에 사용을 한다.

장단점

물리삭제의 장단점

장점

  • DB에 계속해서 데이터가 쌓이는 것이 아니기 때문에 비교적 부하가 적다.

단점

  • 재사용할 수 없다.

논리삭제의 장단점

장점

  • 재사용이 가능하다.

단점

  • DB에 계속해서 데이터가 쌓이는 방식이기 때문에 비교적 부하가 크다.

결론

어떤 1가지의 방식이 맞는 것은 아니다.
현재 운영 환경과 필요에 따라서 삭제 방법을 선택하는 것이 가장 중요할 것이다.

필자가 고민하던 리뷰가 삭제가 되면서 신고의 기능이 떨어질 수 있는 문제는 논리삭제로 데이터를 관리한다면 해결이 될 것이다.

하지만 모든 데이터를 논리삭제로 관리한다면 사용자가 늘어남에 따라서 빠르게 데이터가 쌓일 것이다.

profile
풀스택을 지향하는 개발자

0개의 댓글