회원탈퇴가 어떻게 보면 사용자가 느끼기에 엄청 중요하게 체감되는 기능이 아니고 별 신경을 안쓸 수도 있는 기능일 수도 있다. 하지만 다른 서비스를 사용하면서 회원탈퇴가 찾기 어려울 순 있어도 없는 경우는 못 봤다. 그래서 처음에는 크게 어렵지 않게 생각하고 만들려고 했었다. 그때는 이렇게 일이 커질 줄 몰랐다.
회원탈퇴하면 그냥 DB에서 정보를 지우고 참조되고 있는 테이블의 데이터를 다 지우면 되는 거 아닌가?
- 어떤 모임을 누군가가 만드는데 그것을 만든 사람이 탈퇴했을 때 그룹이 다 지워지면 같이 이용 중인 사람들에게 영향이 갈 수 있다.
- 우리의 서비스는 추억을 가장 큰 요소로 가져가는데 누군가 탈퇴했어도 그 사람이 작성한 게시글을 같은 모임의 사람들은 그래로 볼 수 있는 게 좋지 않을까 하는 의견도 나왔다.
- 탈퇴한 사람의 닉네임과 프로필 사진은 다른 것으로 대체 된다.
- 기존 데이터를 남기고 유저 데이터만 지울 수 있어야 한다.
- 멘토님이 이런 것들을 듣고 이야기해 주신 게 일반적인 회사들은 바로 데이터를 지우지 않는다. 소프트 딜리트로 삭제 처리만 하고 하드 딜리트는 나중에 이루어진다.
- 한 번에 많은 데이터 처리가 이루어진다면 다른 서버에 속도가 저하되고 다른 사용자들이 기다리게 될 수도 있다.
- 10,000개의 데이터를 지운다고 하면은 50개씩 처리하는 것이다.
- 50개씩 처리하면서 중간에 다른 요청들을 처리하고 서버가 원활할 때만 삭제가 이루어지게 한다.
- 사용자가 적은 시간에 하면 더 효율적이고 일정 시간마다 실행되게 설정해서 자동적으로 처리할 수 있다.
- 한 번에 이것들을 다 적용시켜서 만들 수 없기에 정리를 해보자
- 회원 탈퇴 처리가 되었지만 DB에는 정보를 보관.
- 탈퇴하여도 그 사람이 작성한 게시글은 남김.
- 탈퇴한 회원이기에 닉네임과 프로필 사진은 다른 것으로 대체.
- 탈퇴 후 보관 기간이 지난 데이터는 하드 딜리트로 완전 삭제 처리.
- 서버의 상태를 확인하며 삭제 작업으로 인한 다른 서비스에 영향 없게 해야 함.
- 자동으로 정해진 시간에 실행.
여기서 내가 가장 많이 생각했던 핵심은 어떻게 서버의 상태를 확인해서 삭제 처리가 이루어지게 하지 하는 부분이었다. 소프트 딜리트는 시퀄라이즈 ORM에서 적용할 수 있고, 게시글이 남는 것이나 탈퇴한 회원의 닉네임 등을 대체하는 것은 조금 복잡해져도 할 수 있을 것 같았다. 그리고 자동으로 실행되게 하는 것도 찾아보면 라이브러리나 함수를 사용하면 가능할 것 같았다. 그런데 서버의 상태를 확인해서 중간중간 삭제가 이루어지게 하는 것은 어떻게 해야 할지 방향을 잡지 못했다. 그래서 그 부분부터 찾아보고 테스트를 했다.
'오늘 뭐했냐 > 함께했던 작업들' 카테고리의 다른 글
23.08.27 회원 탈퇴 만들기3 (서버 상태 모듈 적용하기) (0) | 2023.09.03 |
---|---|
23.08.26 회원 탈퇴 만들기2 (서버 상태 확인 모듈 만들기) (0) | 2023.09.03 |
23.08.23 리프레시 토큰 (Refresh Token) (0) | 2023.09.02 |
23.08.22 레디스 클라우드(Redis Cloud) (0) | 2023.08.31 |
23.08.21 프로젝트 중간 점검 (0) | 2023.08.30 |