본문 바로가기

Java Spring Boot

Soft Delete & Hard Delete

출처: https://velog.io/@tjrqh/Soft-Delete-Hard-Delete

 

Soft Delete vs Hard Delete에 대해서 왜 생각하게 되었는가?

처음 DB를 구성하고 User의 회원탈퇴를 만들때 '회원탈퇴를 하면 단순히 DB에서 삭제 처리 하면 되겠다'라고 막연하게 생각하였습니다.
그러다 다른 개발자와의 대화에서 Soft Delete와 Hard Delete에 대해서 들었으며 이것이 왜 필요한지에 대해서 생각해보게 되어 찾아보게 되었습니다.

Soft Delete란?

Soft Delete는 DB 레코드를 삭제하지 않고, 삭제된 것처럼 처리하는 기술을 의미합니다.
Soft Delete는 삭제된 데이터를 복원하기 쉽게 하며, 데이터의 무결성을 유지하기 위한 목적으로 사용됩니다.
일반적으로 소프트웨어 개발에서 데이터의 삭제는 물리적인 삭제가 아닌 논리적 삭제를 의미합니다.

Soft Delete의 장단점

장점

  • 실수로 데이터를 삭제하는 것을 방지합니다. 데이터를 완전히 삭제하면 복구하기가 어렵거나 불가능할 수 있습니다.
    Soft Delete를 사용하면 실수로 데이터를 삭제하여도 나중에 복구가 가능합니다.
  • 데이터 추적 및 감사를 용이하게 합니다. Soft Delete를 사용하면 데이터가 언제, 누구에 의해 삭제되었는지 추적할 수 있습니다. 이는 데이터 감사 및 규정 준수 요구 사항을 충족하는데 도움이 됩니다.
  • 저장 공간을 절약할 수 있습니다. Soft Delete된 데이터는 일반적으로 별도의 테이블에 저장되므로 활성 데이터에 사용되는 공간을 차지하지 않습니다.

단점

완전히 삭제하지 않고 유지하기 때문에 DB의 용량이 증가하고, 검색 속도가 느려질 수 있다.
또한, 삭제된 데이터가 여전히 DB에 존재하기 때문에, 공격자가 삭제된 데이터를 악용할 수 있다.

Soft Delete 단점 커버 방법

  • 삭제된 데이터 정기 삭제
    삭제된 데이터를 정기적으로 삭제하여 DB의 용량을 확보하여 검색 속도를 개선할 수 있다.
  • 삭제된 데이터 암호화
    삭제된 데이터를 암호화 하여 공격자가 데이터를 악용하는 것을 방지할 수 있다. 암호화는 DB 수준 또는 application 수준에서 수행할 수 있다.
  • 삭제된 데이터 엑세스 제한
    삭제된 데이터에 대한 엑세스 권한을 제한하여 공격자가 데이터를 악용하는 것을 방지한다. 엑세스 권한은 사용자 역할 및 권한에 따라 부여해야 한다.
  • 감사 로깅
    삭제된 데이터에 대한 감사 로깅을 수행하여 삭제된 데이터가 어떻게 사용되었는지 추적할 수 있다. 감사 로그는 보안 사고 발생 시 조사에 도움이 될 수 있다.
  • 백업 및 복구
    DB를 정기적으로 백업하여 데이터 손실을 방지할 수 있다. 백업을 사용하면 DB가 손상되거나 공격을 받을 경우 데이터를 복구할 수 있다.

Soft Delete 구현 방법

1. is_deleted 컬럼 추가

DB에 삭제 여부를 나타내는 컬럼을 추가하고, 삭제된 레코드는 해당 컬럼에 특정 값을 입력하는 방법이다. 삭제된 데이터는 복원하고자 할 때는 is_deleted 컬럼에 특정 값을 입력하여 삭제 상태를 취소 할 수 있도록 만든다.

장점

  • 구현이 간단하다.
  • DB 성능에 영향이 적다

단점

  • 삭제된 레코드를 실제로 삭제하기 어렵다.
  • 삭제된 레코드가 테이블 공간을 차지한다.

2. 별도의 테이블 생성

삭제된 데이터를 기록하는 별도의 테이블을 생성하는 방법이 있다. 별도의 테이블에는 삭제된 레코드의 정보와 삭제 시간등을 저장하며, 삭제된 데이터를 복원하고자 할 때는 해당 테이블에서 데이터를 조회하여 복원한다.

