Day 49 · 5/5
🌿 중급 DB

소프트 삭제란?

쉽게 이해하기

휴지통에 파일을 버리는 것과 같아요. 완전히 삭제하는 게 아니라 '삭제됨' 표시만 해두고, 나중에 복구하거나 통계 분석에 사용할 수 있어요. 실제 삭제는 나중에 일괄 처리해요.

핵심 정리

데이터를 실제로 지우지 않고, 삭제 표시만 해두는 방식이에요.

자세히 알아보기

소프트 삭제(Soft Delete)는 데이터베이스에서 레코드를 물리적으로 삭제하지 않고, 삭제 여부를 나타내는 플래그 컬럼만 업데이트하는 방식이에요. 보통 deleted_at이나 is_deleted 같은 컬럼을 추가해서 구현해요. 실무에서 소프트 삭제를 사용하는 이유는 여러 가지예요. 첫째, 데이터 복구가 가능해요. 사용자가 실수로 삭제한 데이터를 복원할 수 있죠. 둘째, 감사 기록(Audit Trail)을 유지할 수 있어요. 누가 언제 무엇을 삭제했는지 추적할 수 있어요. 셋째, 데이터 분석에 유용해요. 삭제된 데이터도 통계나 분석에 포함시킬 수 있거든요. 구현 방법은 간단해요. 테이블에 deleted_at TIMESTAMP 컬럼을 추가하고, NULL이면 활성, 값이 있으면 삭제된 것으로 처리해요. 조회할 때는 WHERE deleted_at IS NULL 조건을 항상 추가해야 해요. ORM을 사용하면 자동으로 이 조건을 추가해주는 기능을 제공하기도 해요. 단점도 있어요. 쿼리가 복잡해지고, 유니크 제약 조건을 걸기 어려워져요. 예를 들어 이메일이 유일해야 하는데, 소프트 삭제된 레코드와 새 레코드의 이메일이 겹칠 수 있거든요. 이럴 때는 deleted_at도 함께 포함한 복합 유니크 인덱스를 만들어야 해요.