JAVA개념&실습

WEB : [0524-0525] 회원 관리 및 회원 성적 관리 페이지 구성 실습01

u_SZero 2023. 5. 25. 18:07

! 현재 배워가고 있는 주인장이 쓴 글이니 정보의 정확성에 유의하시기 바랍니다 !


 

WebApp12


MemberDTO.java  : 필요한 속성(private)정의 및 getter / setter 구성

/*=================================================
   MemberDTO.java
   - 객체 전용 (데이터 보관 및 전송) → JAVA Bean
===================================================*/

package com.test;

public class MemberDTO
{
	// 주요 속성 구성(프로퍼티 구성)
	private String sid, name, tel;		//-- 번호, 이름, 전화번호

	// getter / setter 구성
	public String getSid()
	{
		return sid;
	}

	public void setSid(String sid)
	{
		this.sid = sid;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String getTel()
	{
		return tel;
	}

	public void setTel(String tel)
	{
		this.tel = tel;
	}
	
}

 

 

MemberDAO.java  : 기능 구현에 필요한 데이터베이스 접근 메소드 구현 

+ 데이터베이스 연결 메소드를 따로 정의

(이전 실습에서는 생성자로 정의하여 객체를 생성하면 자동으로 연결되게 했었음)

/*========================================
   MemberDAO.java
   - 데이터베이스 액션 처리 전용 클래스
   	 (TBL_MEMBER 테이블 전용 DAO)
==========================================*/

package com.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.util.DBConn;

public class MemberDAO
{
	// 주요 속성 구성
	private Connection conn;
	
	// 데이터베이스 연결 담당 메소드
	public Connection connection() throws ClassNotFoundException, SQLException
	{
		conn = DBConn.getConnection();
		return conn;
	}
	
	// 데이터 입력 담당 메소드
	public int add(MemberDTO dto) throws SQLException
	{
		int result=0;
		
		String sql = "INSERT INTO TBL_MEMBER(SID, NAME, TEL) VALUES(MEMBERSEQ.NEXTVAL, ?, ?)";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, dto.getName());
		pstmt.setString(2, dto.getTel());
		
		result = pstmt.executeUpdate();
		
		pstmt.close();
		
		return result;
	}
	
	// 회원 리스트 전체 출력 담당 메소드
	public ArrayList<MemberDTO> list() throws SQLException
	{
		ArrayList<MemberDTO> result = new ArrayList<MemberDTO>();
		
		String sql = "SELECT SID, NAME, TEL FROM TBL_MEMBER ORDER BY SID";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		ResultSet rs = pstmt.executeQuery();
		
		while(rs.next())
		{
			MemberDTO dto = new MemberDTO();
			dto.setSid(rs.getString("SID"));
			dto.setName(rs.getString("NAME"));
			dto.setTel(rs.getString("TEL"));
			
			result.add(dto);
		}
		
		rs.close();
		pstmt.close();
		
		return result;
	}
	
	// 전체 인원 수 확인 담당 메소드
	public int count() throws SQLException
	{
		int result = 0;
		
		String sql = "SELECT COUNT(*) AS COUNT FROM TBL_MEMBER";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		ResultSet rs = pstmt.executeQuery();
		if(rs.next())
		{
			result = rs.getInt("COUNT");
		}
		
		rs.close();
		pstmt.close();
		
		return result;
	}

	// 데이터베이스 종료 메소드 정의
	public void close() throws SQLException
	{
		DBConn.close();
	}
	
	// 메소드 추가
	// 번호 검색 담당 메소드(번호를 통해 회원 데이터 조회)
	//-- 현재... 번호(sid)는 TBL_MEMBER 테이블에서 식별자의 역할을 수행하고 있으며
	//   번호를 통한 검색 결과는 한 명의 회원일 수 밖에 없기 때문에
	//   반환 자료형은 MemberDTO 형태로 구성하자.
	public MemberDTO searchMember(String sid) throws SQLException
	{
		MemberDTO result = new MemberDTO();
		
		String sql = "SELECT SID, NAME, TEL FROM TBL_MEMBER WHERE SID=?";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		//pstmt.setString(1, sid);
		pstmt.setInt(1, Integer.parseInt(sid));
		
		ResultSet rs = pstmt.executeQuery();
	
		while(rs.next())
		{
			result.setSid(sid);
			result.setName(rs.getString("NAME"));
			result.setTel(rs.getString("TEL"));
		}
		
		rs.close();
		pstmt.close();
		
		return result;
	}
	
