내가 구현한 기능 소개(마이페이지 ‐ 정보수정 및 회원 탈퇴) - KimByoungKoo/NewLightProject GitHub Wiki

📌마이 페이지 - 정보 수정 및 회원 탈퇴

✔️ 개인정보 수정

  • User가 회원 가입 시 등록한 개인 정보를 변경할 수 있는 기능이다.

💻Code

MemberFrontController.java
public class MemberFrontController extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      doProcess(req, resp);
   }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      doProcess(req, resp);
   }

   private void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

      String target = req.getRequestURI().substring(req.getContextPath().length());
      

      switch (target) {
      // 회원 정보 수정 주소&컨트롤러 넣어주기
      case "/mypage/mypageEdit.me":
         System.out.println("mypageEdit 들어왔다!!!");
         new EditController().execute(req, resp);
         break;
      
      // 회원정보 수정 완료 컨트롤러
      case "/mypage/mypageEditOk.me":
         new EditOkController().execute(req, resp);
         break;
      }
    }
}
EditController.java
public class EditController implements Execute{
	
	@Override
	public void execute(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
		MemberDAO memberDAO = new MemberDAO();
		MemberDTO memberDTO = new MemberDTO();
		HttpSession session = req.getSession();
		
		Integer memberNumber = (Integer)session.getAttribute("memberNumber");
				
		memberDTO = memberDAO.selectOne(memberNumber);
		
		req.setAttribute("memberDTO", memberDTO);
		
		req.getRequestDispatcher("/app/mypage/mypage_edit.jsp").forward(req, resp);
		
	}
}
EditOkController.java
public class EditOkController implements Execute {

   @Override
   public void execute(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
      MemberDTO memberDTO = new MemberDTO();
      MemberDAO memberDAO = new MemberDAO();
      MemberFileDTO memberfileDTO = new MemberFileDTO();
      
      req.setCharacterEncoding("utf-8");
      
      String uploadPath = req.getSession().getServletContext().getRealPath("/") + "userProfile/";
      int fileSize = 1024 * 1024 * 20;
      
//      폼 데이터 오류 부분
      MultipartRequest multipartReq = new MultipartRequest(req, uploadPath, fileSize, "utf-8", new DefaultFileRenamePolicy());
      
      memberDTO.setMemberNumber((Integer)req.getSession().getAttribute("memberNumber"));
      
      memberDTO.setMemberPassword(multipartReq.getParameter("memberPassword"));
      memberDTO.setMemberNickname(multipartReq.getParameter("memberNickname"));
      memberDTO.setMemberWebsite(multipartReq.getParameter("memberWebsite"));
      memberDTO.setMemberPfp(multipartReq.getParameter("memberPfp"));
      memberDTO.setMemberComment(multipartReq.getParameter("memberComment"));
      memberDTO.setMemberEmail(multipartReq.getParameter("memberEmail"));
      memberDTO.setMemberAddress1(multipartReq.getParameter("memberAddress1"));
      memberDTO.setMemberAddress2(multipartReq.getParameter("memberAddress2"));
      memberDTO.setMemberPhoneNumber(multipartReq.getParameter("memberPhoneNumber"));
      
      Enumeration<String> memberFilepfp = multipartReq.getFileNames();
      
      while(memberFilepfp.hasMoreElements()) {
         String name = memberFilepfp.nextElement();
         
         String memberPfpFile = multipartReq.getOriginalFileName(name);
         
         if(memberPfpFile == null) {
            continue;
         }
         
         memberDTO.setMemberPfp(memberPfpFile);   
      }
      
      memberDAO.edit(memberDTO);
      
      resp.sendRedirect("/mypage/creationsOk.mp");
   }
   
}
MemberDAO
//   회원정보 수정하기
public class MemberDAO {

   public SqlSession sqlSession;
   
   public MemberDAO() {
      sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
   }

   public void edit(MemberDTO memberDTO) {
      sqlSession.update("member.edit", memberDTO);
   }
}
MemberMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="member">

  <!-- 회원정보 수정하기 -->
   <update id="edit" parameterType="MemberDTO">
      update `member`
      set
      member_password = #{memberPassword}, member_nickname =
      #{memberNickname}, member_website = #{memberWebsite}, member_pfp =
      #{memberPfp},
      member_comment = #{memberComment}, member_email =
      #{memberEmail}, member_address1 =
      #{memberAddress1}, member_address2 =
      #{memberAddress2}
      where member_number = #{memberNumber}
   </update>