장점

  • 삭제된 레코드를 실제로 삭제할 수 있다.
  • 삭제된 레코드가 테이블 공간을 차지하지 않는다.

단점

  • 구현이 복잡하다
  • DB 성능에 영향을 줄 수 있다.

결론

이러한 경우 is_deleted 컬럼 추가를 사용한다.

  • 삭제된 데이터를 복구할 가능성이 높은 경우
  • DB 성능이 중요한 경우

이러한 경우 별도의 테이블 생성 컬럼 추가를 사용한다.

  • 삭제된 데이터를 복구할 가능성이 낮은 경우
  • 테이블 공간이 중요한 경우

추가 고려 사항

  • 데이터 복구 정책: 삭제된 데이터를 복구하는 정책을 정의해야 한다.
  • 데이터 감사: 삭제된 데이터를 추적할 수 있는 감사 시스템을 구축하는 것이 좋다.
  • 성능 최적화: 별도의 테이블 생성 방법을 사용하는 경우, 성능 최적화를 위해 삭제된 레코드를 정기적으로 삭제하는 것이 좋다.

Hard Delete란?

Hard Delete는 DB에서 데이터를 영구적으로 삭제하는 방법이다. 삭제된 데이터는 복구할 수 없다.

Hard Delete의 특징

  • 데이터를 영구적으로 삭제한다
  • 삭제된 데이터는 복구할 수 없다.
  • 삭제 처리가 빠르다
  • 삭제된 데이터가 테이블 공간을 차지하지 않는다.

Hard Delete의 장단점

장점

  • 데이터를 안전하게 삭제한다. 삭제된 데이터는 복구할 수 없으므로 민감한 데이터를 안전하게 삭제할 때 유용하다.
  • 테이블 공간을 확보한다. 삭제된 데이터가 테이블 공간을 차지하지 않으므로 DB 용량을 절약할 수 있다.
  • 삭제된 데이터가 DB에 없으므로 검색속도가 향상될 수 있다.

단점

  • 실수로 데이터를 삭제할 경우 복구할 수 없다. 삭제하기 전에 데이터를 백업하거나 신중하게 검토해야 한다.
  • 데이터 추적 및 감사가 어렵다. 삭제된 데이터는 복구할 수 없으므로 데이터가 언제, 누구에 의해 삭제되었는지 추적하기 어렵다.

Hard Delete의 단점 커버 방법

  • 데이터 백업
    삭제하기 전에 데이터를 백업하면 실수로 데이터를 삭제할 경우 복구할 수 있다. 정기적인 백업 정책을 수립하고 구현해야 한다.
  • 삭제 확인 메시지
    삭제 작업을 수행하기 전에 확인 메시지를 표시하여 실수로 데이터를 삭제하는 것을 방지할 수 있다.
  • 삭제 로그 기록
    삭제된 데이터에 대한 정보를 로그에 기록하여 데이터 추적 및 감사를 용이하게 할 수 있다. 로그에는 삭제된 데이터, 삭제 날짜, 삭제자 정보 등을 포함해야 한다.
  • 엑세스 권한 제한
    데이터 삭제 권한을 특정 사용자에게만 부여하여 악의적인 삭제를 방지할 수 있다.

고려사항

  • 데이터 백업
    실수로 데이터를 삭제할 경우 복구할 수 없으므로 삭제하기 전에 데이터를 백업해야 한다.
    또한 데이터를 백업 하는 과정에서 발생하는 비용 문제도 확인하여야 한다.
  • 데이터 삭제 정책
    데이터 삭제 정책을 수립하여 중요한 데이터가 실수로 삭제되지 않도록 해야 한다.
  • 감사 로깅
    데이터 삭제에 대한 감사 로깅을 수행하여 데이터가 어떻게 삭제되었는지 추적할 수 있다.

백업 비용 절감 팁

  • 필요한 데이터만 백업
    백업해야 하는 데이터를 최소화하여 백업 데이터 양을 줄인다.
  • 압축 및 중복 제거
    백업 데이터를 압축하고 중복 제거하여 백업 스토리지 용량을 줄인다.
  • 적절한 백업 빈도 선택
    필요에 따라 백업 빈도를 조절하여 백업 비용을 절감한다.
  • 오픈소스 백업 솔루션 사용
    무료 오픈소스 백업 솔루션을 사용하여 비용을 절감할 수 있다.