Stouter
Stouter

백엔드 개발자입니다.

Soft Delete VS Hard Delete

우리 서비스에 어떤 것이 더 좋을까?

성능 평가 기준

  1. 개발자의 실수 가능성이 낮은가 (일관성)
  2. 서비스 로직과의 합
    1. ex) user는 soft delete 했을 시 email이 unique 하게 남는다.
  3. 성능
    1. 어떤 Query 들이 자주 일어나고 해당 상황에선 어떤 것이 더 적합한가

Soft Delete

  • deleted 필드로 관리
  • unique column에 관해 고민 좀 해봐야 함

Hard Delete

  • deletedUser 테이블을 따로 관리할까 고민중
  • unique column 문제 해결 가능


고민중인 점

1. 삭제한 이메일을 회원가입에서 다시 사용한다는 것의 의미는 무엇일까?

  1. 계정 복구
    1. soft delete / hard delete 둘 다 처리 가능
    2. soft delete 시 회원가입에서 해당 email이 있을 경우, 해당 email이 deleted 인지 확인해야함
    3. hard delete 시 모든 회원가입 로직에 DB 조회 한번 늘어남
      1. deletedUser.find({email})
    4. 성능
      1. soft > hard
  2. 그냥 같은 이메일로 새로 가입 (복구 X)
    1. soft delete 시 애매해 짐
      1. delete 시 email 컬럼을 지워야함
    2. hard delete는 처리 가능
      1. deletedUser에 담아두면 깔끔
    3. 성능
      1. soft > hard

2. 유저를 삭제 했을 때 유저의 정보를 남길 필요가 있을까?

  1. Unique Column : email, nickname
    1. soft delete 시 위의 unique column 부분을 지워야함
      1. 그러면 남아있는 record는 무슨 의미를 갖는가
    2. hard delete 시엔 위의 데이터를 포함하여 다른데로 옮길 수 있다.

3. 한 달까지는 계정 정보를 갖고 있다가, 이후에 삭제하는 방식은 어떨까?

  • Soft delete가 적합
  • 장점
    • 닉네임을 가지고 있을 수 있으며,
    • 한달 후에는 deletedAt 을 통해 hard delete할 수 있다.
  • 단점
    • user 정보를 찾을 때, deleted 필드를 항상 조회해야한다