</mapper>

📷View

마이페이지 - 회원 정보 변경
newlight_마이페이지-닉네임, 주소, 상세주소 변경01 newlight_마이페이지-비밀번호 변경01 newlight_마이페이지-프로필 사진변경01 newlight_마이페이지-개인정보 변경01

✔️ 회원 탈퇴

  • User가 회원 가입 후 이용하다 마음에 들지 않을 경우 회원 탈퇴할 수 있는 기능이 있다.
  • 회원 탈퇴가 정상적으로 이루어지면 메인 페이지로 이동한다.

💻Code_Contreoller

MemberFrontController.java
public class MemberFrontController extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      doProcess(req, resp);
   }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      doProcess(req, resp);
   }

   private void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

      String target = req.getRequestURI().substring(req.getContextPath().length());

      switch (target) {
      // 회원 탈퇴 주소&컨트롤러 넣어주기
      case "/member/memberDeleteOk.me":
         System.out.println("dddd");
         new DeleteOkController().execute(req, resp);
         break;
    }
  }

}
DeleteOkController.java
public class DeleteOkController implements Execute {
	
	@Override
	public void execute(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
		QnACommentDAO qcDAO = new QnACommentDAO();
		QnAFileDAO qnaFileDAO = new QnAFileDAO();
		MemberDAO memberDAO = new MemberDAO();
		LikesDAO likeDAO = new LikesDAO();
		CommunityCommentDAO ccDAO = new CommunityCommentDAO();
		CommunityFileDAO cfDAO = new CommunityFileDAO();
		CommunityDAO communityDAO = new CommunityDAO();
		FollowsDAO followsDAO = new FollowsDAO();
		CreationCommentDAO creationCommentDAO = new CreationCommentDAO();
		CreationsFileDAO creationFileDAO = new CreationsFileDAO();
		CreationsDAO creationDAO = new CreationsDAO();
		QnADAO qnaDAO = new QnADAO();
		MemberFileDAO memberFileDAO = new MemberFileDAO();

		HttpSession session = req.getSession();
		System.out.println(session.getAttribute("memberNumber"));
		int memberNumber = (Integer) session.getAttribute("memberNumber");

		String uploadPath = req.getSession().getServletContext().getRealPath("/") + "upload/";
		String profilePath = req.getSession().getServletContext().getRealPath("/") + "userProfile/";

		List<QnAFileDTO> qnaFiles = qnaFileDAO.selectDelete(memberNumber);
		List<CommunityFileDTO> communityFiles = cfDAO.selectDelete(memberNumber);
		List<CreationsFileDTO> creationFiles = creationFileDAO.selectDelete(memberNumber);

		for (QnAFileDTO file : qnaFiles) {
			File temp = new File(uploadPath, file.getFileSystemName());

			if (temp.exists()) {
				temp.delete();
			}
		}

		for (CommunityFileDTO file : communityFiles) {
			File temp = new File(uploadPath, file.getFileSystemName());

			if (temp.exists()) {
				temp.delete();
			}
		}

		for (CreationsFileDTO file : creationFiles) {
			File temp = new File(uploadPath, file.getFileSystemName());

			if (temp.exists()) {
				temp.delete();
			}
		}

//		실제 프로필 이미지 파일 삭제 처리
		String pfpName = memberDAO.selectProfile(memberNumber);

		if (pfpName != null) {
			File file = new File(profilePath, pfpName);

			if (file.exists()) {
				file.delete();
			}
		}

		qcDAO.deleteMember(memberNumber);
		qnaFileDAO.deleteMember(memberNumber);
		qnaDAO.deleteMember(memberNumber);
		likeDAO.deleteMemeber(memberNumber);
		ccDAO.deleteMember(memberNumber);
		ccDAO.commenteAllDelete(memberNumber);
		cfDAO.deleteMember(memberNumber);
		communityDAO.deleteMember(memberNumber);
		followsDAO.deleteMember(memberNumber);
		creationCommentDAO.deleteMember(memberNumber);
		creationCommentDAO.commenteAllDelete(memberNumber);
		creationFileDAO.deleteMember(memberNumber);
		creationDAO.deleteMember(memberNumber);
		memberDAO.deleteMember(memberNumber);
		
		session.invalidate();
		
		resp.sendRedirect("/main/mainpageListOk.mi");

	}
}