	// 메소드 추가
	// 회원 데이터 수정 담당 메소드
	public int modify(MemberDTO member) throws SQLException
	{
		int result=0;
		
		String sql = "UPDATE TBL_MEMBER SET NAME=?, TEL=? WHERE SID=?";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		pstmt.setString(1, member.getName());
		pstmt.setString(2, member.getTel());
		pstmt.setInt(3, Integer.parseInt(member.getSid()));
		
		result = pstmt.executeUpdate();
		
		pstmt.close();
		
		return result;
	}
	
	// 메소드 추가
	// 회원 데이터 삭제 담당 메소드
	public int remove(String sid) throws SQLException
	{
		int result = 0;
		
		String sql = "DELETE FROM TBL_MEMBER WHERE SID=?";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		pstmt.setInt(1, Integer.parseInt(sid));
		
		result = pstmt.executeUpdate();
		
		pstmt.close();
		
		return result;
	}
	
	// 메소드 추가
	// 자식 테이블의 참조 데이터 레코드 수 확인
	// → 성적 처리가 되었는지의 여부 확인
	public int refCount(String sid) throws SQLException
	{
		int result=0;
		
		String sql = "SELECT COUNT(*) AS COUNT FROM TBL_MEMBERSCORE WHERE SID=?";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		pstmt.setInt(1, Integer.parseInt(sid));
		
		ResultSet rs = pstmt.executeQuery();
		
		if (rs.next())						// while(rs.next())
		{
			result = rs.getInt("COUNT");
		}
		rs.close();
		pstmt.close();
		
		return result;
	}
	
}

 

 


 

 

 

MemberSelect.jsp  : 전체 학생 목록 (전체 시작 페이지 개념)

<%@page import="com.test.MemberDTO"%>
<%@page import="com.test.MemberDAO"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%
	StringBuffer str = new StringBuffer();
	MemberDAO dao = new MemberDAO();
	
	String memberCount = "<span id='memberCount'>전체 인원 수 : ";
	
	try
	{
		dao.connection();

		memberCount += dao.count() + "명</span>";
		
		str.append("<table class='table'>");
		str.append("<tr>");
		str.append("<th style='width: 50px;'>번호</th>");
		str.append("<th style='width: 100px;'>이름</th>");
		str.append("<th style='width: 150px;'>전화번호</th>");
		str.append("<th style='width: 200px;'>회원관리</th>");
		str.append("</tr>");
		
		for(MemberDTO member : dao.list())
		{
			str.append("<tr>");
			str.append("	<td>" + member.getSid() + "</td>");
			str.append("	<td>" + member.getName() + "</td>");
			str.append("	<td>" + member.getTel() + "</td>");
			str.append("	<td>");
			str.append("	<a href='MemberUpdateForm.jsp?sid=" + member.getSid() + "'>");
			str.append("		<button type='button' class='btn01'>수정</button>");
			str.append("	</a>");
			
			if (dao.refCount(member.getSid())==1)
			{
				// memberDelete(1, "고길동")
				// "memberDelete(1, "고길동")"
				// "... 'memberDelete(1, "고길동")'"
				// "... 'memberDelete(1, \"고길동\")'"
				
				// ※ 자바스크립트에서 사용할 수 있는
				//    따옴표의 종류 : ①"" ②'' ③\"\"
				//    일반적으로 따옴표가 두 번 중첩되어 사용하게 되면
				//    ①과 ②를 사용하면 된다.
				//    하지만, 따옴표가 세 번 중첩되어 사용될 경우
				//    ③ escape 를 사용해야 한다.
				
				str.append("	<a href='javascript:memberDelete(" + member.getSid() + ", \"" + member.getName() + "\")'>");
				str.append("		<button type='button' class='btn02'>삭제</button>");
				str.append("	</a>");
				
			}
			else
			{
				str.append("	<a href='javascript:memberDelete(" + member.getSid() + ", \"" + member.getName() + "\")'>");
				str.append("		<button type='button' class='btn01'>삭제</button>");
				str.append("	</a>");
			}
			
			str.append("	</td>");
			str.append("</tr>");
		}
		str.append("</table>");
	}
	catch(Exception e)
	{
		System.out.println(e.toString());
	}
	finally
	{
		try
		{
			// 데이터베이스 연결 종료
			dao.close();
		}
		catch(Exception e)
		{
			System.out.println(e.toString());
		}
	}
		
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MemberSelect.jsp</title>
<link rel="stylesheet" type="text/CSS" href="css/MemberScore.css">

