타임딜 서버는 3개의 엔터티로 이루어져 있다. User, Order, Product가 그 엔터티이다.
이 애플리케이션에서 deleteUser를 구현하려면 어떻게 해야 할까? 이는 과거 다른 애플리케이션을 구현할 때도 고민했던 문제이다. 회원 탈퇴 구현 방식은 크게 hard delete와 soft delete로 나뉜다. 그렇다면 타임딜 서버는 어떤 delete 방식을 택하는 게 좋을까?
한국의 개인정보 보호법 제21조(개인정보의 파기)에 따르면, 개인정보처리자는 보유기간의 경과, 개인정보의 처리 목적 달성 등 그 개인정보가 불필요하게 되었을 때에는 지체 없이 그 개인정보를 파기하여야 한다. 때문에 타임딜 서버에서는 deleteUser를 hard delete 방식으로 구현하기로 했다.
단, 회원 탈퇴 이후에도 거래 기록(Order) 자체는 5년간 보관하기로 했다. 이는 전자상거래 등에서의 소비자보호에 관한 법률 제6조(거래기록의 보존 등)에 관련한 전자상거래 등에서의 소비자보호에 관한 법률 시행령 제6조(사업자가 보존하는 거래기록의 대상 등)에 기록된 계약 또는 청약철회 등에 관한 기록은 5년간 보관되어야 한다는 것에 따른 것이다.
User 엔터티가 삭제되어도 User 엔터티의 정보가 남아있는 Order 엔터티는 남겨두기 위해서는 User Entity와 연관관계 없이 Order Entity 자체적으로 receiverName, address, receiverContact정보를 가져야 한다.
Product의 경우에는, 판매자가 탈퇴한 경우 is_deleted를 true로 만든다. 그리고 상품을 주문한지 5년이 지나 Order가 hard delete될 때마다 Order와 Product의 양방향 연관관계를 끊는다. 그러다 Product와 연관관계를 가진 Order가 0개가 되면, 비로소 Product도 hard delete한다.
이를 구현하기 위해 Product는 판매자의 일부 정보(seller_name)만을 가져야 한다.
'Project > 타임딜 서버' 카테고리의 다른 글
인덱스를 통한 목록 조회 성능 개선 (0) | 2023.03.22 |
---|---|
넘블 타임딜 서버 구축하기 챌린지 회고 (0) | 2023.03.16 |