MVC (Model View Controller)
MVC 패턴은 어플리케이션을 3가지 영역, 즉 Model, View, Controller 로 구분하여 작업함으로써, 서로간의 결합도를 최소화 하고 유지보수성을 높이며, 개발자들이 각각 맡은 영역에만 집중할 수 있게 하는 장점이 있습니다.
◆ View
클라이언트 와 서버같의 인터페이스 역할을 담당함으로써 클라이언트의 요청을 받거나 처리된 결과를 보여줍니다.
HTML, CSS, JSP 드을 사용하여 구현.
◆ Controller
View 와 Model을 연결하는 중계 역할을 하며, 클라이언트가 전달한 파라미터를 추출하여 Model로 전달하고, 처리 결과를 View에게 넘겨주는 기능을 합니다.
JSP, Servlet을 통하여 구현
◆ Model
model은 서비스와 데이터베이스 처리를 담당하는 역할을 하며, 각 로직을 처리하고, DB query 처리 기능을 합니다.
Java로 구현
우선 이번글에서 구현할 전체적인 MVC 모델의 모습을 본후, 코드로 살펴봅시다!
코드 구현
◆ View
memberInput.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
</head>
<body>
<h3>회원가입</h3>
<form action="memberProc.jsp" method="POST">
ID : <input type="text" name="id"> <br>
비밀번호 : <input type="password" name="passwd" > <br>
이름 : <input type="text" name="name"> <br>
E-Mail : <input type="text" name="mail"> <br>
<input type="submit" value="가입">
</form>
</body>
</html>
memberOutput.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 완료</title>
</head>
<body>
<h3>회원가입 완료!</h3>
</body>
</html>
뷰는 클라이언트가 보는 화면입니다. 클라이언트로 부터 form을 통해 질의문을 서버로 보낼 수 있습니다.
위의 코드와 같이 단순하게 화면에 출력하는 페이지를 뷰라고 부릅니다.
◆ Controller
컨트롤러는 뷰에서 클라이언트가 서비스를 요청했을때 처리하는 페이지 입니다.
컨트롤러는 서비스를 처리하는 메소드를 호출하여 클라이언트의 요청과 서비스 처리 객체를 연결해주는 중계역할을 합니다.
컨트롤러는 일반적으로 다음과 같은 일을 처리하게 됩니다.
1) 뷰에서 들어온 요청을 받는다.
2) 요청받은 질의문에서 파라미터를 추출한다.
3) 파라미터의 유효성을 검사하고, 실패시 다시 입력 뷰 로 돌아간다.
4) 유효하다면 서비스 객체의 메소드를 호출하여 파라미터를 서비스 객체로 전달한다.
5) 출력 뷰 로 이동한다.
memberProc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.edu.biz.MemberService" %>>
<%
request.setCharacterEncoding("UTF-8"); // 인코딩 처리
%>
<jsp:useBean id="member" class="com.edu.beans.Member" /> // 맴버객체 생성 (bean 객체)
<jsp:setProperty property="*" name="member" /> // settet 메소드를 호출하면서 bean 객체에 저장
<%
MemberService service = new MemberService(); // 서비스 객체생성
service.memberInsert(member); // 서비스 객체의 메소드에 인자로 member객체 전달
RequestDispatcher rd = request.getRequestDispatcher("memberOutput.jsp");
rd.forward(request, response); // 출력 뷰 페이지로 이동
%>>
다만 위의 코드에서는 간단하게 구현하기 위해 유효성 검사를 하는 부분이 빠져있습니다.
값의 입력여부, 이메일이 맞는지? 등등 판단을 해야합니다.
◆ Model
MVC 패턴에서 모델은 두가지로 구분합니다.
1) 서비스 처리를 담당하는 Service 객체
2) 데이터베이스 처리를 담당하는 DAO 객체
- Service 객체
다음은 회원에 관한 서비스를 전담 처리하기 위해 만든 객체입니다.
memberService.java
import com.edu.beans.Member;
import com.edu.dao.MemberDAO;
public class MemberService {
MemberDAO dao = new MemberDAO();
public void memberInsert(Member member) {
dao.insertMember(member);
}
}
이처럼 서비스를 처리하기 위한 내용으로만 구현된 객체를 Service, Business 객체라고 부릅니다.
- DAO 객체
우선 다음 코드를 먼저 보시죠!
MemberDAO.java
import java.sql.*;
import com.edu.beans.Member;
public class MemberDAO {
public Connection getConnection() {
Connection con = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "scott", "tiger");
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
public void insertMember(Member member) {
try {
Connection con = this.getConnection();
PreparedStatement pstmt = con.prepareStatement("insert into member values(?,?,?,?)");
pstmt.setString(1, member.getId());
pstmt.setString(2, member.getPasswd());
pstmt.setString(3, member.getName());
pstmt.setString(4, member.getMail());
pstmt.executeUpdate();
}catch(Exception e) {
e.printStackTrace();
}
}
}
getConnection() 메소드는 DB 서버와 접속하며, insertMember() 메소드는 DB의 member 테이블에 레코드를 삽입하는 역할을 합니다.
이에 추가적으로 회원정보 조회, 정보 수정, 회원 탈퇴 등의 기능을 추가하고 싶다면 memberSearch(), memberUpdate(), memberDelete()와 같이 메소드를 추가하여 기능을 구현해야 합니다.
이처럼 memberDAO.java에는 데이터베이스에 있는 member 테이블을 다루는 기능들만 구현합니다.
데이터베이스 처리에 관한 기능만으로 구성된 객체를 DAO(Data Access Object) 객체라고 부릅니다.
'BackEnd > Servlet, JSP' 카테고리의 다른 글
[Servlet, JSP] Servlet Life Cycle : Servlet 생명 주기 (0) | 2022.01.14 |
---|---|
[Servlet, JSP] FilterConfig, FilterChain (0) | 2022.01.13 |
[Servlet, JSP] RequestDispatcher와 요청 재지정 (0) | 2022.01.13 |
[Servlet, JSP] Session과 login, logout 구현하기 (0) | 2022.01.13 |
[Servlet, JSP] Servlet 과 Cookie (0) | 2022.01.13 |
댓글