<style type="text/css">
	a {text-decoration: none;}
</style>

<script type="text/javascript">

	function memberDelete(sid, name)
	{
		// 확인
		//alert("번호 : " + sid + ", 이름 : " + name);
		
		var res = confirm("번호 : " + sid + ", 이름 : " + name + "\n이 회원의 정보를 정말 삭제하시겠습니까?");
		
		// 확인
		//alert(res);
		//-- confirm() 함수를 통해 호출되는 창은
		//   true(확인) 또는 false(취소)를 반환하게 된다.
		
		// 확인 버튼 클릭 시 → res 가 true 일 때...		
		// MemberDelete.jsp 페이지에 삭제 요청~!!!
		if (res)
			window.location.href="MemberDelete.jsp?sid=" + sid;
		
	}

</script>

</head>
<body>

<div>
	<h1>회원 <span style="color: red;">명단</span> 관리 및 출력 페이지</h1>
	<hr>
</div>

<div>
	<a href="MemberScoreSelect.jsp"><button type="button">회원 성적 관리</button></a>
	<a href="MemberInsertForm.jsp"><button type="button">신규 회원 등록</button></a>
</div>
<br>

<div>
	<!-- 리스트 출력 -->
	<!-- 정적 -->
	<!-- <table class="table">
		<tr>
			<th style="width: 50px;">번호</th>
			<th style="width: 100px;">이름</th>
			<th style="width: 150px;">전화번호</th>
			<th style="width: 200px;">회원관리</th>
		</tr>
		<tr>
			<td>1</td>
			<td>희동이</td>
			<td>010-1111-1111</td>
			<td>
				<a href=""><button type="button" class="btn01">수정</button></a>
				<a href=""><button type="button" class="btn02">삭제</button></a>
			</td>
		</tr>
		<tr>
			<td>2</td>
			<td>도우너</td>
			<td>010-2222-2222</td>
			<td>
				<a href=""><button type="button" class="btn01">수정</button></a>
				<a href=""><button type="button" class="btn01">삭제</button></a>
			</td>
		</tr>
		<tr>
			<td>3</td>
			<td>마이콜</td>
			<td>010-3333-3333</td>
			<td>
				<a href=""><button type="button" class="btn01">수정</button></a>
				<a href=""><button type="button" class="btn01">삭제</button></a>
			</td>
		</tr>
	</table> -->
</div>

<!-- 동적 -->
<div>
	<%=str.toString() %>
</div>


</body>
</html>

 

 


 

 

MemberInsertForm.jsp  : 회원 입력 페이지

<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MemberInsertForm.jsp</title>
<link rel="stylesheet" type="text/CSS" href="css/MemberScore.css">

