논리 삭제 vs 물리 삭제
데이터베이스에서 레코드를 삭제하는 두 가지 방식으로, 실제로 데이터를 지우는지 여부에 따라 구분됩니다.
물리 삭제 (Hard Delete)
DELETE 명령어로 데이터를 실제로 제거하는 방식입니다.
delete from member where id = 1;
저장 공간을 확보하고 테이블 크기를 줄여 검색 속도 향상을 기대할 수 있지만, 삭제된 데이터를 복구하기 어렵고 이후 비즈니스 의사결정에 활용할 수 없다는 단점이 있습니다.
논리 삭제 (Soft Delete)
UPDATE로 삭제 여부를 나타내는 컬럼(deleted_at, is_deleted 등)만 변경하고 실제 데이터는 남겨두는 방식입니다.
update member set deleted_at = curdate() where id = 1;
select * from member where deleted_at is null;
데이터 복구가 쉽고 통계·감사 등 비즈니스 의사결정에 활용할 수 있지만, 테이블에 삭제되지 않은 데이터가 계속 쌓여 성능에 악영향을 줄 수 있고, 조회 시 논리 삭제된 데이터를 제외하는 조건을 빠뜨리는 실수가 발생할 수 있습니다.
비교
| 구분 | 물리 삭제 | 논리 삭제 |
|---|---|---|
| 방식 | DELETE | UPDATE |
| 복구 | 어려움 | 쉬움 |
| 저장 공간 | 확보됨 | 계속 증가 |
| 조회 성능 | 영향 없음 | 삭제 데이터 누적 시 저하 가능 |
| 실수 위험 | 낮음 | 조회 조건 누락 위험 |
핵심 정리
물리 삭제는 저장 공간과 조회 성능 면에서 유리하지만 복구가 불가능하고, 논리 삭제는 데이터 복구와 활용이 가능하지만 테이블 비대화와 조회 조건 누락 위험을 관리해야 합니다.