배경
프로젝트의 Api 구현이 거의 마무리될 시점에 회원탈퇴 기능을 작업하게 되었다. 회원 탈퇴 기능은 User 테이블 뿐만 아니라 Order, Cart, Chat 등 여러 도메인의 로직을 건드려야하기 때문에 코드가 자주 바뀔수 있는 초반보다 기능이 안정화된 시점에 구현하는 것이 제일 적합하다고 판단했다.
문제
처음에 단순히 관련 데이터들만 삭제하면 된다고 생각했다. 하지만 ERD를 다시 살펴보니 여러 테이블들이 엮여있기 때문에 함부로 데이터를 삭제해버리면 관련된 기능들이 동작하지 않거나 심각한 문제가 생길 수도 있다고 판단했다.
전략
그래서 회원탈퇴 시 처리되는 데이터들을 두 가지 종류로 우선 분류해봤다.
1. 삭제해야 할 데이터 (Hard Delete) : 장바구니, 친구 관계 등
2. 보존해야 할 데이터 (Soft Delete) : 주문 내역, 채팅 기록, 선물 내역 등
이렇게 두가지로 분류를했다. 장바구니, 친구관계같은 없어져도 상관없는 데이터들은 삭제하고
주문내역, 채팅 기록같은 중요데이터들은 남겨두기로 결정했다.
구현
1. 탈퇴 전 조건 체크

현재 배송중인 상품이 있다면 탈퇴하지 못하도록 막았다.
2. 개인정보 식별 불가 처리

개인정보는 식별 불가하도록 랜덤 값을 사용하거나 null처리를 하였다. 탈퇴한 회원의 정보를 악용할 경우를 차단하기 위함이다.
3. 계정 접근 차단

로그인 아이디와 비밀번호를 변경하여 로그인을 원천 차단하였다. 비밀번호는 랜덤 UUID로 덮어서 복구가 불가능하게 하였다.
회고
회원탈퇴 기능을 구현하면서 지운다는 개념에도 물리적 삭제와 논리적 삭제가 있다는 것을 알게 되었다. 실무에서는 문제 대응이나 분석을 위해 데이터를 남겨두는 경우가 많다고 한다. 단순한 설계를 넘어서 사용자 경험과 운영적인 부분도 고려할 수 있게 되었다.
'Project > Shift(현대이지웰 풀스택 과정)' 카테고리의 다른 글
| JWT 로그인과 보안 전략 (0) | 2026.01.23 |
|---|