<script type="text/javascript">
	
	function memberSubmit()
	{
		// 확인
		//alert("함수 호출 확인~!!!");
		
		var memberForm = document.getElementById("memberForm");
		
		var uName = document.getElementById("uName");
		var nameMsg = document.getElementById("nameMsg");
		
		nameMsg.style.display = "none";
		
		if(uName.value=="")
		{
			nameMsg.style.display="inline";
			uName.focus();
			return;
		}
		
		// form 을 직접 지정하여 submit 액션 수행
		memberForm.submit();
	}
	
	function memberReset()
	{
		// 확인
		//alert("함수 호출 확인~!!!");
		
		/* 내가 var uName = document.getElementById("uName");
		var nameMsg = document.getElementById("nameMsg");
		var uTel = document.getElementById("uTel");
		
		nameMsg.style.display = "none";
		
		if (uName.value!="")
		{
			document.getElementById("uName").value = "";
			
		}
		if (uTel.value!="")
		{
			document.getElementById("uTel").value = "";
		}
		 */
		 
		var memberForm = document.getElementById("memberForm");
		var uName = document.getElementById("uName");
		var nameMsg = document.getElementById("nameMsg");
		nameMsg.style.display = "none";
		
		// form 을 직접 지정하여 reset 액션 수행
		memberForm.reset();
	
		uName.focus();
		
	}
	
</script>

</head>
<body>

<div>
	<h1>회원 <span style="color: red;">명단</span> 관리
		    및 <span style="color: red;">입력</span> 페이지</h1>
	<hr>
</div>

<div>
	<a href="MemberSelect.jsp"><button type="button">회원 명단 관리</button></a>
</div>

<div>
	<!-- 회원 데이터 입력 폼 구성 -->
	<form action="MemberInsert.jsp" method="post" id="memberForm">
		<br>
		<table class="table">
			<tr>
				<th>이름(*)</th>
				<td>
					<input type="text" id="uName" name="uName">
				</td>
				<td>
					<span class="errMsg" id="nameMsg">이름을 입력해야 합니다.</span>
				</td>
			</tr>
			<tr>
				<th>전화번호</th>
				<td>
					<input type="text" id="uTel" name="uTel">
				</td>
				<td>
				</td>
			</tr>
		</table>
		<br>
		
		<a href="javascript:memberSubmit()"><button type="button">입력하기</button></a>	
		<a href="javascript:memberReset()"><button type="button">취소하기</button></a>	
		<a href="MemberSelect.jsp"><button type="button">목록으로</button></a>	
	</form>
</div>

</body>
</html>

 

 


 

 

MemberInsert.jsp  : 회원 입력 실행

(클라이언트와 만나지 않고 Insert쿼리문만 실행해서 다시 MemberSelect.jsp로 안내해줌)

<%@page import="com.test.MemberDTO"%>
<%@page import="com.test.MemberDAO"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%

	// MemberInsert.jsp
	//-- 데이터베이스의 테이블(TBL_MEMBER)에
	//   회원 데이터 추가 액션 처리 수행
	//   ... 이후, 다시 리스트 페이지(MemberSelet.jsp)를 요청할 수 있도록 클라이언트에 안내

	request.setCharacterEncoding("UTF-8");
	
	MemberDAO dao = new MemberDAO();

	try
	{
		// 데이터베이스 연결
		dao.connection();
		
		// MemberDTO 객체 생성 및 속성 구성(→ add() 메소드 호출을 위해 필요)
		MemberDTO member = new MemberDTO();
		
		String name = request.getParameter("uName");
		String tel = request.getParameter("uTel");
		
		member.setName(name);
		member.setTel(tel);
		
		// insert 쿼리문을 수행하는 메소드 호출
		// → dao 의 add() 메소드
		dao.add(member);
		
		// 반환값을 받아서 추가 업무 수행 코드 삽입 가능~!!!
	
	}
	catch(Exception e)
	{
		System.out.println(e.toString());
	}
	finally
	{
		try
		{
			//데이터베이스 연결 종료
			dao.close();
		}
		catch(Exception e)
		{
			System.out.println(e.toString());
		}
	}
	
	// check~!!!
	// 클라이언트가 MemberSelect.jsp 페이지를 다시 요청할 수 있도록 안내
	// → 다시 요청하는 과정에서 리스트 갱신
	response.sendRedirect("MemberSelect.jsp");
	

// 아래 보여주는 코드(클라이언트와 만나는...) 모두 제거
%>

 


 

MemberUpdate.jsp  : Update 쿼리문에 넘겨줄 값 입력하는 폼 구성

<%@page import="com.test.MemberDTO"%>
<%@page import="com.test.MemberDAO"%>
<%@ page contentType="text/html; charset=UTF-8"%>

