오픈소스로 알아보는 Soft Delete

오픈소스로 알아보는 Soft Delete
Photo by Evie S. / Unsplash

들어가며

이번 시간에는 azure-sdk-for-python의 PR을 통해 soft-delete 기법을 알아보겠습니다. 😄

어떤 점이 궁금했나요?

1
PR discussion 중

위 PR은 기존 코드에서 test를 위해 비활성화했던 soft-delete 기능을 다시 활성화하며, test code들을 수정한 내용입니다. 해당 PR을 읽어보던 중soft delete키워드가 문득 궁금해져 찾아보게 되었습니다.

Soft Delete란?

Soft Delete는 데이터베이스에서 자주 사용하는 용어로, 데이터를 삭제하지 않고, 삭제된 것처럼 표시하는 기법을 말합니다. 즉, 데이터를 삭제하지 않고, 삭제된 것처럼 표시하는 것이죠. 이를 통해 데이터를 복구할 수 있습니다. 반대되는 개념으로 Hard Delete 가 존재하죠.

실제로 Hard Delete는 SQL의 DELETE 쿼리를 사용하여 데이터를 삭제한다면, Soft Delete는 UPDATE 쿼리를 사용하여 is_deleted 컬럼을 True로 변경하는 방식으로 데이터를 삭제합니다.

그렇다면 Soft Delete가 왜 필요할까요?

Soft Delete의 가장 큰 장점은 복구가 가능하다는 것 입니다. 우리가 데이터를 실수로 삭제 하거나, 정책 상으로 일정 기간 동안 데이터가 복구 가능 해야 하는 경우가 있습니다. 이런 경우에 Soft Delete를 활용하면 손 쉽게 데이터를 복구 할 수 있습니다. 또한 데이터를 바탕으로 통계를 내야하는 경우에도 Soft Delete를 유용하게 활용할 수 있습니다.

Soft Delete의 단점은 없을까요?

soft delete는 데이터를 삭제하지 않기 때문에, 데이터베이스의 용량을 차지 하고 있게 됩니다. 또한 soft delete를 사용하면 데이터를 조회할 때, is_deleted 컬럼을 항상 체크해야 하기 때문에 조회 속도가 느려질 수 있다는 단점도 있습니다.

이외에도 해당 블로그 글에서 soft delete의 단점 을 다음과 같이 소개하고 있습니다.

  1. 모든 코드에서 delete_at 조건을 체크하고 있어야 한다.
  2. 외래키의 기능이 상실된다.
  3. 종속성을 체크하며 데이터의 정리가 어려워진다.
  4. 현실적으로 서비스 상에서 삭제 취소, 즉 복구가 잘 일어나지 않는다.

따라서 저자는 delete_at 컬럼을 사용하는 것 대신에, 삭제된 데이터들을 보관하는 deleted_record를 만들어서 관리하는 것을 추천하고 있습니다. 혹시 자세한 내용이 궁금하시다면 링크에서 확인해보세요!

여담

2
PR discussion 중

해당 PR의 리뷰 내용 중에time.sleep()대신await asyncio.sleep()을 사용하라는 의견이 있는데, 다음 시간에는두 함수의 동작 방식의 차이에 대해서 자세히 알아보도록 하겠습니다. 감사합니다. 😄

Read more

[논문 리뷰] Search-R1: Training LLMs to Reason and Leverage Search Engines with Reinforcement Learning

[논문 리뷰] Search-R1: Training LLMs to Reason and Leverage Search Engines with Reinforcement Learning

들어가며 이번 시간에는 LLM이 검색 엔진과 상호작용하며 추론(Reasoning)을 수행할 수 있는 강화 학습 프레임워크 Search-R1을 소개합니다. 최근 OpenAI의 Deep Research나 여러 최신 연구에서 알 수 있듯, LLM의 추론 능력뿐 아니라 실시간 검색과 결합된 Reasoning이 큰 주목을 받고 있습니다. 하지만 기존의 RAG(Retrieval-Augmented Generation)이나 Tool-Use 방식은 * 복잡한 다단계

By Yongwoo Song
Python은 인터프리터 언어인가?

Python은 인터프리터 언어인가?

파이썬은 흔히 '인터프리터 언어'라고 불린다. 🤔: "파이썬은 코드를 한 줄씩 읽고 실행하는 인터프리터 언어이다." C++이나 Go 같은 언어는 소스 코드를 기계어로 번역하는 컴파일 과정을 거치지만, 파이썬은 코드를 한 줄씩 읽어 실행된다는 설명이다. 하지만 과연 Python을 단순히 "인터프리터 언어"라고 정의할 수 있을까? 이

By Yongwoo Song
[독서] 게으른 완벽주의자를 위한 심리학

[독서] 게으른 완벽주의자를 위한 심리학

✒️일을 시작할 수 있는 비결은 그것이 쉽지 않을 것임을 인정하는 것이다. 운이 좋게도 침실을 만드는 일 외에 아무런 할 일도 없는 날은 오지 않는다. 솔직하게 인정하자. 그리고 어려운 일을 할 때 떠오르는 생각과 감정을 통제할 수 있는 전략을 짜자. 시작을 어려워하는 이유는 힘든 감정과 생각에 대응할 전략을 구상하는 대신 이를

By Yongwoo Song