Soft Delete와 Hard Delete

aqualung·2024년 7월 18일

중고거래 앱에서 사용자가 회원 탈퇴를 하는 기능을 구현하려다 고려해야할 부분이 생겼다.
처음에 단순히 데이터베이스에서 User레코드를 삭제하면 될 것 같았지만,
작성한 글이나 채팅방/채팅내역 등 유저와 관계된 다른 데이터들은 어떻게 처리할 지 고민해봐야 했다.


Soft Delete와 Hard Delete

우선 Hard Delete는 DELETE 쿼리를 사용해서 데이터베이스에서 데이터를 물리적으로 삭제하는 것이다.

Soft Delete는 isDeleted 같은 컬럼을 추가하여 사용자가 탈퇴한 사용자인지 논리적으로 구분만 지어주는 것이다.

Soft Delete는 이런 장점이 있다고 한다.

  • 관계되어 있는 다른 데이터들을 보존할 수 있다.

예를 들어 나와 채팅중인 상대방이 탈퇴한다고 생각해보자.
상대방의 데이터를 물리적으로 삭제한다면 상대방의 채팅내역이나 대화중인 채팅방을 살려두어야 할까? 삭제한다면 어디까지 살려두어야 하며 상대방의 채팅내역이나 채팅방에는 어떤 처리를 해야 할지 골치 아파진다.

대신 상대방의 데이터를 보존하고 (탈퇴)라고만 명시해 두는 것이다. 이렇게 하면 상대방과 대화중이던 나는 상대방이 탈퇴했음을 알 수 있고 더 이상 채팅이 불가능하게 막아두기도 편하다.

단점은 무엇이 있을까

  1. 데이터베이스의 용량을 차지한다.
  2. isDeleted라는 조건을 매번 확인해주어야 한다.
  3. 법적/윤리적 문제가 있을 수 있다.

언급한 단점을 고려하더라도 데이터의 무결성을 위해 Soft Delete를 사용할 수 밖에 없을 수 있다.

내 경우 관계된 데이터가 많은 User 테이블은 Soft Delete를 하기로 했다.

사용자가 작성한 중고거래 게시글은 참조하는 데이터가 이미지 외에 다른 데이터나 기능에 영향을 주지 않고 이미지의 용량이 비교적 크기 때문에 Hard Delete를 하기로 했다.

물론 거래 내역을 저장하는 등 기능이 확장될 것을 고려한다면 Soft Delete로 처리하는 것이 바람직할 수 있다.

0개의 댓글