( springboot & mysql ) 회원 탈퇴 기능 및 구조에 대한 고민

ZZOOO

·

2022. 11. 7. 17:34

 

안녕하세요 ZZOOO 입니다.

 

포스팅을 한지 오랜 시간이 흘렀네요, 간만에 포스팅을하니까 여러 생각이 듭니다.

처음 시작할 때의 그 열정과 감정이 사그라든건지 바쁘게 살다 보니까 하나둘씩 양보하고 포기하게 되서 조금은 서글픕니다.

 

오늘 포스팅할 주제는 어려운 주제는 아닌데요, 제가 나중에 돌아봤을 때 어떤 고민을했는지 기록하기 위해서
포스팅을 해보는것이니 비슷한 고민이나 생각을 하고 계신분들은 댓글 남겨주시면 감사하겠습니다.

각설하고 오늘 글을 쓰게 된 것은 아래와 같은 주제입니다.


회원 탈퇴 기능

 

백엔드 개발자로서의 레벨업을 하고, 이직을 위한 빌드업으로서 사이드 프로젝트를 하게 되었습니다.

 

다른건 아니고 개발자들이 이용할 수있는 게시판을 만들어 보고자 데모 버전으로 springboot와 mysql 등을
이용해서 프로젝트 개발 중 회원 탈퇴 기능을 구현하다가 아래와 같은 고민에 빠졌습니다.

 

일반적인 CRUD 기능 중에서 D에 해당되는 Delete기능을 아래와 같이 구현하였습니다.

 

<delete id="deleteMemberById" parameterType="int">
	DELETE FROM member WHERE member_id=#{member_id}
</delete>

 

이런식으로 구현을 하면 삭제되는 기능에있어서 문제는 없지만, auto increment로 증가하는 회원의 고유 번호 
sequence에 혼란이 조금 왔던것 같습니다. ( 결벽증이 좀 있습니다.. ) 

 

예를들어, 5명의 회원이 차례대로 가입을해서 1,2,3,4,5번의 회원이 존재하는데 4번의 회원이 탈퇴를하게 된다면,
db에는 1,2,3,5번 순으로 순서가 정렬되게 됩니다.

 

본인은 이러한 현상이 굉장히 보기 싫었습니다. 하지만 로직상에서 어떤 문제를 초래하는지 아직 깨닫지 못해서
코드를 변경하지 않았습니다. 하지만 오늘 소스를 쭉 보는데 자꾸 이 부분이 마음에 걸려서 로직을 변경하고자합니다.


IDEA ? 

 

프로젝트 구조나 db 스키마를 처음 구축할 때 구글링을 하지 않고 오로지 본인이 기존에 적어놨던 메모들과
기억들에 의존해서 구축했습니다. 왜냐하면 더 높은 레벨이 되기전에 많이 삽질을해봐야한다고 생각했지요.

 

실제로 많이 쓰는 방식인지는 모릅니다. 본인이 플랫폼 회사에서 백엔드 업무를 경험해보지 않았고
제로 베이스부터 회원 관리 프로그램을 짜본적도 없기 때문입니다.

 

어찌됐든 본인이 아이디어를 얻은 부분은 쇼핑몰 같은 사이트에 회원가입 후 탈퇴하려고할 때
ex) "개인정보를 6개월동안 보유하고있는것에 동의하는가.. " 와 같은 맥락의 문구였습니다.

 

이 부분에서 회원 탈퇴할 때 바로 db에서 삭제해버리는 것이 아니라
activation, active 와 같은 db 컬럼을 회원 테이블에 추가해서 Y or N 값으로 관리하면 되겠다고 떠올랐습니다.

 

더 좋은 방법이 있다면 꼭 알려주시길 바랍니다 ㅎㅎ 


Add Column

 

mysql 기준으로 컬럼을 추가하는 방법은 3가지정도로 나뉩니다.

 

마지막 컬럼에 추가 

ALTER TABLE `table_name` ADD `column_name` data_type;

 

맨 앞 컬럼에 추가

ALTER TABLE `table_name` ADD `column_name` data_type FIRST;

 

지정 컬럼 다음에 추가

ALTER TABLE `table_name` ADD `column_name` data_type AFTER `front_column_name`;

 

저는 지정 컬럼 다음에 추가를 이용해서 active 라는 컬럼을 추가했습니다.


회원 탈퇴 로직 변경

 

위와 같이 active 라는 컬럼을 추가해주고, 회원이 회원 탈퇴를 진행했을 때 deleteMapping 된 API를 호출해주고,
기존 sql과 다른 아래와 같은 sql를 실행해주면 됩니다.

 

<update id="deleteMemberById" parameterType="DAO">
    UPDATE member 
    SET updated_at=now(), active='N'
    WHERE member_id=#{member_id}
</update>

 

위와 같이 회원 탈퇴 로직을 변경하고, 서버사이드에서 회원의 마지막 업데이트 날짜가 50일 or 60일이 지났을 때 동안 active 상태가 'N'인경우는 개인정보는 모두 삭제하는 로직으로 짜볼까 생각중입니다.

 

만일 특정 기간이 지나고 아예 삭제를하는 로직이라면, 어차피 sequence가 빵꾸나는건 똑같기 때문에,
그 부분은 더 생각해봐야겠네요


이렇게 별거 아닐거라고 생각하던 회원 탈퇴기능에서 맞닦뜨렸던 고찰에 대해서 늘어놓아보았습니다.

 

긴 글 읽어주신분들에게 감사하고, 댓글 남겨주시면 찾아가서 좋은 글과 정보 같이 볼 수있었으면합니다 ㅎㅎ

반응형