마이 페이지 - 회원 탈퇴 기능 구현 (23.08.16)

·2023년 8월 16일
0

Spring

목록 보기
10/36
post-thumbnail

🌷 회원 탈퇴


👀 코드로 살펴보기

🌱 MyPageController.java

...
	// 회원 탈퇴
	@PostMapping("/secession")
	public String secession(String memberPw
						, @SessionAttribute("loginMember") Member loginMember
						, RedirectAttributes ra
						, SessionStatus status
						, HttpServletResponse resp) {
		
		// String memberPw : 입력한 비밀번호
		// SessionStatus status : 세션 관리 객체
		// HttpServletResponse resp : 서버 -> 클라이언트 응답하는 방법 제공 객체
		// RedirectAttributes ra : 리다이렉트 시 request로 값 전달하는 객체
		
		// 1. 로그인한 회원의 회원 번호 얻어오기
		// @SessionAttribute("loginMember") Member loginMember
		int memberNo = loginMember.getMemberNo();
		
		// 2. 회원 탈퇴 서비스 호출
		// - 비밀번호가 일치하면 MEMBER_DEL_FL -> 'Y'로 바꾸고 1 반환
		// - 비밀번호가 일치하지 않으면 		 -> 0 반환
		int result = service.secession(memberPw, memberNo);
		
		String path = "redirect:";
		String message = null;
		
		// 3. 탈퇴 성공 시
		if(result > 0) {
			// - message : 탈퇴되었습니다.
			message = "탈퇴되었습니다.";

			// - 메인 페이지로 리다이렉트
			path += "/";

			// - 로그아웃
			status.setComplete();

			// + 쿠키 삭제
			Cookie cookie = new Cookie("saveId", "");
			// 같은 쿠키가 이미 존재하면 덮어쓰기 된다.
			
			cookie.setMaxAge(0); // 0초 생존 -> 삭제
			cookie.setPath("/"); // 요청 시 쿠키가 첨부되는 경로
			resp.addCookie(cookie); // 요청 객체를 통해서 클라이언트에게 전달
									// -> 클라이언트 컴퓨터에 파일로 생성
			
		// 4. 탈퇴 실패 시
		} else {
			// - message : 현재 비밀번호가 일치하지 않습니다.
			message = "현재 비밀번호가 일치하지 않습니다.";
			
			// - 회원 탈퇴 페이지로 리다이렉트
			path += "secession";
		}
		
		ra.addFlashAttribute("message", message);
		
		return path;
	}
...

🌱 MyPageService.java

...
	/** 회원 탈퇴 서비스
	 * @param memberPw
	 * @param memberNo
	 * @return result
	 */
	int secession(String memberPw, int memberNo);
...

🌱 MyPageServiceImpl.java

...
	// 회원 탈퇴 서비스
	@Transactional(rollbackFor = {Exception.class})
	@Override
	public int secession(String memberPw, int memberNo) {
		
		// 1. 회원 번호가 일치하는 회원의 비밀번호 조회
		String encPw = dao.selectEncPw(memberNo);
		
		// 2. 비밀번호가 일치하면
		if(bcrypt.matches(memberPw, encPw)) {
			// MEMBER_DEL_FL -> 'Y'로 바꾸고 1 반환
			return dao.secession(memberNo);
		}
		
		return 0;
	}
...

🌱 MyPageDAO.java

...
	/** 회원 탈퇴
	 * @param memberNo
	 * @return result
	 */
	public int secession(int memberNo) {
		// sqlSessionTemplate : 마이바티스 + DBCP + close 자동 + 트랜잭션 처리
		return sqlSession.update("myPageMapper.secession", memberNo);
	}
...

🌱 MyPage-mapper.xml

...
	<!-- 회원 탈퇴 -->
	<update id="secession" parameterType="_int">
		UPDATE MEMBER SET
		MEMBER_DEL_FL = 'Y'
		WHERE MEMBER_NO = #{memberNo}
	</update>
...

💻 구현 화면

비밀번호 input 창에 현재 비밀번호를 작성하고,
'위 약관에 동의합니다' 체크박스를 체크한 뒤 '탈퇴' 버튼을 클릭하면 회원 탈퇴가 정상적으로 진행된다. 😉

profile
풀스택 개발자 기록집 📁

0개의 댓글