본문 바로가기
프로젝트 개발 기록/[개발] trouble shooting

hard delete(물리삭제)와 soft delete(논리삭제), sequelize에서 구현

by HelloJudy 2022. 6. 13.

1. hard delete (물리삭제)

 

: 직접 데이터를 삭제하는 방법이다.

 

삭제한 데이터가 추후에 조회할 필요가 없을 때 사용하는 방식이다.

 

 

2. soft delete (논리삭제)

 

: 데이터를 삭제하지 않고 삭제 여부를 확인하는 칼럼에 값을 넣는 방식이다.

 

현업에서는 user 데이터는 soft delete를 한다고 한다.

 

 

👩‍💻 sequelize에서 구현

 

이제 sequelize에서 User 테이블에 soft delete, hard delete 하는 방법을 알아보자.

 

👉 공식 문서

 

 

1) Paranoid 옵션

sequelize는 모델을 정의할 때 deletedAt이라는 칼럼을 추가하는 옵션을 제공한다.

paranoid: true 로 하면 자동으로 deletedAt 칼럼이 생긴다.

 

나는 칼럼명을 스네이크 표기법으로 작성하고 있기 때문에 추가적으로 underscored: true 옵션을 넣어줬다.

 

 

class Post extends Model {}
Post.init({ /* attributes here */ }, {
  sequelize,
  paranoid: true,

  // If you want to give a custom name to the deletedAt column
  deletedAt: 'destroyTime'
});

 

 

2) soft delete

 

await Post.destroy({
  where: {
    id: 1
  }
});
// UPDATE "posts" SET "deletedAt"=[timestamp] WHERE "deletedAt" IS NULL AND "id" = 1

 

* 예시

 

 

다음과 같이 코드를 실행하면 deleted_at 칼럼에 삭제한 현재 시간이 들어가는 것을 확인할 수 있다.

 

 

3) hard delete

 

force: true옵션을 사용하면 데이터를 강제로 삭제할 수 있다.

 

await Post.destroy({
  where: {
    id: 1
  },
  force: true
});
// DELETE FROM "posts" WHERE "id" = 1

 

 


📌 Reference

 

반응형

댓글