<< 학습 목표 >>
1. 회원 탈퇴 기능을 개선할 수 있다.
지난 글의 마지막에 다음과 같은 말을 했음
| 실제 서비스에서는 회원 탈퇴가 회원 정보를 삭제하지 않음 실제 서비스에서는 회원 정보 테이블에 회원 정보에 회원 탈퇴 플래그(Flag) 칼럼을 둠 그리고 회원 탈퇴 시 회원 탈퇴 플래그를 true로 바꿈 실제 서비스에서 회원 정보를 삭제하지 않는 이유는 여러 이유가 있지만 회원 정보는 그 서비스의 굉장히 중요한 자산 중 하나임 보통 실제 서비스는 특정 회원이 우리 서비스에서 어떤 활동을 하는지 기록해둠 그리고 그것들을 활용해서 서비스를 개선함 회원 탈퇴 시 회원 정보를 삭제하면 그것들 모두 지워야하므로 서비스를 개선 수 없음 |
우리 서비스도 실제 서비스와 가깝게 회원 정보 테이블에 회원 탈퇴 플래그를 두자
member 테이블 내 isDel 칼럼 추가(1)

회원 탈퇴 처리를 하는 MemberDao로 가서 deleteMemberByIdx 메서드의 쿼리를 DELETE 가 아닌 UPDATE 로 바꿔야함
// ...
public void deleteMemberByIdx(int idx) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBUtil.getConnection();
String sql = "UPDATE member SET isDel = true WHERE idx = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, idx);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.closes(conn, pstmt);
}
}
// ...
<< 코드 설명 >>
이제 회원 정보 삭제가 아닌 회원 정보 수정이고 회원 탈퇴 플래그인 isDel 칼럼의 값을 true 로 바꿈

이렇게 하면 회원 정보를 삭제하지 않고 회원 탈퇴 처리를 할 수 있음
컨트롤러나 서비스는 바꿀 필요 없음
특히 컨트롤러에서는 회원 탈퇴 처리가 완료 됬을 때 세션을 삭제하므로 회원 탈퇴를 한 사용자는 로그인이 풀리므로 회원 탈퇴가 되었다고 느끼게됨
서버를 실행시키고 개선한 회원 탈퇴를 확인하자
회원 탈퇴는 잘 되지만 탈퇴한 ID, PW로 로그인을 해보자
여전히 로그인이 됨
왜? 실제로 삭제한게 아니라 탈퇴 플래그만 바꾼 것이므로...
그래서 로그인을 할 때 탈퇴한 회원(탈퇴 플래그가 true인 회원)의 ID, PW 로 로그인을 하려고 할 때는 "탈퇴한 회원입니다" 를 출력하도록 하자
수정 순서는 다음과 같음
1. 회원 정보를 담는 DTO
2. 회원 정보를 조회하는 DAO 메서드
3. 로그인 서블릿
4. 로그인 페이지
<< 1. 회원 정보를 담는 DTO >>
기존에는 탈퇴 플래그가 없었으므로 당연히 회원 정보를 담는 DTO에 탈퇴 플래그 값을 저장할 수 있는 멤버 변수가 없음
MemberDto에 isDel 멤버 변수 추가 한 후 getter, setter까지 추가하자

getter, setter 를 추가할 때 조심해야할 점은 is로 시작하는 멤버 변수의 getter, setter명이 제대로 설정되지 않음
우선 getter, setter를 추가한 후 이름을 getIsDel, setIsDel 로 바꿔주자
<< 2. 회원 정보를 조회하는 DAO 메서드 >>
기존에는 탈퇴 플래그가 없었으므로 회원 정보를 조회할 때 탈퇴 플래그를 담지 않음
회원 정보 조회 후 탈퇴 플래그를 회원 정보에 담도록 하자
MemberDao 클래스 -> selectOneById 메서드, selectOneByTel 메서드 내 다음과 같이 코드 추가
라인 번호는 다르지만 위치는 동일하므로 어렵지 않게 찾아서 추가할 수 있을 것
탈퇴 플래그를 Boolean 타입 데이터로 가져옴(1)
탈퇴 플래그를 회원 정보에 저장(2)

<< 3. 로그인 서블릿 >>
로그인 서블릿(member패키지 -> MemberLogin 서블릿) 에 로그인에 성공했다면 부분에 다음과 같이 코드를 추가하자
로그인 시 아이디, 비밀번호를 올바르게 입력했지만 탈퇴 한 계정이라면 403 상태 코드를 응답함

<< 4. 로그인 페이지 >>
로그인 페이지에서 서버가 보내는 403 상태 코드(탈퇴한 회원)을 인식해 "탈퇴한 회원입니다" 를 출력해야함
로그인 페이지(WEB-INF 폴더 -> member 폴더 -> login.html)에 로그인 요청 후 응답을 받는 부분에 아래 코드 추가

여기까지 회원 탈퇴 기능을 개선했음
길고 길었던 CRUD 프로젝트가 거의 완성됐음
여러분의 프로젝트를 만들 때 똑같은 로그인 기능이지만 여러분의 상황에 따라 달라질 수 있음
회원가입, 회원 정보 수정, 회원 탈퇴 역시 마찬가지...
지금까지 진행한 CRUD 프로젝트는 코드를 외울 순 없음
CRUD 프로젝트에서 회원가입 기능을 구현하기 위한 과정이 어떻게 됬는지를 이해하는게 중요함
개인적으로 게으른 개발자가 성공할 수 있다고 생각함
그렇다고 생활이 게으르면 안되고 개발을 하면서 "아~ 이거 번거로운데... 더 나은 방법 또는 덜 번거로운 방법 없나?" 를 꼭 찾아야하고 이를 개선할 수 있는 공부를 끊임 없이 해야함
'Servlet + JSP > Serlvet-Chapter05' 카테고리의 다른 글
| Chapter05. CRUD 프로젝트 / 회원 탈퇴 (0) | 2023.03.28 |
|---|---|
| Chapter05. CRUD 프로젝트 / 회원 정보 수정 (0) | 2023.03.28 |
| Chapter05. CRUD 프로젝트 / 로그인 정보 활용하기 ( 세션 활용 3 ) (0) | 2023.03.27 |
| Chapter05. CRUD 프로젝트 / 로그인 정보 저장하기 ( 세션 활용 2 ) (0) | 2023.03.27 |
| Chapter05. CRUD 프로젝트 / 로그인 상태 저장하기 ( 세션 활용 1 ) (0) | 2023.03.27 |