💻Code_DAO

QnACommentDAO.java
public class QnACommentDAO {
	
	public SqlSession sqlSession;

	public QnACommentDAO() {
		sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
	}
	
//	회원탈퇴 시 QnA댓글 삭제
	public void deleteMember(int memberNumber) {
		sqlSession.delete("comment.deleteMember", memberNumber);
	}
}
QnAFileDAO.java
public class QnAFileDAO {
	
	public SqlSession sqlSession;

	public QnAFileDAO() {
		sqlSession= MyBatisConfig.getSqlSessionFactory().openSession(true);
	}

//	회원탈퇴 시 QnAFile 삭제
	public void deleteMember(int memberNumber) {
		sqlSession.delete("qnaFile.deleteMember", memberNumber);
	}

}
QnADAO
public class QnADAO {

	public SqlSession sqlSession;

	public QnADAO() {
		sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
	}

//	회원탈퇴 시 QnA삭제
	public void deleteMember(int memberNumber) {
		sqlSession.delete("qna.deleteMember", memberNumber);
	}
}
LikesDAO.java
public class LikesDAO {
	
	public SqlSession sqlSession;

	public LikesDAO() {
		sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
	}

//	회원탈퇴 시 좋아요 삭제
	public void deleteMemeber(int memberNumber) {
		sqlSession.delete("likes.deleteMember", memberNumber);
	}
	
}
CommunityCommentDAO.java
public class CommunityCommentDAO {
	
	public SqlSession sqlSession;
	
	public CommunityCommentDAO() {
		sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
	}

//	회원탈퇴 시 커뮤니티 댓글 삭제
	public void deleteMember(int memberNumber) {
		sqlSession.delete("communityComment.deleteMember", memberNumber);
	}

	public void commenteAllDelete(int memberNumber) {
		sqlSession.delete("communityComment.commentAllDelete", memberNumber);
	}
}
CommunityFileDAO.java
public class CommunityFileDAO {
	
	public SqlSession sqlSession;

	public CommunityFileDAO() {
		sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
	}

//	회원탈퇴 시 커뮤니티파일 삭제
	public void deleteMember(int memberNumber) {
		sqlSession.delete("communityFile.deleteMember", memberNumber);
	}
}
CommunityDAO.java
public class CommunityDAO {
	
	public SqlSession sqlSession;

	public CommunityDAO() {
		sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
	}

//	회원탈퇴 시 커뮤니티 삭제
	public void deleteMember(int memberNumber) {
		sqlSession.delete("community.deleteMember", memberNumber);
	}
}
FollowsDAO.java
public class FollowsDAO {
	
	public SqlSession sqlSession;
	
	public FollowsDAO() {
		sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
	}

//	회원탈퇴 시 팔로우 삭제
	public void deleteMember(int memberNumber) {
		sqlSession.delete("follows.deleteMember", memberNumber);
	}
}
CreationCommentDAO.java
public class CreationCommentDAO {
	
	public SqlSession sqlSession;
	
	public CreationCommentDAO() {
		sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
	}

//	회원탈퇴 시 창작물 댓글 삭제
	public void deleteMember(int memberNumber) {
		sqlSession.delete("creationComment.deleteMember", memberNumber);
	}
	
	public void commenteAllDelete(int memberNumber) {
		sqlSession.delete("creationComment.commentAllDelete", memberNumber);
	}
CreationFileDAO.java
public class CreationsFileDAO {

	public SqlSession sqlSession;
	
	public CreationsFileDAO() {
		sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
	}
//	회원 탈퇴 시 회원이 올린 창작물 파일 삭제
	public void deleteMember(int memberNumber) {
		sqlSession.delete("creationsfile.deleteMember", memberNumber);
	}
}
CreationsDAO.java
public class CreationsDAO {
	
	public SqlSession sqlSession;
	
	public CreationsDAO() {
		sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
	}

//	회원탈퇴 시 창작물 삭제
	public void deleteMember(int memberNumber) {
		sqlSession.delete("creations.delete", memberNumber);
	}
}
MemberDAO
public class MemberDAO {
	
