그누보드 회원 탈퇴와 삭제 처리 메커니즘 분석
페이지 정보

본문
그누보드 운영 시 회원 탈퇴와 삭제의 차이를 이해하고, 데이터 관리 정책에 맞는 회원 정리 방법을 안내합니다.
회원 탈퇴와 삭제의 차이점 및 처리 메커니즘
그누보드에서 회원 탈퇴와 삭제는 데이터 처리 방식과 목적에서 명확한 차이가 있습니다. 운영자는 이를 구분하여 회원 관리 정책을 수립해야 합니다.
1. 회원 탈퇴 (소프트 삭제)
회원 탈퇴는 즉시 데이터를 삭제하지 않고, 유예 기간을 두어 관리자가 추후 완전히 삭제할 수 있도록 하는 방식입니다.
- 처리 로직: 탈퇴 시 회원 정보의
mb_leave_date필드에 탈퇴 날짜가 기록됩니다.bbs/login_check.php는 이 필드 값을 확인하여 탈퇴한 회원의 로그인을 차단합니다. - 자동 삭제: 관리자가 설정한 기간(기본 30일)이 지나면, 관리자가 사이트에 로그인하는 시점에
bbs/db_table.optimize.php파일이 실행되면서 해당 회원의 데이터가 삭제됩니다. - 주의사항: 이 자동 삭제는 크론(Cron) 작업이 아니라 관리자가 사이트에 로그인해야만 실행되는 구조입니다. 관리자가 장기간 로그인하지 않으면 탈퇴 후 삭제 기간이 지나도 데이터가 삭제되지 않고 남아있을 수 있습니다.
- 복구: 탈퇴 후 삭제 기간(기본 30일) 이내라면, 관리자 페이지의 회원 수정 화면에서
mb_leave_date값을 빈 값으로 수정하여 탈퇴를 취소하고 회원을 복구할 수 있습니다.
2. 회원 삭제 (데이터 초기화)
관리자가 회원 관리 페이지에서 직접 실행하는 즉시 삭제 방식입니다.
- 처리 로직:
lib/common.lib.php에 정의된member_delete함수가 호출됩니다. 이 함수는 아이디를 제외한 이름, 닉네임, 연락처 등 개인정보를 빈 값으로 초기화하고,mb_memo필드에 삭제 날짜를 기록합니다. - 아이디 보존 이유: 아이디를 완전히 삭제하지 않고 남겨두는 이유는, 추후 다른 사용자가 동일한 아이디로 재가입할 때 발생할 수 있는 게시물 소유권 충돌 및 데이터 무결성 문제를 방지하기 위함입니다.
- 연관 데이터: 회원 삭제 시 포인트, 쪽지, 스크랩, 관리 권한 등 연관된 데이터도 함께 정리됩니다.
3. 완전 삭제(Hard Delete) 시 고려사항
기본 기능과 달리 DB에서 레코드 자체를 완전히 삭제하려면 lib/common.lib.php의 member_delete 함수를 수정해야 합니다.
- 주의: 단순히 회원 테이블의 레코드만 삭제하면 포인트, 쪽지, 스크랩 등 연관 테이블과의 데이터 무결성이 깨질 수 있습니다. 따라서 완전 삭제를 구현할 때는 연관 테이블의 데이터도 함께 삭제하는 SQL 쿼리를 추가해야 하며, 실 운영 중인 사이트에서는 게시물 소유권 충돌 등 부작용이 발생할 수 있으므로 신중해야 합니다.
탈퇴 회원의 자동 삭제 메커니즘
그누보드에서 회원이 탈퇴하면 즉시 데이터가 삭제되지 않고, 유예 기간(기본 30일)을 거쳐 관리자가 사이트에 로그인하는 시점에 삭제 처리됩니다. 이 과정은 다음과 같은 구조로 작동합니다.
1. 탈퇴 처리와 유예 기간
- 탈퇴 시점: 회원이 탈퇴하면
mb_leave_date필드에 탈퇴 날짜가 기록되며, 이후 해당 아이디로 로그인이 차단됩니다. - 유예 기간 설정: 탈퇴 후 삭제까지 대기하는 기간은 관리자 페이지 > 환경설정 > 기본환경설정 > 회원탈퇴 후 삭제일에서 변경할 수 있습니다. 기본값은 30일입니다.
2. 자동 삭제 실행 조건
- 실행 파일:
bbs/db_table.optimize.php파일이 탈퇴 회원의 자동 삭제를 담당합니다. - 작동 방식: 이 파일은 별도의 크론(Cron) 작업이 아니라, 관리자가 사이트에 로그인할 때 실행됩니다. 따라서 관리자가 장기간 사이트에 로그인하지 않으면 설정된 삭제 기간이 지나도 데이터가 삭제되지 않고 남아있게 됩니다.
- 삭제 로직: 설정된 기간이 지난 탈퇴 회원을 조회하여
member_delete함수를 호출함으로써 관련 데이터를 정리합니다.
3. 회원 삭제(member_delete)의 특징
- 데이터 초기화:
member_delete함수는 아이디를 제외한 이름, 닉네임, 연락처 등 개인정보를 빈 값으로 초기화하고,mb_memo필드에 삭제 날짜를 기록합니다. - 아이디 보존 이유: 아이디를 완전히 삭제하지 않고 남겨두는 이유는, 추후 다른 사용자가 동일한 아이디로 가입했을 때 발생할 수 있는 게시물 소유권 충돌 및 데이터 무결성 문제를 방지하기 위함입니다.
- 연관 데이터 정리: 회원 삭제 시 포인트, 쪽지, 스크랩, 관리 권한 등 연관된 데이터는 함께 삭제됩니다.
4. 주의사항 및 다음 행동
- 자동 삭제 지연: 관리자가 주기적으로 로그인하지 않는 환경이라면 자동 삭제가 실행되지 않으므로, 데이터 정리가 필요할 경우 관리자 페이지에서 수동으로 확인해야 합니다.
- 완전 삭제(Hard Delete): 테스트 계정이나 스팸 회원 등을 위해 아이디까지 DB에서 완전히 삭제하려면
lib/common.lib.php내member_delete함수를 수정해야 합니다. 단, 이 경우 기존 게시물과의 연결 고리가 끊어질 수 있으므로 운영 정책에 따라 신중히 결정해야 합니다.
그누보드에서 회원 삭제 시 아이디를 완전히 제거하지 않고 보관하는 것은 데이터 무결성과 게시물 소유권 충돌 방지를 위한 설계입니다.
아이디 보관의 주요 이유
- 게시물 소유권 충돌 방지: 회원 아이디가 DB에서 완전히 삭제된 후, 다른 사용자가 동일한 아이디로 재가입할 경우 기존 회원이 작성했던 게시물이나 댓글의 소유권이 새로 가입한 사용자에게 귀속되는 혼선이 발생할 수 있습니다.
- 참조 무결성 유지: 게시판이나 댓글 테이블에 남아 있는 기존 글의 작성자 정보와 회원 테이블의 아이디를 매칭하여 글의 주인을 특정하기 위함입니다. 아이디가 완전히 제거되면 관련 기능을 사용할 때 데이터 매칭 오류가 발생할 수 있습니다.
운영 시 고려사항
- Hard Delete(완전 삭제)의 위험성: 코어 파일(
lib/common.lib.php)의member_delete함수를 수정하여 아이디까지 완전히 삭제하는 방식을 적용할 경우, 게시물 소유권이 불분명해지거나 참조 무결성 문제가 발생할 수 있습니다. - 권장 조치: 실 운영 중인 사이트에서 부득이하게 완전 삭제를 적용해야 한다면, 회원 테이블뿐만 아니라 포인트, 쪽지, 스크랩 등 연관된 테이블의 데이터를 함께 정리하는 SQL 조치가 반드시 선행되어야 합니다.
회원 데이터 완전 삭제(Hard Delete) 처리 방법
그누보드에서 관리자 페이지를 통해 회원을 삭제하면, 동일한 아이디로 재가입할 때 발생할 수 있는 게시물 소유권 충돌을 방지하기 위해 아이디를 남기고 개인정보만 초기화하는 방식을 사용합니다. 테스트 계정이나 스팸 회원 등을 위해 DB에서 데이터를 완전히 제거(Hard Delete)하려면 lib/common.lib.php 파일의 member_delete 함수를 수정해야 합니다.
1. 수정 위치 및 방법
- 파일 경로:
lib/common.lib.php - 수정 함수:
member_delete($mb_id) - 수정 내용: 기존의
update쿼리(개인정보 초기화)를delete쿼리로 변경합니다.
// 수정 전: 개인정보 초기화 및 아이디 보관
$sql = " update {$g5['member_table']} set... ";
// 수정 후: 회원 데이터 완전 삭제
sql_query(" delete from {$g5['member_table']} where mb_id = '{$mb_id}' ");
2. 주의사항 및 데이터 무결성
회원 데이터를 DB에서 직접 완전히 삭제할 경우, 다음과 같은 참조 무결성 문제가 발생할 수 있으므로 신중해야 합니다.
- 게시물 소유권 혼선: 회원 아이디가 삭제된 후 동일 아이디로 다른 사용자가 재가입하면, 과거 게시물의 소유권이 새 사용자에게 귀속되거나 얽힐 수 있습니다.
- 연관 데이터 연결 끊김: 게시판 글, 댓글, 포인트, 쪽지, 스크랩 등 해당 회원과 연결된 데이터가 고아 데이터(Orphan Data)가 되어 오류를 유발할 수 있습니다.
- 추가 조치 필요: 완전 삭제를 적용하려면
member_delete함수 내에서 포인트, 쪽지, 스크랩 등 연관 테이블의 데이터를 함께 삭제하는 SQL 쿼리를 추가하는 것이 권장됩니다.
실제 운영 중인 사이트에서는 무분별한 Hard Delete보다는 기본 제공되는 소프트 삭제(탈퇴 및 관리자 삭제) 방식을 유지하는 것이 데이터 안정성 측면에서 유리합니다.
상황별 판단 및 행동 가이드
| 내 상황 | 선택 기준 | 다음 행동 |
|---|---|---|
| 일반 회원 탈퇴 처리 | 소프트 삭제(유예 기간) | 관리자 페이지에서 '회원탈퇴 후 삭제일' 설정 확인 및 유지 |
| 테스트·스팸 계정 삭제 | 데이터 완전 삭제(Hard Delete) | lib/common.lib.php 내 member_delete 함수에서 update 쿼리를 delete 쿼리로 수정 |
| 실 운영 중인 사이트 회원 삭제 | 데이터 무결성 유지 | 회원 테이블 삭제와 함께 포인트, 쪽지, 스크랩 등 연관 테이블 데이터 정리 SQL 추가 |
| 자동 삭제가 안 되는 경우 | 관리자 로그인 여부 확인 | 관리자가 사이트에 로그인하여 bbs/db_table.optimize.php 실행 유도 |
실전 FAQ
Q. 관리자가 로그인하지 않아도 탈퇴 회원이 자동으로 삭제되게 할 수 있나요?
기본 그누보드 구조상 bbs/db_table.optimize.php는 관리자 로그인 시점에 실행됩니다. 관리자 로그인 없이 자동으로 삭제하려면 서버 측 크론탭(Crontab)에 해당 파일을 실행하는 스크립트를 별도로 등록해야 합니다.
Q. 탈퇴 후 삭제 기간 내에 탈퇴를 취소할 수 있나요?
네, 삭제 기간(기본 30일)이 지나기 전이라면 관리자 페이지의 회원 수정 화면에서 mb_leave_date 값을 빈 값으로 수정하여 즉시 정상 회원으로 복구할 수 있습니다.
함께 보면 좋은 글
- 그누보드 회원 데이터 완전 삭제(Hard Delete)를 위한 로직 수정 방법
- 그누보드 관리자 페이지 회원 완전 삭제 기능 추가 및 목록 출력 개수 조절 가이드
- 그누보드4 게시글 삭제 및 수정 시 생성된 썸네일 파일 자동 삭제 처리 방법
참고자료
기타 참고자료
- 이전글PHP 및 그누보드에서 MySQL 마지막 PK(autoincrement) 값 획득 방법 26.10.07
- 다음글PHP 서버 변수 PHPSELF, SCRIPTNAME, REQUESTURI 차이점과 활용 26.10.05
댓글목록
등록된 댓글이 없습니다.