브랜디에서 접한 soft delete
에 대한 내용을 적어보려합니다.
기존에 장고를 사용해서 프로젝트를 할 때는 실무에서 사용되는 방식에 대한 고려 없이, 단순히 모델 간의 관계만 생각해서 foreign key
가 적용된 대상에 대한 삭제 처리를 생각했습니다.
아래의 코드는 장고를 사용해 작성한 코드인데, 인스타그램으로 치면 포스팅 게시물의 개념인 style
과 이를 참조하고 있는 StyleComment
로 표현되고 있는 댓글
이 있습니다. 여기에서는 포스팅이 삭제되면 댓글이 삭제되는 UI
적인 생각만을 가지고 style
이 삭제되면 바로 댓글이 삭제되도록 on_delete = models.CASCADE
처리를 했습니다.
물론 회사의 정책에 따라 실제 삭제 처리를 할 수도 있지만, DB 차원에서 삭제를 안할수도 있다는 점은 고려하지 못했습니다.
이번에 브랜디에서 셀러 어드민 모델링을 진행하면서, 실제로 물리적인 삭제를 처리하는 데이터는 거의 없다는 것을 알게 되었고, 이를 반영하기 위해 soft delete
처리를 한다는걸 알게 되었습니다. 이전에도 soft delete
라는 개념은 어렴풋이 알고 있었지만 실제로 적용해본건 처음이었습니다.
위의 코드는 셀러 어드민에서 상품번호를 관리하는 테이블을 만드는 쿼리인데요, 마지막 필드로 is_deleted
라는 삭제여부 필드를 추가해줬습니다. 말 그대로 삭제처리를 했는지 안했는지를 알려주는 필드인데, default
값을 FALSE
로 줌으로써 삭제처리가 되지 않은 상태로 데이터를 생성해줍니다. UI
단에서 삭제처리가 되면 이 필드를 TRUE
로 바꿔주고 UI
에도 해당 상태로 노출해줍니다.
이제 소프트 삭제라는 개념을 좀 더 명확히 알게 되었고, 이후에 관련 모델링을 진행할 때 물질적으로 삭제 처리를 하는지 좀 더 고민을 할 수 있게 되었습니다. 점점 더 많은걸 알아가는 기분!