<< 학습 목표 >>

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 프로젝트에서 회원가입 기능을 구현하기 위한 과정이 어떻게 됬는지를 이해하는게 중요함

 

개인적으로 게으른 개발자가 성공할 수 있다고 생각함

그렇다고 생활이 게으르면 안되고 개발을 하면서 "아~ 이거 번거로운데... 더 나은 방법 또는 덜 번거로운 방법 없나?" 를 꼭 찾아야하고 이를 개선할 수 있는 공부를 끊임 없이 해야함

728x90
LIST