목차
Soft Delete VS Hard Delete
우리 서비스에 어떤 것이 더 좋을까?
성능 평가 기준
- 개발자의 실수 가능성이 낮은가 (일관성)
- 서비스 로직과의 합
- ex) user는 soft delete 했을 시 email이 unique 하게 남는다.
- 성능
- 어떤 Query 들이 자주 일어나고 해당 상황에선 어떤 것이 더 적합한가
Soft Delete
- deleted 필드로 관리
- unique column에 관해 고민 좀 해봐야 함
Hard Delete
- deletedUser 테이블을 따로 관리할까 고민중
- unique column 문제 해결 가능
고민중인 점
1. 삭제한 이메일을 회원가입에서 다시 사용한다는 것의 의미는 무엇일까?
- 계정 복구
- soft delete / hard delete 둘 다 처리 가능
- soft delete 시 회원가입에서 해당 email이 있을 경우, 해당 email이 deleted 인지 확인해야함
- hard delete 시 모든 회원가입 로직에 DB 조회 한번 늘어남
deletedUser.find({email})
- 성능
- soft > hard
- 그냥 같은 이메일로 새로 가입 (복구 X)
- soft delete 시 애매해 짐
- delete 시 email 컬럼을 지워야함
- hard delete는 처리 가능
- deletedUser에 담아두면 깔끔
- 성능
- soft > hard
- soft delete 시 애매해 짐
2. 유저를 삭제 했을 때 유저의 정보를 남길 필요가 있을까?
- Unique Column : email, nickname
- soft delete 시 위의 unique column 부분을 지워야함
- 그러면 남아있는 record는 무슨 의미를 갖는가
- hard delete 시엔 위의 데이터를 포함하여 다른데로 옮길 수 있다.
- soft delete 시 위의 unique column 부분을 지워야함
3. 한 달까지는 계정 정보를 갖고 있다가, 이후에 삭제하는 방식은 어떨까?
- Soft delete가 적합
- 장점
- 닉네임을 가지고 있을 수 있으며,
- 한달 후에는 deletedAt 을 통해 hard delete할 수 있다.
- 단점
- user 정보를 찾을 때, deleted 필드를 항상 조회해야한다