soft delete는 왜하는 것일까?

허진혁·2023년 1월 8일
0
post-thumbnail

sql을 통해 DB에서 데이터를 삭제한 다는 것은 row를 삭제하는 것이 일반적인 방법일 것입니다. 그러나 이 방법만 있는 것은 아닙니다.

delete를 하기 위해 데이터를 삭제하는 방식이 두 가지 방법을 찾았고, 각각 어떤 것이 있는지 살펴보겠습니다.

물리 삭제

앞서 말한 방식은 물리 삭제 입니다. 즉, 데이터를 삭제 할 때 row를 삭제시키는 것을 말합니다. delete의 쿼리를 보통 다음과 같이 이루어져 있습니다.

delete from {테이블명} where {컬럼이름} = {조건값}

삭제할 데이터가 추후에 필요성을 못느낄 때 사용합니다.

논리 삭제

논리 삭제는 row를 삭제하는 것이 아니라 삭제와 관련된 컬럼명의 값을 {true, false}로 구분하거나 {null, 삭제 날짜}로 구분합니다.

이럴 때는 delete 구문을 update 로 바꾸느 것입니다.
다음과 같은 예시는 {null, 삭제 날짜}로 구분할 것이며, 칼럼명은 deleted_date 으로 지정해 두었습니다.

null 값이라면 삭제되지 않은 것이며, 삭제 날짜가 들어있다면 삭제된 것입니다.

UPDATE {테이블명} SET deleted_date = CURRENT_TIMESTAMP where {컬럼이름} = {조건값}

이렇게 할 경우 delete 쿼리대신 update 쿼리가 실행되어 row가 삭제되진 않았지만, 삭제된 것처럼 DB에 보관하는 것입니다.

이렇게 논리삭제(soft delete)를 했을 경우, 값을 찾는 쿼리를 날릴 때

where deleted_date = null

다음과 같은 조건문을 추가하여 null인 값, 즉 삭제되지 않은 값만 찾으면 됩니다.

soft delete를 사용하는 이유

soft delete를 사용하는 이유는 삭제된 데이터를 추후에 사용할 가능성이 있기 때문입니다.

다만 이 방식을 사용할 경우, 직접적인 데이터 삭제가 아니기 때문에 DB에 데이터가 계속 쌓여서 부담이 될 수도 있습니다.

회사 입장에서 생각해보면 두 가지 이유가 있을 것입니다.
1. 데이터 분석을 통해 활용될 때
2. 법적으로 데이터의 일정 기간을 가지고 있어야 할 때

사이트나, 앱에 가입할 때, "고객님의 데이터를 1년간 보관하는 것에 동의하십니까?" 라는 문구에 체크를 한 문구를 보았던 기억이 있습니다.

'이러한 경우에 soft delete를 사용했겠구나!' 라고 깨닫은 계기가 되었습니다.

참고
https://velog.io/@taeha7b/hard-delete-softdelete
https://goballe.tistory.com/29

profile
Don't ever say it's over if I'm breathing

0개의 댓글