현재 만들고 있는 사이트에 회원 삭제 기능을 넣어 볼 것입니다.
회원 탈퇴 로직
(1) 회원 탈퇴 버튼을 클릭한다.
(2) UPDATE API를 실행하여, 유저 데이터의 탈퇴유무 COLUMN을 TRUE로 바꿔준다.
(3) 홈 화면으로 이동시키며 , 로그인 유무 확인을 위해서 localSotrage의 정보를 로그아웃 상태로 바꿔준다.
설명
회원 탈퇴 기능이지만 , DELETE문을 사용하지 않고 UPDATE문을 이용하여, 회원 탈퇴 유무 구분하였습니다.
이유는 데이터는 마케팅,영업, 제품개발 등에 가장 중요한 역할을 하는 것이 데이터이며, 최근데이는 AI의 발달로 빅데이터의 중요도가 상당히 높아졌습니다. 그래서 데이터 하나하나가 중요한 자산이 될 수 있기에 데이터를 지우는 것이 아닌 남겨두는 방향으로 만들어 보았습니다.
=> 데이터 관련 링크
https://www.etnews.com/20230608000286
https://www.aitimes.kr/news/articleView.html?idxno=28216
DB 테이블 및 실행 코드
CREATE TABLE USER_TABLE(
U_IDX INT PRIMARY KEY,
U_EMAIL VARCHAR(40) NOT NULL,
U_PASSWORD VARCHAR(40) NOT NULL,
U_NAME VARCHAR(20) NOT NULL,
U_GENDER VARCHAR(8) NOT NULL,
U_BIRTH DATE NOT NULL,
U_IMAGE VARCHAR(40) DEFAULT'defualt.png',
U_WITHDRAWAL VARCHAR(10) DEFAULT'false' --> 현재 회원 탈퇴 유무 확인을 위한 칼럼
--> false : 가입 유저 / true : 탈퇴 유저
);
-> U_WITHDRAWAL 칼럼이 현재회원 탈퇴 유무 확인을 위한 칼럼이다.
-> 로그인할 때는 EMAIL , PASSWORD 확인과 U_WITHDRAWAL가 'false'인지 확인하게 된다.
// ⇒ 회원 탈퇴 시 , U_WITHDRAWAL 정보를 "true"로 바꿔준다.
const updateSQL = `UPDATE USER_TABLE SET U_WITHDRAWAL = 'true' WHERE U_IDX=?`;
//회원 탈퇴하기 버튼 클릭시 실행 함수
const withdrawalUser = async () => {
try {
// 회원 탈퇴 UPDATE API 실행
const result = await axiosInstance.get("/mypage/withdrawalUser");
// 홈 화면으로 이동
router.push({pathname: `/`,});
// 로그인 유무 '무'로 변경시키기
localStorage.setItem("login", "false");
} catch (error) {
console.log(error);
}
};
회원 탈퇴 시 고려해본 사항
=> 회원 탈퇴 시 관련된 데이터 동시에 삭제시키기
가입한 유저가 남긴 데이터(ex 유저가 입력한 댓글, 유저가 생성한 일정 등 )을 자동으로 삭제되게 만들어보려고 했었습니다.
[MYSQL 유저 ID관련 테이블의 유저ID에 외래키 추가 => 캐스케이드 되게 설정]
그러나,실무에서는 외래키 사용을 지양한다는 것을 알게됐습니다.
외래키를 사용하면 데이터 수정 시 , 항상 무결성 검사를 하게 되는데 이러한 검사의 선행은 성능저하를 일으킵니다.
그리고 프로그램의 로직이 바뀌거나 서비스가 확장되었을 때는 이 외래키의 제약조건 때문에 에러가 일어날 가능성이 매우 높아집니다.
그래서 위의 방법은 사용하지 않기로 결정했습니다.
느낀점
기능 하나하나를 만들어볼수록 여러가지 측면에서 생각해 보는 것이 중요한 것 같습니다.
성능 측면에서 가장 좋은 방법을 생각해보는 것도 중요하고 데이터를 어떻게 다뤄주는가에 대해서도 생각해 볼 수 있는 기회였습니다.