<%
	// 이전 페이지로(MemberSelect.jsp)부터 데이터 수신
	// → sid
	
	// ※ 수신한 sid 를 가지고 회원 데이터 조회
	//    → 조회해서 얻어낸 데이터를 폼에 구성
	
	String sid = request.getParameter("sid");
	String name = "";
	String tel = "";
	
	MemberDAO dao = new MemberDAO();
	
	try
	{
		// 데이터베이스 연결
		dao.connection();
		
		// sid를 가지고 회원 데이터를 얻어내는 메소드 호출
		// → dao 의 searchMember() 메소드 호출
		MemberDTO member = dao.searchMember(sid);
		name = member.getName();
		tel = member.getTel();
		
	}
	catch(Exception e)
	{
		System.out.println(e.toString());
	}
	finally
	{
		try
		{
			// 데이터베이스 연결 종료
			dao.close();
		}
		catch(Exception e)
		{
			System.out.println(e.toString());
		}
	}

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MemberScoreUpdateForm.jsp</title>
<link rel="stylesheet" type="text/CSS" href="css/MemberScore.css">

<script type="text/javascript">
	
	function memberSubmit()
	{
		// 확인
		//alert("함수 호출 확인~!!!");
		
		var memberForm = document.getElementById("memberForm");
		
		var uName = document.getElementById("uName");
		var nameMsg = document.getElementById("nameMsg");
		
		nameMsg.style.display = "none";
		
		if(uName.value=="")
		{
			document.getElementById("uName") = name;
		}
		
		// form 을 직접 지정하여 submit 액션 수행
		memberForm.submit();
	}
	
	function memberReset()
	{
		// 확인
		//alert("함수 호출 확인~!!!");
		 
		var memberForm = document.getElementById("memberForm");
		var uName = document.getElementById("uName");
		var nameMsg = document.getElementById("nameMsg");
		nameMsg.style.display = "none";
		
		// form 을 직접 지정하여 reset 액션 수행
		memberForm.reset();
	
		uName.focus();
		
	}
	
</script>

</head>
<body>

<div>
	<h1>회원 <span style="color: red;">명단</span> 관리
		    및 <span style="color: red;">수정</span> 페이지</h1>
	<hr>
</div>

<div>
	<a href="MemberSelect.jsp"><button type="button">회원 명단 관리</button></a>
</div>

<div>
	<!-- 회원 데이터 수정 폼 구성 -->
	<form action="MemberUpdate.jsp?sid=<%=sid %>" method="post" id="memberForm">
		<br>
		<table class="table">
			<%-- 
			<tr>
				<th>번호</th>
				<td>
					<input type="text" name="sid" value="<%=sid %>" disabled="disabled">
				</td>
				<td>
				</td>
			</tr>
			--%>
			<tr>
				<th>이름(*)</th>
				<td>
					<input type="text" id="uName" name="uName" value="<%=name %>">
				</td>
				<td>
					<span class="errMsg" id="nameMsg">이름을 입력해야 합니다.</span>
				</td>
			</tr>
			<tr>
				<th>전화번호</th>
				<td>
					<input type="text" id="uTel" name="uTel" value="<%=tel %>">
				</td>
				<td>
				</td>
			</tr>
		</table>
		<%-- <input type="hidden" name="sid" value="<%=sid %>"> --%>
		
		<br>
		
		<a href="javascript:memberSubmit()"><button type="button">수정하기</button></a>	
		<a href="javascript:memberReset()"><button type="button">취소하기</button></a>	
		<a href="MemberSelect.jsp"><button type="button">목록으로</button></a>	
	</form>

</div>

</body>
</html>

 

 


 

 

MemberUpdate.jsp  : update 쿼리문을 수행하고 MemberSelect.jsp로 안내. (클라이언트를 만나지 않음)

