Soft Delete 혼란

데이터베이스에서 데이터를 삭제하는 방법은 크게 두가지로 나뉩니다.

  • Hard Delete: 우리가 잘 아는 Delete 문을 사용하여 실제 row를 삭제하는 방법

  • Soft Delete: 삭제 표시(`deleted_at` 필드에 현재 시간으로 넣어주는 방법 등)를 해줌으로써 삭제된 필드다 < 라는 의미를 부여하는 방법


데이터간 관계있는 경우, join을 계속해서 해야하는 경우 soft delete을 이용하는 경우가 종종 있는데요.


블로그 글은 이벤트 티케팅 서비스에서 soft delete로 인하여 장애를 겪었던 이야기입니다.

좌석이 결제/예약이 되면 deleted_at으로 예약됨을 표시하고 있는 서비스에서 예약된 좌석을 뽑아내어 다시 재저장하는 DB 마이그레이션 작업이 필요하게 되었는데, 작성자가 사용한 ORM 라이브러리에서는 해당 soft delete를 제대로 filter 하지 못하여, 예약된 좌석도 마치 다 예약 가능한것 처럼 살아나게 되며 같은 자리가 무한으로 다시 예약이 되기 시작했다고 합니다. 다중 예약으로 인해 많은 고객들에게 불편을 끼치게 되면서 Soft delete에 대해서 다시 고민하기 시작했다는 경험 이야기인데요.


물론 위 이야기는 Soft Delete만의 이슈만은 아니지만., 너무 당연하게 쓰고 있었다면, 내가 쓰고 있는 방법에는 혹시 취약점이 없을까?! 한번 더 고민해보는 습관은 중요할 것 같습니다.


# Soft Delete의 문제점

  • 복잡성 증가 : delete에 대한 표시가 로직을 이해해야 하고, 잘 이해하지 못하면 민감 데이터 노출이나 부정확한 데이터를 만들어 낼 수 있다.

  • 인덱스, unique 등 제약조건 생성시 계속 "delete" 표시에 대한 것을 고려해야 되며 유지 관리를 복잡하게 할 수 있다.


# Soft delete의 대안

  • 삭제 데이터 따로 보관 : 과거 데이터에 대한 유지를 해야하는 경우 별도 삭제 데이터 스토리지에 저장하고, 본래 테이블에서는 Hard Delete

  • Audit log(감사로그)를 이용하여 데이터 변경 기록 저장하기


https://blog.bemi.io/soft-deleting-chaos/

The Day Soft Deletes Caused Chaos

Bemi Blog

The Day Soft Deletes Caused Chaos

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 3월 16일 오전 7:24

 • 

저장 159조회 7,810

댓글 2

  • 좋은 사례와 글을 잘 정리, 공유해주셔서 감사합니다! 글을 보면서 궁금해진내용인데 저 당시에 deleted_at 컬럼을 통해 상태관리(좌석 결제/예약)를 한 이유가 있을까요?? deleted_at 컬럼은 사용자에게 노출 가능한 데이터 여부 정도로 쓰고 비즈니스 로직이 포함되는 상태 (예약, 결제)는 다른방법으로 풀어내는게 더 직관적이었을 거 같아서요!

  • 부드럽게 터지는군요?ㅎ

함께 읽은 게시물

하나부터 열까지 리더가 상세히 설명해 주기를 바라는 구성원이 있습니다. 반대로 큰 얼개만 듣고 나머지는 자율적으로 하고 싶어 하는 경우도 있죠. 회식에 참여하는 것을 너무나 힘겨워 하는 구성원이 있는 반면, 동료들과 함께 시간을 보내며 가까워지는 것을 원하는 구성원도 있습니다.

... 더 보기

다양한 구성원을 하나로 모으고 싶다면 - 리더가 가져야 할 모순

네이버 블로그 | HSG 휴먼솔루션그룹

다양한 구성원을 하나로 모으고 싶다면 - 리더가 가져야 할 모순

 • 

저장 5 • 조회 672


이력서에 쓰는 경험



... 더 보기

📰 OpenAI가 ChatGPT의 커넥터 기능을 업데이트하면서 MCP 지원을 추가했네요.

... 더 보기

비개발자도 Cursor AI로 결제 가능한 웹 서비스 만들기 🚀

6

... 더 보기

비개발자도 Cursor AI로 결제 가능한 웹 서비스 만들기 🚀 (6차. 25.06.21, 25.06.28) - Learning by Doing

Latpeed

비개발자도 Cursor AI로 결제 가능한 웹 서비스 만들기 🚀 (6차. 25.06.21, 25.06.28) - Learning by Doing

더불어민주당에선 대통령실 비서실장으로 지명된 강훈식 의원이 '경영권과 무관하게 상장사 지분 25% 이상을 확보할 경우 잔여 주식을 모두 공개매수해야 한다'는 내용의 자본시장법 개정안을 지난해 6월 발의했다. 대통령령으로 예외를 두겠다는 단서 조항을 달았지만 사실상 100% 의무공개매수를 도입을 추진하고 있다. 지난 정부가 추진한 '50%+1주 의무공개매수' 대비 한발 더 나간 제도라는 평가가 나온다.

... 더 보기

'100% 의무공개매수' 도입 가능성에 긴장하는 PEF들 [이재명號 출범]

n.news.naver.com

'100% 의무공개매수' 도입 가능성에 긴장하는 PEF들 [이재명號 출범]

< 쿠팡의 창업자를 직접 보며 배운 것: 리더의 크기가 전부다 >

1

... 더 보기

 • 

댓글 1 • 저장 22 • 조회 1,860