물리 삭제 (hard delete) vs 논리 삭제 (soft delete)

박우현 (Joshua)·2023년 6월 25일

항해99_TIL

목록 보기
19/20

의문점

기존 데이터베이스에 저장된 데이터를 삭제 할 때, delete 쿼리로 데이터를 삭제하는 물리 삭제 (hard delete) 방식과 구분자를 추가 해줘서 실제로 데이터베이스에는 삭제를 안 하고 구분자의 값만 바꾸는 논리 삭제 (soft delete) 방식이 있는데, 어떠한 방식을 사용하는게 더 좋은가에 대하여 의문점이 들었다.

물리 삭제 (hard delete)

이 방식은 이름 그대로, 데이터베이스에서 삭제하고자 하는 데이터의 행을 delete 쿼리를 사용하여 지우는 것이다.

  • 장점
    1. 데이터를 조회 할 때, 불필요한 where 절을 따로 추가 해줄 필요가 없어서, 조회가 간단하고 속도가 빠르다.
    1. 데이터를 실제로 삭제하기 때문에 데이터베이스의 용량이 매우 커지는 것을 방지한다.
  • 단점
    1. 데이터를 실제로 삭제 해서 데이터의 복구가 불가하다.
    1. 연관 관계로 이어진 테이블들에서는 외래 키 제약 조건에 의해 사용하기 불편하다.

논리 삭제 (soft delete)

이 방식은 기존 데이터베이스에 구분자를 추가해줘서 삭제를 할 때, 구분자의 값을 바꾸는 방식이다.

  • 장점
    1. 삭제 할 때, 구분자의 값만 바꿔주기 때문에 데이터의 복구가 가능하다.
    1. update 쿼리가 delete 쿼리보다 마이크로 초 단위로 더 빠르다.
    2. 연관 관계로 이어진 테이블들에서는 사용하기 더 간단하다.
  • 단점
    1. 데이터를 조회 할 때, where 절을 따로 추가 해줘야 하기 때문에, 조회가 복잡해지고 속도가 느려진다.
    1. 데이터베이스의 용량이 계속하여 커진다.

결론

간단하게 말하자면,데이터가 삭제가 되더라도 데이터가 남아있어야하는 테이블에서는 soft delete 형식을 사용하는 것이 더 좋다. 나중에 데이터를 복구 할 수 있기 때문이다. 또한, 연관 관계가 복잡하게 이어진 테이블에서도 soft delete 방식이 더 좋을 수 있다.
하지만, 데이터들이 삭제되고 남겨지지 않아도 문제 없는 테이블에서는 hard delete 방식이 더 좋을 수 있다.
결국에는 서비스 운영에 따라서 어떠한 방식을 사용하는지 달라진다.
서비스가 어떻게 운영되는지 확인하고, 각 테이블에 맞는 방식으로 정해주자.

profile
매일 매일 성장하자

0개의 댓글