Soft Delete vs Hard Delete — 어떤 삭제 방식을 선택해야 할까?
데이터베이스에서 “삭제”는 단순히 데이터를 지우는 기능이 아니다.
사용자 요구, 서비스 정책, 법적 규정, 데이터 복구 가능성 등 여러 요소들이 맞물리는 중요한 설계 포인트다.
대표적인 삭제 방식은 Hard Delete와 Soft Delete 두 가지이며, 각각의 장단점이 명확하게 다르다.
아래에서는 두 방식의 개념과 특징, 실제로 어떤 경우에 선택해야 하는지를 정리해보고자 한다.
Hard Delete란?
Hard Delete는 데이터를 DB에서 완전히 삭제하는 방식이다.
특징
- DELETE SQL 문으로 레코드가 즉시 제거된다.
- 저장 공간이 바로 확보된다.
- 쿼리가 단순하고 성능 비용이 거의 없다.
장점
- 저장 공간 관리가 쉽다.
- 조회 시 “삭제된 데이터”를 고려할 필요가 없어 성능이 좋다.
- 데이터가 깔끔하게 정리된다.
단점
- 삭제 후 복구가 사실상 불가능하다.
- 과거 기록이 필요할 때 문제가 생긴다.
(로그, 정책 준수, 유저 실수 등)
사용하는 경우
- 임시 데이터, 캐시성 데이터
- 시스템 로그, 세션, 재처리 필요 없는 기록
- 개인정보 등 법적으로 완전 삭제가 필요한 경우
Soft Delete란?
Soft Delete는 데이터를 실제로 지우지 않고, ‘삭제됨’ 상태로 표시만 하는 방식이다.
주로 is_deleted 플래그나 deleted_at 타임스탬프를 이용한다.
예)
UPDATE users
SET is_deleted = true
WHERE id = 1;
데이터는 남아 있지만, 애플리케이션에서는 일반적으로 조회하지 않도록 처리한다.
특징
- 데이터가 물리적으로 남아 있다.
- 복구가 가능하다.
- “삭제된 것처럼 보이게” 만들 수 있다.
장점
- 유저가 실수로 삭제해도 복구 가능
- 감사 로그, 히스토리, 분석에 활용 가능
- 외래 키 참조 복잡도가 줄어듦
(삭제 시 cascading 문제 방지)
단점
- 조회 시 항상 WHERE is_deleted = false 조건을 추가해야 한다.
- 오래된 “삭제 데이터”가 계속 남아 있어 저장 공간이 증가한다.
- 잘못 설계하면 쿼리가 복잡해지고 성능이 저하될 수 있다.
사용하는 경우
- 유저가 삭제를 취소하거나 복구를 원할 수 있는 서비스
(게시글, 상품, 댓글 등)
- 기록 보관이 필요한 도메인
(결제, 주문, 로그, 업무 이력 등)
- 서비스의 데이터 일관성이 중요하고, 삭제 시 참조 무결성 문제가 자주 발생하는 경우
Soft Delete 구현 방식
1) Boolean 플래그 방식
is_deleted BOOLEAN DEFAULT false
- 가장 단순하고 직관적
- JPA에서는 Global Filter로 자동화 가능
2) Timestamp 기반 방식
deleted_at TIMESTAMP NULL
- 언제 삭제되었는지 시간 정보까지 제공
- 특정 기간 지난 Soft Delete 데이터를 자동 정리하기 좋음
3) Archive 테이블로 분리 (고급 방식)
삭제 시 데이터를 별도 아카이브 테이블로 옮김
posts → posts_archive
- 운영 테이블을 가볍게 유지할 수 있음
- 데이터 복구도 가능
Hard Delete vs Soft Delete 비교
| 구분 | Hard Delete | Soft Delete |
|---|
| 처리 방식 | DB에서 완전 삭제 | ‘삭제’ 표시만 함 |
| 복구 가능 여부 | ❌ 불가 | ⭕ 가능 |
| 저장 공간 | 적게 사용 | 많이 사용(누적됨) |
| 쿼리 단순성 | 단순 | 조건 추가 필요 |
| 참조 무결성 | 삭제 시 cascade 문제 | 문제 감소 |
| 사용 사례 | 로그, 미사용 데이터 | 게시글, 주문, 기록 필요 데이터 |
어떤 방식을 선택해야 할까?
Soft Delete 권장 케이스
- 사용자가 삭제를 되돌릴 수 있어야 한다.
- 과거 기록이 비즈니스적으로 의미가 있다.
(설정 변경 히스토리, 주문 이력)
- 삭제된 데이터도 감사/보안 목적을 위해 보관해야 한다.
- 데이터 참조 관계가 복잡해 Hard Delete의 cascade가 부담될 때.
Hard Delete 권장 케이스
- 데이터의 수명이 짧고 복구 필요가 없다.
- 저장 공간 비용이 중요한 시스템.
- 법적 규정 때문에 완전 삭제가 필요한 개인정보.
정리
Soft Delete와 Hard Delete는 “삭제”라는 같은 목표를 가지고 있지만, 목적과 결과는 완전히 다르다.
- Hard Delete → 즉시 제거, 성능/공간 면에서 효율적
- Soft Delete → 복구 가능, 데이터 보존·감사·무결성 관리에 유리
대부분의 실무 프로젝트에서는 Soft Delete가 기본,
그리고 법적·기술적 이유가 있을 때만 Hard Delete를 함께 사용한다.
삭제 방식은 단순한 기술 요소가 아니라 데이터 정책이기 때문에,
서비스와 도메인의 특성을 기준으로 신중히 선택해야 한다.