코딩하는 문과생

[Web] 4. MVC 패턴(3) - 로그인 과정을 통해 알아보는 DAO까지의 흐름 본문

웹 프로그래밍/Web

[Web] 4. MVC 패턴(3) - 로그인 과정을 통해 알아보는 DAO까지의 흐름

코딩하는 문과생 2020. 1. 30. 14:24

[Preview]

 

전체 흐름 & 해당 글 부분


[main.jsp 추가 ]

로그인 과정을 통해 알아보는 DAO까지의 흐름 
	<p/>
	Login :: <br/>
	<form action="login.inc" method="post">
		<input type="text"  name="id" id="id">
		<input type="text"  name="pwd" id="pwd">
		<input type="submit"  value="로그인">
	</form>
	

[LoginCtrl 생성]

public class LoginCtrl implements Controller{
	@Override
	public ModelAndView execute(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("LoginCtrl execute");
		return null;
	}

}

[Controller에서 Dao까지 흐름 - 개요]

Service와 DAO를 통한 DB접근

ctrl, service, dao모두 인터페이스를 정의하고 구현한다.

[UserDao 인터페이스 생성]

Dao는 데이터 액세스 로직을 처리
package com.sinc.intern.insa.model.sql;

import java.util.List;

public interface UserDao {
	//single finder
	public Object selectRow(Object obj);
	//multi finder
	public List<Object> selectRow() ;
	
	public int insertRow(Object obj) ;
	public int updateRow(Object obj) ;
	public int deleteRow(Object obj) ;
}

[UserDaoImpl 생성]

DB와 연동된 코드 작성
package com.sinc.intern.insa.model.sql;

import java.util.List;

public class UserDaoImpl implements UserDao {

	@Override
	public Object selectRow(Object obj) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Object> selectRow() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int insertRow(Object obj) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int updateRow(Object obj) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int deleteRow(Object obj) {
		// TODO Auto-generated method stub
		return 0;
	}
	
}

[UserServiceImpl 생성]

Service는 비즈니스 로직을 처리
그리고, Dao 인스턴스를 받는다.
package com.sinc.intern.insa.service;

import com.sinc.intern.insa.model.sql.UserDao;
import com.sinc.intern.insa.model.sql.UserDaoImpl;

public class UserServiceImpl {
	//인터페이스로 선언, Dao를 받을 수 있다.
	private UserDao dao;
	
	public UserServiceImpl() {
		dao = new UserDaoImpl();
	}
}

[UserService 인터페이스 생성]

package com.sinc.intern.insa.service;

import java.util.List;

public interface UserService {
	//single finder
		public Object 		select(Object obj);
		//multi finder
		public List<Object> select() ;
		
		public int insert(Object obj) ;
		public int update(Object obj) ;
		public int delete(Object obj) ;
}

[UserServiceImpl 수정]

package com.sinc.intern.insa.service;

import java.util.List;

import com.sinc.intern.insa.model.sql.UserDao;
import com.sinc.intern.insa.model.sql.UserDaoImpl;

public class UserServiceImpl implements UserService{
	//인터페이스로 선언
	private UserDao dao;
	
	public UserServiceImpl() {
		dao = new UserDaoImpl();
	}

	@Override
	public Object select(Object obj) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Object> select() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int insert(Object obj) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int update(Object obj) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int delete(Object obj) {
		// TODO Auto-generated method stub
		return 0;
	}
	
}

[LoginCtrl 수정]

Service 인스턴스를 받는다.
package com.sinc.intern.insa.ctrl;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sinc.intern.insa.service.UserService;
import com.sinc.intern.insa.service.UserServiceImpl;
import com.sinc.intern.util.Controller;
import com.sinc.intern.view.util.ModelAndView;

public class LoginCtrl implements Controller{
	
	//Dependency Injection - 의존성 주입
	private UserService service;
	
	public LoginCtrl() {
		service = new UserServiceImpl();
	}
	
	@Override
	public ModelAndView execute(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("LoginCtrl execute");
		return null;
	}

}

[UserDAO, UserVO 생성]

데이터를 전달하고 담기 위한 바구니

데이터를 담는 바구니, DTO와 VO

package com.sinc.intern.insa.model.vo;

public class UserDTO {
	private String id, pwd;

	public UserDTO() {
		// TODO Auto-generated constructor stub
	}
	
	public UserDTO(String id, String pwd) {
		super();
		this.id = id;
		this.pwd = pwd;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	@Override
	public String toString() {
		return "UserDTO [id=" + id + ", pwd=" + pwd + "]";
	}
}

[Factory 추가]

DAO까지 파라미터가 넘어가는 것 확인
private BeanFactory() {
		map.put("/incWEB/main.inc", new MainCtrl());
		map.put("/incWEB/parameter.inc", new ParamCtrl());
		map.put("/incWEB/insert.inc", new InsertCtrl());
		map.put("/incWEB/select.inc", new SelectCtrl());
		map.put("/incWEB/login.inc", new LoginCtrl());
	}
	

[LoginCtrl 추가]

DAO까지 파라미터가 넘어가는 것 확인
	@Override
	public ModelAndView execute(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("LoginCtrl execute");
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		UserDTO dto = new UserDTO(id, pwd);
		Object user = service.select(dto);
		System.out.println("Ctrl result user : " + user);
		return null;
	}

[UserServiceImpl에 디버그 추가]

 

DAO까지 파라미터가 넘어가는 것 확인
	@Override
	public Object select(Object obj) {
		System.out.println("UserService select");
		return dao.selectRow(obj);
	}

[UserDaoImpl에 디버그 추가]

DAO까지 파라미터가 넘어가는 것 확인
	@Override
	public Object selectRow(Object obj) {
		System.out.println("UserDao selectRow");
		System.out.println("Dao user : " + obj);
		return null;
	}

흐름 파악!