<%@page import="com.test.MemberDAO"%>
<%@page import="com.test.MemberDTO"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%
	request.setCharacterEncoding("UTF-8");

	String sid = request.getParameter("sid");
	String name = request.getParameter("uName");
	String tel = request.getParameter("uTel");

	MemberDAO dao = new MemberDAO();
	
	try
	{
		dao.connection();
		
		MemberDTO member = new MemberDTO();
		
		member.setSid(sid);
		member.setName(name);
		member.setTel(tel);
		
		dao.modify(member);
		
		// 이후 반환 결과에 따른 분기 처리 추가 가능~!!!
		
	}
	catch(Exception e)
	{
		System.out.println(e.toString());
	}
	finally
	{
		try
		{
			dao.close();
		}
		catch(Exception e)
		{
			System.out.println(e.toString());
		}
	}
	
	// 클라이언트에 MemberSelect.jsp 페이지를 다시 요청할 수 있도록 안내~!!!
	response.sendRedirect("MemberSelect.jsp");

// 이후 보여지는 페이지 구성 모두 삭제
%>

 

 


 

MemberDelete.jsp  : 회원을 삭제할 것인지의 여부를 물어보고 확인을 수행하면 삭제

<%@page import="com.test.MemberDAO"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%
   // MemberDelete.jsp
   
   // 이전 페이지(MemberSelect.jsp)로부터 넘어온 데이터 수신
   // → sid
   String sid = request.getParameter("sid");

   MemberDAO dao = new MemberDAO();
   
   String strAddr = "";
   //-- 삭제가 불가능한 사람들의 대한 처리(사용자가 직접 주소창을 통해 1,2번을 접근 → 비정상적인 접근이 있을 때)
   //   제거 가능한 상황과 불가능한 상황일 때 넘어가는 페이지가 다르게 하려고.
   
   try
   {
      dao.connection();
      
      //dao.remove(sid);
      // 그냥 삭제만 하면, 비정상적인 접근에 대한 처리 못함
      
      // 참조 레코드 수 확인
      int checkCount = dao.refCount(sid);
      //-- TBL_MEMBER 테이블의 제거하고자 하는 데이터의
      //   SID 를 참조하는 TBL_MEMBERSCORE 테이블 내의 데이터 갯수 확인
      
      // 그에 따른 분기
      if(checkCount==0)      //-- 제거 가능
      {
         dao.remove(sid);
         strAddr = "MemberSelect.jsp";
      }
      else               //-- 제거 불가
      {
         //dao.remove(sid);
         //-- TBL_MEMBERSCORE 테이블의 데이터가
         //   TBL_MEMBER 테이블의 SID 를 참조하고 있는 경우로
         //   삭제가 불가능한 상황
         //   → 제거하지 못하는 사유를 안내하는 페이지로 이동
         //   + 리스트 페이지로 돌아가기 버튼
         
         strAddr = "Notice.jsp";
      }
      
      
   }
   catch(Exception e)
   {
      System.out.print(e.toString());
   }
   finally
   {
      try
      {
         dao.close();
      }
      catch(Exception e)
      {
         System.out.print(e.toString());
      }
   }
   
   // check~!!!
   // 상황에 따라 안내한 페이지로 클라이언트가 다시 요청할 수 있도록 처리
   response.sendRedirect(strAddr);

// 나머지 보여주는 코드 모두 제거

// 또는, Notice.jsp 따로 만들지 말구, 
// 제거 가능할 때는 MemberSelect.jsp로 넘어가고
// 제거 불가일 때는 이 페이지에 남아서 밑에 html에 Notice를 구성할 수 있다.  
%>

 

Notice.jsp : 삭제가 불가능한 상황일 때 제거하지 못하는 이유를 알려주는 페이지

<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Notice.jsp</title>
<link rel="stylesheet" type="text/CSS" href="css/main.css">
</head>
<body>

<div>
	<h1>안내</h1>
	<hr>
</div>

<div>
	<p>성적 정보가 등록되어 있으므로 해당 회원 삭제가 불가능합니다.</p>
	<br>
	
	<a href="MemberSelect.jsp" style="text-decoration: none;">-- 돌아가기 --</a>
</div>

</body>
</html>

 

 


! 현재 배워가고 있는 주인장이 쓴 글이니 정보의 정확성에 유의하시기 바랍니다 !