둘 다 DB에서 데이터를 삭제하는 방식에 관한 것이다. Hard delete는 물리 삭제라고도 부르고 Soft delete는 논리 삭제라고도 부르는데, 이름에서 유추할 수 있듯이 Hard delete는 물리적으로 데이터 자체를 DB에서 없애는 것이고 Soft delete는 논리적인 범주에서만 없애는 것이다. 즉 Soft delete는 데이터 자체가 물리적으론 DB에 남아있다
논리적으로 삭제한다는 것 = Soft하게 삭제한다는 것이 어떤 의미일까? 삭제한 것처럼 여기겠다 라는 것이다. 테이블에 삭제여부를 나타내는 컬럼을 추가해 삭제여부가 표기돼있으면 삭제됐다고 보고, 삭제여부가 표기돼있지 않으면 삭제가 안 된 데이터로 본다는 것,
id | 이름 | 삭제여부 |
1 | 권은비 | false |
2 | 카리나 | true |
그럼 이 Soft delete라는 것을 적용할 때 얻을 수 있는 장점은 뭘까?
당연히 뒷배가 있다는게 최고의 장점이다. 삭제처리된 데이터들을 따로 보고 싶을 때, 논리적으론 삭제됐지만 물리적으로는 데이터가 남아있는 셈이니 삭제된 데이터들을 따로 볼 때도 유용할 것이고, 실수로 인한 삭제가 발생했을 시 복원도 가능하다. 또한 물리적 삭제의 경우 delete라는 SQL을 쓰고 논리적 삭제는 update라는 SQL을 쓰는데, update가 delete에 비해 좀 더 빠른 속도를 낸다고도 한다.
하지만 Soft delete는 단점도 있다. 우선 물리적으로 데이터를 하드디스크에서 덜어내는 게 아니기 때문에 시간이 지날수록 물리적으로 쌓여있는 데이터들이 많아지며 DB 용량 자체가 커진다. 또 다른 단점은 where절 등으로 데이터들을 뽑아낼 때 삭제여부에 대한 처리도 반드시 함께 해줘야 하는 것. 이는 쿼리문을 직관적으로 이해하는 것에도 불편을 줄 가능성이 존재한다
따라서 이런 장단점들을 비교해보면서, 서비스 운영에 맞게 Soft delete를 사용할지 Hard delete를 사용할지 잘 고려해야 할 필요가 있을 것이다.
'DB' 카테고리의 다른 글
Scala Subquery를 LEFT JOIN으로 바꿔 성능 높이기 (1) | 2024.03.04 |
---|---|
[DB] 실행 계획이란 (1) | 2024.02.16 |
[DB ]rowstore vs columnstore (row oriented db vs column oriented db) (1) | 2024.02.04 |