정리노트/팀프로젝트

[스프링]관리자 입장에서의 회원 관리(RUD)

망고고래 2024. 2. 20. 17:04

회원이 자신의 정보를 관리하는 코드는 로그인한 상태를 가정하고 sessionId를 사용해 처리했다. 하지만 관리자는 sessionId를 사용할 수 없기 때문에 @RequestParam을 사용해 id를 주고받아 sql문으로 전달했다.

 

1. 회원 목록 출력: List 사용

[스프링] 회원 목록 불러오기 (tistory.com)

 

[스프링] 회원 목록 불러오기

DTO를 여러 개 불러올 때는 List에 DTO를 담아서 출력한다. 1. 뷰 페이지 작성 회원관리 아이디 이름 닉네임 이메일 상세정보 ${member.mem_id} ${member.mem_name} ${member.mem_nickname} ${member.mem_email} 상세정보 c:f

mangowhale.tistory.com

 

2. 회원 개별 정보 출력

위 포스팅에서 상세정보를 누르면 파라미터로 id를 가지고 회원 개별 정보로 이동하도록 했다.

가져간 id로 기존의 멤버 RUD 함수를 호출한다.

 

1)뷰 페이지 작성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://kit.fontawesome.com/f70c884d31.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Bagel+Fat+One&family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="${pageContext.request.contextPath}/resources/css/originalCss.css" type="text/css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet">
<title>회원 정보</title>
</head>
<body>

	<jsp:include page="/WEB-INF/views/module/nav.jsp" flush="false"/>	

    <section>
        <div class="jumbotron background-lightgreen pt-5 pb-5">
            <div class="container">
                <h2 class="display-3 font text-center">회원 정보</h2>
            </div>
        </div>
    </section>

    <section>
        <div class="container" style="padding: 100px 0;">
            <div class="d-flex">
                <div class="form col-sm-5 offset-md-1 border-right me-5">
                	<c:url value="/staff/update_member" var="update_url"/>
                    <form:form action="${update_url}" modelAttribute="member" class="form-horizontal" onsubmit="return confirm(회원 정보를 수정하시겠습니까?)">
                        <h2 class="form-title mb-4">회원 정보</h2>
                        <div class="form-group row">
                            <label for="" class="col-sm-3 control-label">아이디</label>
                            <div class="col-sm-3">
                                <form:input class="input" readonly="true" path="mem_id" value="${member.mem_id}"/>
                            </div> 
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">이름</label>
                            <div class="col-sm-3">
                                <form:input class="input" required="required" path="mem_name" maxlength="17" value="${member.mem_name}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">닉네임</label>
                            <div class="col-sm-3">
                                <form:input class="input" path="mem_nickname" minlength="2" maxlength="10" placeholder="2~10글자" value="${member.mem_nickname}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">전화번호</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="11" path="mem_phone" placeholder="'-' 없이 숫자만 입력해주세요" value="${member.mem_phone}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">이메일</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="40" path="mem_email" value="${member.mem_email}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">주소</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="60" path="mem_addr" value="${member.mem_addr}"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">상세주소</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="60" path="mem_addr2" value="${member.mem_addr2}"/>
                            </div>
                        </div>
                        <div class="form-group row mt-4">
                            <div class="col-sm-offset-2 col-sm-10">
                                <input type="submit" value="수정" class="offset-md-8 submit-green">
                            	<a href="<c:url value="/staff/members"/>" class="submit-red">취소</a><br>
                            </div>
                        </div>
                        <a href="/pet_hug/staff/delete_member?id=${member.mem_id}" class="btn btn-danger" onclick="return confirm('회원을 삭제하시겠습니까?');">회원 삭제</a>
                    </form:form>
                </div>
            </div>
        </div>
    </section>

    <jsp:include page="/WEB-INF/views/module/footer.jsp" flush="false"/>

</body>
</html>

 

2)Controller 작성

	@GetMapping("/members/detail")
	public String staff_member_info(@RequestParam("id") String mem_id, Model model) {
		System.out.println("StaffController.staff_member_info() 도착");
		System.out.println("mem_id: " + mem_id);
		Member member_info = memberService.get_member_info(mem_id);
		model.addAttribute("member", member_info);
		return "/member/staff_member_detail";
	}

 

 

3)기존의 Respotiroy 함수(Service 생략)

	public Member get_member_info(String sessionId) {
		String sql2 = "select * from user_mem where mem_id = ?";
		Member member = template.queryForObject(sql2, new Object[] {sessionId}, new BeanPropertyRowMapper<>(Member.class));
		System.out.println("member 반환");
		return member;
	}

 

 

 

 

2. 회원 정보 수정

1)뷰 페이지

<form:form> 태그 안에서는 <c:url> 태그가 잘 인식되지 않았다. 그래서 먼저 url을 변수로 선언하고 <form:form> 태그 안에서는 EL태그로 사용했다.

<c:url value="/staff/update_member" var="update_url"/>
<form:form action="${update_url}" modelAttribute="member" class="form-horizontal" onsubmit="return confirm(회원 정보를 수정하시겠습니까?)">

 

 

2)Controller 작성

update는 ModelAttribute를 사용하고 있기 때문에 매개변수를 DTO 객체로 설정했다.

	@PostMapping("/update_member")
	public String staff_update_member(@ModelAttribute("member")Member member) {
		System.out.println("staff_update_member() 도착");
		
		//업데이트
		System.out.println("memberService.update_member_info() 호출");
		memberService.update_member_info(member);
		
		//불러오기
		return "/member/staff_member_detail";
	}

 

 

3)기존의 Respotiroy 함수(Service 생략)

	public void update_member_info(Member member) {
		System.out.println("Repository 도착");
		System.out.println("Member 값: " + member.toString());
		String sql = "UPDATE user_mem SET mem_name = ?, mem_nickname = ?, mem_phone = ?, mem_email = ?, mem_addr = ?, mem_addr2 = ? where mem_id = ?;";
		template.update(sql, member.getMem_name(), member.getMem_nickname(), member.getMem_phone(), member.getMem_email(), member.getMem_addr(), member.getMem_addr2(), member.getMem_id());
	}

 

 

 

 

3. 회원 삭제

1)뷰 페이지

<a href="/pet_hug/staff/delete_member?id=${member.mem_id}" class="btn btn-danger"
onclick="return confirm('회원을 삭제하시겠습니까?');">회원 삭제</a>

클릭시 confirm 창이 뜨고 확인을 선택하면 삭제 컨트롤러로 연결된다. 파라미터로 id를 가져간다.

 

 

2)Controller 작성

	@GetMapping("/delete_member")
	public String staff_delete_member(@RequestParam("id")String mem_id) {
		System.out.println("StaffController.staff_delete_member() 도착");
		System.out.println("mem_id: " + mem_id);
		int verify = memberService.delete_member(mem_id);
		if(verify == 1) {
			System.out.println("회원 삭제 성공");
			return "redirect:/staff/members";
		}else {
			System.out.println("회원 삭제 실패");
			return "redirect:/staff/members";
		}
	}

 

3)기존의 Respotiroy 함수(Service 생략)

	public int delete_member(String sessionId) {
		System.out.println("memberRepository.delete_member() 도착");
		System.out.println("id: " + sessionId);
		String sql = "DELETE FROM user_mem WHERE mem_id = ?";
		int verify = template.update(sql, sessionId);
		return verify;
	}