작성
·
1.8K
7
우선 관련 다른 댓글들은 읽고왔는데 더 궁금한 점이 있어 질문드립니다.
Q1. baseEntity에서 abstract class를 사용하지 않고 실제 class를 사용하신 이유
softDelete 사용시 springdatajpa 레퍼런스 닥스에서는
엔티티에 delete flag를 만들어주고,
@sql로 delete 실행을 delete flag를 true로 만들어주는 방식을 예제로 두고 있습니다.
그러면 baseEntity에서
- 필드 delete flag 선언 -> 전역 엔티티에 적용
- @sql 로 delete 실행 변경 -> 전역정용
- @where절 delete=false -> 전역 적용
이렇게 할 경우 장점으로는
cascade 옵션으로 delete// orphanRemoval에도
자동으로 delete 쿼리가 업데이트 쿼리로 변경되어
삭제 플레그의 연관관계를 보다 쉽게 처리할 수 있는거로 생각됩니다.
또한 필터? 옵션으로서 실제 플레그로 삭제된 엔티티도 조회 가능하도록 제공하는걸 확인했습니다.
관련 다른 댓글에서 답변해주신것을 보면 영한님은 전역 엔티티가 아닌 엔티티별로 메서드를 정의해주고 연관관계가 있을경우 직접 연관관계 메서드에서 해당 메서드를 사용하시는 것으로 추측됩니다.
Q2. 그렇게 사용하시는 걸 선호하시는 이유를 알 수 있을까요?
개인적으로 전역으로 관리하는게 좋겠다 싶었던 이유는
사용자에 의해 기록된 모든 데이터가 기업의 입장에서는 엄청나게 큰 자산이고,
이것을 통해 추천 상품 알고리즘을 위한 데이터로 활용할수도 있고 (주문기록, 회원의 나이 등 정보, 관심상품 등등),
어떠한 비즈니스 정책들을 정하는데 큰 도움이 될거라 싶어
실무에서는 플래그로 삭제 하지 않을까? 해서 전역으로 관리 하는게 좋겠다 싶었습니다.
근데 전역으로 저렇게 처리할 경우, 고객 정보같은 민감한 데이터는 실제로 삭제를 해줘야 할것 같은데 (회원 탈퇴시 같은 경우)
회원과 연관관계가 있는 엔티티들이 엄청나게 엮어 있을때
이런 경우는 어떻게 처리해야 좋을지 감이 잡히지 않습니다.
그래서 추가 질문으로는
Q4. 실무에서 softDelete를 어떤 엔티티에 적용하는지
Q5. 회원은 민감한 정보라 실제 삭제를 할때 관련된 연관관계가 있는 엔티티는 어떻게 처리하는게 좋을지
예를들면 member에 null값으로 그냥 냅두는지
이런 것들이 궁금합니다.
답변주시면 정말정말 감사드리겠습니다.
쿼리dsl 강의 듣기전에 datajpa로 이것저것 토이프로젝트를 해보면서 고민해보는데 생각보다 적용함에 있어 고려할것들이 넘쳐나 질문을 많이 하게되네요
답변 1
10
안녕하세요. 승현님
Q: baseEntity에서 abstract class를 사용하지 않고 실제 class를 사용하신 이유
-> baseEntity를 직접 생성할 일이 없기 때문에 abstract class를 만드는 것이 더 나은 방법입니다.
문의하신 springdatajpa 레퍼런스 닥스에서는 soft delete에 대한 내용이 없습니다. 혹시 어디에서 관련 내용을 보셨는지요?
softDelete에 대한 내용
delete를 처리하는 여러가지 방법이 있습니다.
1. 실제 삭제한다.
2. delete 필드를 YN으로 두는 방법 (soft delete)
3. 삭제 데이터는 삭제 테이블로 이동한다.
@sql, @where 등을 실무에서 사용하기가 많이 애매합니다.
왜냐하면 실무에서는 경우에 따라서 실제 어떤 데이터가 삭제되었는지 삭제된 데이터도 조회할 수 있어야 하기 때문입니다.
그래서 soft delete 방법을 사용하더라도 좀 불편해도 JPQL에서 삭제 데이터를 제외하고 조회하거나 애플리케이션에서 제외합니다.
Q4: soft delete 부분은 비즈니스 상황에 따라서 다릅니다. 생각하신 것 처럼 뭔가 남겨두고 복구를 간단하게 할 수 있어야 할 때 사용합니다.
Q5: 비즈니스 상황에 따라서 다릅니다. soft delete를 하거나 또는 연관관계를 만들지 않는 방법도 있습니다.
회원 탈퇴의 경우 회원을 직접 삭제하는 것이 아니라 회원의 상태가 DELETE로 변경될 수도 있습니다.
그런데 법적으로 탈퇴 회원을 분리해서 보관해야 하는 요구사항이 있다면 실제 회원 데이터를 삭제해야 합니다.
그리고 연관된 데이터는 비즈니스 요구사항에 따라서 연관관계를 끊은 상태로 남겨둘지 아니면 함께 삭제할지 결정해야 합니다.
감사합니다.