[생각정리] hard delete? soft delete? 이게 뭐야?

선상원·2025년 2월 1일

생각정리

목록 보기
2/2

오늘의 주제는 “데이터 삭제” 입니다.

🤔 들어가며

이 글을 읽는 엔지니어 혹은 시스템 관리자 여러분은 고객의 액션을 통해 생성되는 데이터를 무작정 삭제하고 계시나요?
그렇다면 이 글을 끝까지 읽어 얼마나 큰 자산을 놓치고 있었는지 고민해 봐주시면 좋을 것 같습니다.


📌 문제 인식

신규 기능을 기획하고 개발하는 과정에서 엔지니어는 기획에 맞는 CRUD 기능을 기본적으로 구현합니다.

다만, 삭제하면 안 될 데이터까지 삭제되도록 기능 구현을 하는 엔지니어가 많다는 것을 최근 알게 되어 오늘은 이 내용에 대해 알아보려 합니다.

데이터를 삭제하는 방법은 대표적으로 2가지가 존재합니다.
Hard Delete: 물리적 삭제
Soft Delete: 논리적 삭제

위 두 가지에 대해서는 장단점이 존재하지만 서비스의 기획 또는 보안적인 측면에 따라 어느 한쪽만 택하는 것이 아닌 다양하게 사용해야 한다는 것을 알아야 합니다.


🔍 Hard Delete vs Soft Delete

Hard Delete (물리적 삭제)

DELETE FROM schema.tables WHERE pk_id = 1;

▶ 데이터베이스에서 실제로 데이터를 삭제하는 방식입니다.

Soft Delete (논리적 삭제)

UPDATE schema.tables SET deleted_yn = 'Y' WHERE pk_id = 1;

▶ 데이터를 물리적으로 삭제하지 않고, 삭제 여부를 나타내는 플래그 컬럼을 업데이트하는 방식입니다.


💡 언제 어떤 방식을 사용해야 할까?

앞서 어느 한쪽만 택하는 것이 아닌 다양하게 사용해야 한다는 것을 알아야 한다고 했습니다.
어떤 사례에서는 Hard Delete 방식을 사용하고 또 어떤 사례에서는 Soft Delete 방식을 사용해야 할지 알아보겠습니다.


✅ Soft Delete를 사용해야 하는 경우

🥺ྀི 고객 액션에 따른 데이터 삭제

고객의 액션에 따라 데이터를 삭제해야 한다는 기획이 존재한다면 해당 테이블에 필터링 컬럼을 추가하여 Soft Delete 방식을 사용하는 것이 좋습니다.

📌 데이터 복원 가능성

가장 먼저 생각할 수 있는 이유는 데이터 복원이겠죠??
고객의 실제 액션을 통해서 데이터가 삭제되었음에도 불구하고 이를 인지하지 못한다면 고객 문의로 인입될 가능성이 매우 높아집니다.
이 과정에서 필요시 고객의 데이터를 롤백하여 복원이 가능해집니다.
만약 Hard Delete 방식을 통해 기능 구현이 되었다면 별도의 로그(general log 등)를 통해 트래킹하고 복원을 진행할 때 많은 비용이 발생하게 될 겁니다.

💰 데이터는 기업의 자산

고객 데이터에 대해 고객의 요청, 법령위배가 되지 않는 선에서는 실 데이터를 삭제하지 않는 것이 곧 기업의 자산이 됩니다.
그렇기 때문에 실 데이터 삭제를 지양하고 필터링 컬럼을 통해 데이터를 보관하는 것은 기업의 성장에 큰 역할을 할 수 있을 것입니다.

⚠️ Soft Delete의 한계

하지만 무조건 Soft Delete 방식이 좋은 것은 아닙니다.
테이블의 로우 수가 증가할수록, 컬럼이 많아져 테이블의 크기가 비대해질수록 해당 방식의 한계점은 명확해질 것입니다.
이러한 경우 Hard Delete 방식을 고려해야 하지만 해당 방식을 고려할 만큼 테이블이 비대해졌다면 우리는 Partition Table을 고려해야 합니다.

Partition Table의 개념이 궁금하시면 아래의 링크를 통해 확인할 수 있습니다.
https://velog.io/@swseon_96/mysql-partition

🔧 Partition Table 활용

일별 / 주별 / 월별 / 년별 등 기획에 적절한 기간의 파티션 테이블을 도입하여 Soft Delete 방식과 Hard Delete 방식을 적절히 사용한다면 보다 높은 성능을 체감할 수 있습니다.

또한, 파티션 테이블을 직접 삭제하게 된다면 빈 공간의 낭비 없이 데이터베이스를 보다 더 효율적으로 관리할 수 있습니다.
(Partition Table에 대한 성능은 위 링크를 통해 확인이 가능하기 때문에 상세 설명은 생략합니다.)


✅ Hard Delete를 사용해야 하는 경우

🔒 보안 및 개인정보 보호

기술의 발달과 함께 IT 기업에서는 보안을 보다 더 신경 써야 합니다.
기업 규모에 따라 ISMS와 같은 보안 인증 심사를 필수적으로 받아야 할 상황이 발생하기도 합니다.
가장 중요한 건 고객의 개인 정보이기 때문에 고객의 민감성 개인 정보로 판단되는 데이터의 경우 무조건 Hard Delete 방식을 통해 데이터를 삭제해야 합니다.

예시
▶ 고객 계정 정보
▶ 결제 정보 등

⚖️ 법적 보관 의무

다만, 일부 데이터에 한해서는 몇 년간 보관해야 하는 의무가 있으므로 법적 지식도 무시할 순 없습니다.
이러한 부분까지 고려된다면 그만큼 기획 단계에서 많은 고민이 필요하게 될 것입니다.


📝 마무리

더 다양한 상황이 존재하겠지만 해당 게시글에서는 여기까지만 소개하고자 합니다.
제가 언급한 상황에서도 다양한 사례가 존재하기에 위에 소개드린 내용이 꼭 정답이라고 말할 수는 없습니다.
다만, 고객의 사용 경험을 최상으로 끌어올리고 기업의 가치를 성장시키기 위해서는 끊임없는 고민을 통해 자신의 상황에서 가장 효율적인 방식을 찾아낼 수 있어야 할 것입니다.


💭 DBA와 엔지니어의 시각 차이

많은 엔지니어가 작성한 기술 블로그를 읽었을 때 가장 먼저 느낄 수 있던 것은 엔지니어와 DBA가 바라보는 시각은 정말 다르다는 것이었습니다.
엔지니어: 얼마나 빠르고, 효율적으로 고객에게 최상의 서비스를 제공할 수 있을지를 고민
DBA: 얼마나 안정적이고, 지속적으로 고객에게 최상의 서비스를 제공할 수 있을지 고민

각자 바라보는 시각이 다른 것에 비해 DBA 입장으로서 기술된 컨퍼런스가 많지 않아 DBA 입장의 데이터 삭제 방법을 정리해 보았습니다.


💡 핵심 포인트

Soft Delete: 데이터 복원 가능성, 기업 자산 보존 - 고객 액션 기반 삭제에 적합
Hard Delete: 보안, 개인정보 보호 필수 - 민감 정보 삭제에 필수
Partition Table 활용: 대용량 데이터 관리 시 Soft/Hard Delete 혼합 사용
상황에 맞는 선택: 무조건적인 적용이 아닌 서비스 특성에 맞는 방식 선택

profile
쉼 없는 고민과 학습을 통해 가장 효율적인 데이터베이스 관리 방안을 찾고자 노력하는 DBA 입니다.

0개의 댓글