데이터를 삭제하는 방법 중 hard delete와 soft delete가 있다.
- Hard delete - 데이터가 필요 없어질 때 데이터베이스에서 데이터를 영구히 삭제하는 것을 말한다. 삭제된 데이터의 복구가 불가능하다.
- Soft delete - 테이블에 isDeleted같은 플래그나 deletedAt같은 타임스탬프 컬럼을 추가해 삭제 처리 됐다고 간주하는 것을 말한다. 삭제 처리된 데이터가 필요해지면 다시 접근이 가능하다.
그렇다면 데이터를 복구할 수 있는 soft delete가 무조건 좋은 거 아닌가?
당연히 각자 장단점이 있고, 인터넷의 정보와 나의 생각을 정리해봤다.
먼저 hard delete의 장점은 아래와 같다.
- 필요 없어질 경우 삭제를 하면 되기 때문에 로직이 매우 간단해진다.
- 계단식 삭제(cascade delete)를 지원하는 RDBMS의 경우 바로 적용이 가능하다.
- 테이블에 있는 데이터는 모두 존재하는 데이터이기 때문에 데이터를 읽는 과정에서 추가적인 로직이 필요 없기 때문에 좋은 성능을 보인다.
- 사용하지 않는 열(row)는 완전히 삭제되기 때문에 공간을 차지하지 않는다.
- 삭제 처리된 데이터를 구분하기 위한 행(column)이 필요하지 않기 때문에 하나의 열이 차지하는 데이터가 soft delete에 비해 적다.
그렇다면 이 모든 걸 포기하면서까지 soft delete를 적용하는 이유는 뭘까?
- 삭제된 데이터의 복구가 가능하다. 사실상 soft delete를 사용하는 가장 큰 이유다.
- 데이터가 삭제되지 않고 남아 있기 때문에 무결성 검사, 감사, 기록 확인 등을 어렵지 않게 할 수 있다.
이 외에도 hard delete를 적용할 경우 추후에 그 열에서 사용했던 primary key나 unique 행의 값을 다시 사용할 수 있는데, 이는 문제가 될 수도 있기 때문에 결국 둘 다 상황에 따라 적절히 사용하는 게 좋을 것 같다.
요약
Soft delete는 데이터를 복원할 수 있는 대신 개발 자원이 많이 소모된다.
Hard delete는 데이터 복원을 포기한 대신 쉽게 구현이 가능하고 비교적 높은 성능을 보장해준다.
따라서 정답은 없으며 상황에 맞게 적용하면 된다고 생각한다.
dddddddddddd