JSP 사용해보기 - DTO와 DAO

KimJH_94·2022년 10월 24일
0

JSP

목록 보기
7/7
post-thumbnail

💻 DTO (Data Transfer Object) / VO(Value Object) / DAO(Data Access Object)




⭐️ DTO와 VO


DTO와 VO는 정보를 담아주는 객체이다. 자바에서 배운 자바 빈즈의 형태를 띄는데, getter와 setter를 가지고 있어, 해당 클래스를 객체화 하여 데이터를 담아 DB에 쏴줄때 사용한다.

이처럼 DTO와 VO는 데이터를 포장해서 만든 데이터 포장 객체로, 하나의 데이터베이스 레코드를 저장하여 하나의 DTO객체로 변환한다. 단순히 데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달할 때 사용하는 객체이다.

DTO의 경우 setter 메소드가 있어 값을 수정할 수 있지만, VO는 값 오브젝트로서 read-Only특징이 있다.



⭐️ DAO


DAO는 DB의 데이터에 접근하고 관리하기 위한 객체이다. 데이터들의 CRUD를 담당하는 메소드들이 정의 되어있다. 사용자가 입력한 값이 담긴 DTO/VO객체를 데이터베이스 서버에 저장하며, 반대로 데이터베이스 서버로부터 레코드를 SELECT한 후, DTO객체로 변경하여 가져오는 역할도 한다. SQL을 직접 실행하며 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트이다.



간단한 그림을 통해 확인해보면 아래와 같다. DTO가 사용자에게서 VIEW단으로 부터 입력받은 데이터를 묶어 모델단으로 전달하면, DAO가 그걸 DB로 넘겨 요청한 작업을 수행하고, 다시 DTO로 묶어 사용자에게 보내준다. DTO는 데이터의 묶음, DAO는 DB와의 연결을 도와주는 역할을 한다고 생각하면된다.

모델2의 경우에는 JSP와 서블릿을 분리하여 VIEW 단과 CONTROLLER를 기능에 따라 나눠준 것이다.



⭐️ 사용자에게 데이터를 받아 DTO로 넘겨 DAO에 담긴 메소드와 비교해보기


총 5개의 페이지가 필요하다.

📌 필요한 페이지
1. VIEW단
2. VIEW단의 기능을 담은 JS페이지 (validation 체크)
3. 모델단의 역할을 하는 DTO 페이지 (데이터 담아주는 역할)
4. 모델단의 역할을 하는 DAO 페이지 (담아온 데이터를 DB와 비교해줌)
5. 컨트롤러 역할을 하는 서블릿 페이지 (데이터를 DTO객체에 담고, DAO객체에 넣어주는 역할)

VIEW 단

우선 VIEW단의 경우 간단하게 회원가입 페이지를 만들어준다. 회원가입 버튼을 누르게 되면 sendit()메소드가 실행되며, JS페이지로 넘어간다.

<!-- 1. 사용자가 보는 화면 joinview (VIEW단) -->
<form action="join.jsp" method="post" id="joinForm">
	<!-- 서버로 전달되는건 name, 컬럼에 name명이 적힌다 -->
	아이디 		: <input type="text" name="userid" id="userid"/><br>
	비밀번호 		: <input type="password" name="userpw" id="userpw"/><br>
	이름 		: <input type="text" name="username" id="username"/><br>
	휴대폰 번호 	: <input type="text" name="userphone" id="userphone"/><br>
	<br>
	<input type="button" value="회원가입" onclick="sendit()" />
</form>

JS페이지

회원가입 버튼을 사용자가 누르게 되면, JS 페이지로 넘어오게 되는데, 사용자가 입력한 데이터의 validation체크와 함께 모든 검사가 끝나면 frm.submit(); 메서드로 인해 form태그의 action에 적힌 곳으로 데이터가 향하게 된다.

function sendit(){
		let frm = document.getElementById("joinForm");

		// 접근방법 1 (id값으로 접근)
		let idTag = document.getElementById("userid");
		let pwTag = document.getElementById("userpw");

		// 접근방법 2 (name속성으로 접근)
		let nameTag = frm.username;
		let phoneTag = frm.userphone;

		if(idTag.value == ""){
			alert("아이디를 입력하세요.");
			idTag.focus();
			return false;
		}

		if(pwTag.value == ""){
			alert("비밀번호를 입력하세요.");
			pwTag.focus();
			return false;
		}

		if(pwTag.value.length < 8){
			alert("비밀번호는 8자 이상으로 입력하세요.");
			pwTag.focus();
			return false;
		}

		if(nameTag.value == ""){
			alert("이름을 입력하세요.");
			nameTag.focus();
			return false;
		}

		if(phoneTag.value == ""){
			alert("전화번호를 입력하세요.");
			phoneTag.focus();
			return false;
		}

		frm.submit();
	}

Model단 - DTO

받아오는 변수들을 초기화 시켜주고, getter와 setter로 만들어준다.

package com.companyname.web.dto;

public class UserDTO {
	// 사용자들에게서 데이터를 한번에 받아오는 DTO 객체

	private String userid;
	private String userpw;
	private String username;
	private String userphone;

	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public String getUserpw() {
		return userpw;
	}
	public void setUserpw(String userpw) {
		this.userpw = userpw;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getUserphone() {
		return userphone;
	}
	public void setUserphone(String userphone) {
		this.userphone = userphone;
	}
}

Model단 - DAO

지금은 아직 DB와 연결하는 법은 배우지 않았으니, DAO의 경우엔 간단하게 껍데기만 제작을 하고, 내부는 구현하지 않았다. 회원가입의 여부를 묻는 join메소드에, DTO객체에 담긴 데이터 dto를 파라미터로 받아 boolean타입으로 리턴한다.

Controller단 - 서블릿 페이지

넘겨받은 데이터를 서블릿 페이지에서 관리한다. request.getParameter로 데이터를 받아 변수에 저장한다. 이후 DAO와 DTO객체를 하나씩 생성해준다. 생성한 DTO객체에 넘겨받은 데이터를 setter메소드를 이용해 담아준다. 이후 DAO객체에 미리 만들어 놓은 join메소드에 DTO객체를 파라미터로 넘겨준다. 해당 join메소드는 boolean타입이기에, 이를 이용하여 가입 성공 여부를 판단판다.

@WebServlet("/regit/join")
public class JoinServlet extends HttpServlet{
	// MVC2모델

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

		String userid = req.getParameter("userid");
		String userpw = req.getParameter("userpw");
		String username = req.getParameter("username");
		String userphone = req.getParameter("userphone");
	
		UserDAO udao = new UserDAO();
		UserDTO udto = new UserDTO();
	
		// data set 해주기
		udto.setUserid(userid);
		udto.setUserpw(userpw);
		udto.setUsername(username);
		udto.setUserphone(userphone);

		boolean check = udao.join(udto);
		if( check ){
			// 가입성공
		}else{
			// 가입실패
		}
	}
}
profile
안녕하세요.

0개의 댓글

관련 채용 정보