소프트 삭제(soft delete) 처리에 관하여

jomminii_before·2020년 3월 29일
0

브랜디에서 접한 soft delete에 대한 내용을 적어보려합니다.

기존에 장고를 사용해서 프로젝트를 할 때는 실무에서 사용되는 방식에 대한 고려 없이, 단순히 모델 간의 관계만 생각해서 foreign key가 적용된 대상에 대한 삭제 처리를 생각했습니다.

아래의 코드는 장고를 사용해 작성한 코드인데, 인스타그램으로 치면 포스팅 게시물의 개념인 style과 이를 참조하고 있는 StyleComment로 표현되고 있는 댓글이 있습니다. 여기에서는 포스팅이 삭제되면 댓글이 삭제되는 UI적인 생각만을 가지고 style이 삭제되면 바로 댓글이 삭제되도록 on_delete = models.CASCADE 처리를 했습니다.

물론 회사의 정책에 따라 실제 삭제 처리를 할 수도 있지만, DB 차원에서 삭제를 안할수도 있다는 점은 고려하지 못했습니다.

이번에 브랜디에서 셀러 어드민 모델링을 진행하면서, 실제로 물리적인 삭제를 처리하는 데이터는 거의 없다는 것을 알게 되었고, 이를 반영하기 위해 soft delete 처리를 한다는걸 알게 되었습니다. 이전에도 soft delete라는 개념은 어렴풋이 알고 있었지만 실제로 적용해본건 처음이었습니다.

위의 코드는 셀러 어드민에서 상품번호를 관리하는 테이블을 만드는 쿼리인데요, 마지막 필드로 is_deleted라는 삭제여부 필드를 추가해줬습니다. 말 그대로 삭제처리를 했는지 안했는지를 알려주는 필드인데, default 값을 FALSE로 줌으로써 삭제처리가 되지 않은 상태로 데이터를 생성해줍니다. UI단에서 삭제처리가 되면 이 필드를 TRUE로 바꿔주고 UI에도 해당 상태로 노출해줍니다.

이제 소프트 삭제라는 개념을 좀 더 명확히 알게 되었고, 이후에 관련 모델링을 진행할 때 물질적으로 삭제 처리를 하는지 좀 더 고민을 할 수 있게 되었습니다. 점점 더 많은걸 알아가는 기분!

profile
https://velog.io/@jomminii 로 이동했습니다.

0개의 댓글