[DB] Soft Delete VS Hard Delete

DevHwan·2022년 7월 10일
0

🏃‍♂️ 데이터 베이스 테이블 관리


데이터 베이스 테이블을 설계하던 중에 여러 예시를 공부하다 보니 삭제 날짜 혹은 삭제 상태로 테이블 안에서 칼럼을 따로 두어서 관리하는 것을 보게 되었다. 이는 삭제하는 방법 중 논리 삭제에 해당하는 방법인데, DB 안에서 데이터를 즉각 삭제하는 물리 삭제와 무엇이 다른 지 자세하게 알아보자.

📌 Soft Delete


Soft Delete는 논리 삭제로 번역된다. 테이블에 삭제 여부를 나타내는 칼럼을 따로 추가해서 그 칼럼의 값으로 삭제됐는 지 여부를 판단할 수 있다.

다음과 같이 User 테이블이 존재할 때, withdraw 값을 통해서 삭제 여부를 판단할 수 있다. 데이터 베이스 상에서 해당 데이터는 삭제되지 않았지만, 해당 테이블을 참조할 때, 삭제 여부에 대한 판단을 통해서 제외시킬 수 있다. 논리 삭제의 장점으로는 복구가 필요한 데이터의 경우 되돌리기가 용이하다는 장점이 있다. 혹은 통계가 이후에 필요한 경우에 데이터베이스에서 삭제하지 않았기 때문에, 후에 통계 자료로 사용할 수 있다.

📌 Hard Delete


Hard Delete는 물리 삭제로 번역된다. 테이블에 칼럼을 따로 추가하지 않고, 해당 데이터를 데이터베이스에서 직접 지워버리는 것이다.

DELETE FROM user WHERE user_id = ?

데이터를 실제로 데이터베이스에서 지워버리기 때문에 후에 복구가 필요한 경우에 되돌리기가 불가능하다는 단점이 있다. 하지만 지우려는 데이터를 확실하게 데이터베이스에서 지운다는 장점이 있다.

📌 Soft Delete VS Hard Delete


그래서 두 가지 방법 중에 어떤 것이 더 좋은가??

물리삭제와 논리삭제는 데이터베이스의 명령에 따라 분류되는 것이 아니라 데이터베이스를 어떻게 설계하느냐에 따라 달라진다. 물론 논리삭제의 경우 실질적으로 데이터를 삭제한 것이 아니기 때문에 select에 모두 포함될 것이기 때문에 검색속도가 떨어질 수 있다는 단점이 있다. 그러나 반대로 데이터가 완전히 삭제되지 않았기 때문에 통계 등 데이터가 후에 필요할 때 사용할 수 있는 장점이 있다.

예시를 들어보면 만약 거래를 하는 플랫폼에서 한 회원이 악의적으로 물건을 보내지 않고, 돈만 챙기고 회원 정보를 삭제했을 때, 이를 서버에서 물리 삭제 하는 방식으로 처리했다면, 해당 회원을 조회할 수 가 없게 되는 문제점이 발생할 수 있다. 따라서 일부 사이트를 보면 회원 탈퇴 시 회원정보를 완전히 삭제한다는 조항이 있지만, 최소한의 정보를 일정 기간 이상 보유한다는 조항들이 써져있다.

📌 마무리


두 가지 방법은 데이터 베이스를 설계할 때 부터 나뉘는 방법이다. 따라서 서비스를 기획할 때 서비스에 적절한 삭제방법을 선택하여 구조를 만드는 것이 중요하다.

profile
달리기 시작한 치타

0개의 댓글