개발자

데이터를 삭제할 때 현업에서 어떻게 하나요?

2022년 09월 22일조회 527

데이터를 삭제할 때, soft delete와 hard delete가 있다고 배웠는데 현업에서 보통 어떻게 사용하나요? soft delete를 사용했다가 데이터를 복구하는 경우가 많이 있나요? 그리고 soft delete를 하게되면 where조건으로 한번 더 데이터를 확인해야하는데 비효율적이지 않나요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

손정현님의 프로필 사진

안녕하세요, soft delete vs hard delete을 적용하는거는 상황에 따라 다를 것 같아요. 어떤 데이터인가, 꼭 지워야하는가, 안 지우면 unique 처리는 어떻게 하는가 등등 여러가지 고민을 해봐야 할 것 같습니다. 저희도 회의를 통해서 soft delete 을 해야하는지 hard delete을 해야하는지 논의하고 결정해서 작업하는 것 같아요. 내부적으로는 soft delete랑 hard delete을 혼용해서 사용하고 있습니다. 질문자님이 말씀하신 것처럼 where 조건이 붙는게 없는 것 보다 연산이 더 들어가긴하지만, soft delete을 해야되는 상황이거나 구현해서 얻는 이점이 더 크다면 감수하고 사용하는 것 같습니다. 예를 들면, 데이터를 가지고 ML/DL 모델을 학습 시키는 파이프라인이 있는 경우, 데이터를 soft delete 처리해서 사용자가 접근하는 서비스에는 노출이 안되지만 모델 학습 용도로는 계속 사용할 수는 있겠죠. 복구하는 경우도 역시 상황에 따라 다를 것 같아요 👍

현구막님의 프로필 사진

질문주신 의도에 알맞는 답변인진 모르겠지만, 개인적인 생각을 공유드려요. 비즈니스에서 직접적으로 soft delete를 요구하지 않는다면, 대부분의 경우 데이터의 상태변화를 자동으로 관리해주는 프레임워크나 라이브러리에게 역할을 맡길 수 있으므로 마음 놓고 hard delete를 사용할 수 있습니다. 가령 Hibernate의 경우 Envers(https://hibernate.org/orm/envers/)의 도움을 받을 수 있습니다. 데이터의 상태를 관리하는 별도의 테이블이 생성되고, 별도로 생성된 테이블을 통해 데이터의 생성, 수정, 삭제를 처음부터 끝까지 기록하기 때문에 실제 데이터 테이블에서는 데이터 복원 걱정없이 hard delete를 할 수 있습니다. 질문주신 내용 "soft delete를 하게되면 where조건으로 한번 더 데이터를 확인해야하는데 비효율적이지 않나요?" 의 답변으로 "대부분의 ORM 프레임워크에서 자동으로 필터 조회 및 soft delete를 지원하기 때문에 신경쓰지 않아도 된다." 는 의견도 있습니다. 그러나 결국 실제 쿼리는 삭제시 delete가 아닌 alter, 조회시 where 포함 등이 날아가기 때문에 저는 계속 헷갈리더라구요. 거기에 하나의 데이터에 대해 soft delete와 hard delete가 공존하게 되면 인지부조화도... 대부분의 경우 soft delete는 hide라는 상태값으로 대체해서 표현할 수 있었습니다. soft delete를 hide로 대체하게 되면 "데이터를 복구한다" 대신 "숨겨진 데이터를 조회한다"가 되고, "where 조건으로 한번 더 데이터를 확인한다" 대신 "where 조건으로 숨겨진 데이터를 확인한다"가 됩니다. 명칭만 바꿨을 뿐인데 훨씬 자연스럽게 읽게 되지요. 비즈니스와 팀마다 데이터 관리방법이 다르고, soft delete 말고도 여러가지 파훼법이 있다는 이야기를 전달드리고 싶었습니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!