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
반응형
'프로젝트 개발 기록 > [개발] trouble shooting' 카테고리의 다른 글
파이썬 가상 환경(virtualenv)과 Flask 서버 구축, pip freeze vs pipreqs (0) | 2022.06.18 |
---|---|
[Error: TS(2339)] TypeScript에서 catch(error) 에서 error message 사용하기 (0) | 2022.06.15 |
[Error: TS(2339)] Express Request 확장하기 (0) | 2022.06.09 |
Swagger를 활용한 API 명세와 개발 협업 2탄 (0) | 2022.06.04 |
댓글