본문 바로가기
Other/Programming

소프트 삭제를 안 쓰는 경우

by 해학 2025. 4. 18.
728x90

1️⃣ 로그성 데이터 (Audit, 로그, 히스토리 테이블)

✔ 예시:

  • 사용자 로그인 기록 (login_history)
  • 결제 이력 로그 (payment_log)
  • 시스템 에러 로그 (error_log)

❌ 소프트 삭제가 불필요한 이유:

  • 삭제 자체를 하지 않음 (히스토리로 계속 보관함)
  • 삭제하면 의미 없음 → 어차피 로그는 쌓이기만 함

2️⃣ 단순 캐시성 테이블

✔ 예시:

  • 추천 상품 캐시 테이블 (recommended_items)
  • 최근 본 상품 리스트 (recent_viewed_items)

❌ 소프트 삭제가 불필요한 이유:

  • 데이터가 짧은 주기로 자주 변경, 만료됨
  • 그냥 하드 삭제(DELETE)하거나 TTL로 만료되게 처리하는 게 성능상 좋음

3️⃣ 중간 조인 테이블 (Many-to-Many 관계)

✔ 예시:

  • user_roles (유저 ↔ 역할)
  • post_tags (게시글 ↔ 태그)

❌ 소프트 삭제가 불필요한 이유:

  • 단순한 관계 연결 역할만 함
  • 삭제하면 다시 삽입하면 되고, 이력 추적이 중요하지 않음
  • Soft Delete하면 쿼리가 복잡해지고 성능 저하만 생김

4️⃣ 고속 처리용 대용량 테이블

✔ 예시:

  • 실시간 알림 테이블 (notifications)
  • 임시 업로드 파일 목록

❌ 소프트 삭제가 불필요한 이유:

  • 수십만~수백만 건이 자주 insert/delete
  • is_deleted = false 같은 조건이 조회 성능을 급격히 저하시킬 수 있음
  • 실시간 성능이 중요할 땐 하드 삭제가 효율적

5️⃣ 법적/보안상 완전 삭제가 필요한 데이터

✔ 예시:

  • GDPR에 따라 "탈퇴한 유저 정보"는 완전 삭제해야 하는 경우
  • 민감 정보가 들어간 테이블 (개인정보, 인증서 등)

❌ 소프트 삭제가 불가능한 이유:

  • 법적 요구에 따라 물리적으로 데이터 삭제가 필수
  • is_deleted = true만 해선 안 되고, 디스크에서 완전히 지워져야 함

❗ 보너스: Soft Delete의 단점도 함께 기억하자

항목단점
성능 저하 항상 WHERE is_deleted = false 조건 붙음
복잡한 쿼리 조인, 인덱스, 카운트 쿼리에서 혼란 생길 수 있음
실수 가능성 Soft Delete 된 데이터를 실수로 복구할 수 있음
진짜 삭제는 따로 관리 주기적으로 "물리 삭제 배치" 돌려야 함
728x90

'Other > Programming' 카테고리의 다른 글

ChatGPT VS Gemini API  (0) 2025.03.16
마이그레이션  (0) 2025.02.07
env  (0) 2025.02.04
Hash Table  (0) 2025.01.23
Map( )  (0) 2025.01.20