   public SqlSession sqlSession;
   
   public MemberDAO() {
      sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
   }
//   회원탈퇴하기
   public void deleteMember(int memberNumber) {
      sqlSession.delete("member.deleteMember", memberNumber);
   }
}

💻Code_XML

QnACommentMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="comment">

	<!-- 회원탈퇴 시 QnA댓글 삭제 -->
	<delete id="deleteMember" parameterType="_int">
		delete from qna_comment
		where  member_number = #{memberNumber};
	</delete>

</mapper>
QnAFileMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="qnaFile">

	<!-- 회원탈퇴 시 QnA첨부파일 삭제 -->
	<delete id="deleteMember" parameterType="_int" >
		delete from qna_file 
		where qna_number in (select qna_number from qna 
                where member_number = #{memberNumber})
	</delete>

</mapper>
QnAMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="qna">

	<!-- 회원탈퇴 시 QnA등록글 삭제 -->
	<delete id="deleteMember" parameterType="_int">
		delete from qna
		where member_number = #{memberNumber}
	</delete>

</mapper>
LikesMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="likes">

	<!-- 회원탈퇴 시 좋아요 삭제 -->
	<delete id="deleteMember" parameterType="_int">
		delete from likes
		where member_number = #{memberNumber}
	</delete>

</mapper>
CommunityCommentMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="communityComment">

	<!-- 회원탈퇴 시 커뮤니티댓글 삭제 -->
	<delete id="deleteMember" parameterType="_int">
		delete from community_comment
		where member_number = #{memberNumber}
	</delete>
	
	<delete id="commentAllDelete" parameterType="_int">
		delete cc FROM community_comment cc 
		inner JOIN community c ON cc.community_number = c.community_number 
		where c.member_number = #{memberNumber}
	</delete>

</mapper>
CommunityFileMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="communityFile">

	<!-- 회원탈퇴 시 커뮤니티파일 삭제 -->
	<delete id="deleteMember" parameterType="_int">
			delete from community_file 
			where community_number  in (select community_number from community 
                        where member_number = #{memberNumber})
	</delete>

</mapper>
CommunityMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="community">

	<!-- 회원탈퇴 시 커뮤니티 글 삭제 -->
	<delete id="deleteMember" parameterType="_int">
		delete from community
		where member_number = #{memberNumber}
	</delete>

</mapper>
FollowsMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="follows">

        <!-- 회원탈퇴 시 팔로우 삭제 -->
	<delete id="deleteMember" parameterType="_int">
		delete from follows
		where follower_number = #{memberNumber} or followee_number = #{memberNumber}
	</delete>

</mapper>
CreationCommentMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="creationComment">

   <!-- 회원탈퇴 시 창작물 댓글 삭제 -->
   <delete id="deleteMember" parameterType="_int">
      delete from creations_comment
      where member_number = #{memberNumber}
   </delete>
   
   <delete id="commentAllDelete" parameterType="_int">
   	delete cc FROM creations_comment cc 
	inner JOIN creations c ON cc.creation_number = c.creation_number 
	where c.member_number = #{memberNumber}
   </delete>

</mapper>
CreationsFileMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="creationsfile">

	<!-- 회원탈퇴 시 창작물 파일 삭제 -->
	<delete id="deleteMember" parameterType="_int">
		delete from creations_file f
		where f.creation_number in (select c.creation_number from creations c
                where member_number = #{memberNumber})
	</delete>

</mapper>
CreationsMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="creations">

     <!-- 회원탈퇴 시 창작물 삭제 -->
     <delete id="deleteMember" parameterType="_int">
        delete from creations
        where member_number = #{memberNumber}
     </delete>

</mapper>
MemberMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="member">

   <!-- 회원탈퇴하기 -->
   <delete id="deleteMember" parameterType="_int">
      delete from `member`
      where
      member_number= #{memberNumber};
   </delete>

</mapper>

📷View

마이페이지 - 회원 탈퇴
newlight_회원 탈퇴01 newlight_회원 탈퇴02 newlight_회원 탈퇴03 newlight_회원 탈퇴04
⚠️ **GitHub.com Fallback** ⚠️