IT탐험

모델2 본문

게시판만들기기록/스프링 프레임워크

모델2

watercase 2021. 10. 5. 16:04
  • 모델1 : 뷰와 비즈니스로직을 모두 JSP 페이지 하나에서 처리하는 구조
    • 구성요소 : JSP , 자바빈 or 서비스 클래스
    • 장점 : 구조가 단순하여 배우기 쉽고, 숙련된 개발자가 아니여도 구현이 용이
    • 단점 : 뷰코드, 자바코드가 섞이기 때문에 JSP 코드자체가 복잡해지고 재사용성이 떨어지며, 프론트와 백의 분업이 용이하지 않고 유지보수가 어렵다
  • 모델2 : 웹 앱의 기능들( 클라이언트의 요청 처리, 응답 처리, 비즈니스, 로직 처리)을 분리해서 구현
    • 현재 모든 웹 프로그램은 모델2 방식으로 개발한다고 봐도 무방
    • 특징
      • 각 기능이 서로 분리되어 있어 개발 및 유지보수가 쉽다
      • 각 기능의 재사용송이 높다
      • 디자이너와 개발자의 작업을 분업화해서 쉽게 개발가능
      • 모델2 방식과 관련된 기능이나 개념의 학습이 필요
    • 동작 방식
      • 클라이언트 요청 -> 요청 처리 -> 로직 처리 -> DB 조회 -> 로직 처리 -> 요청 처리 -> 화면 기능 -> 결과 출력

MVC 디자인 패턴

  • 모델2 구조의 여러 가지 개념들 중 가장 자주 사용되는 개념이 MVC이다
  • MVC : Model-View-Controller
  • MVC 구성 요소와 특징
    • Model
      • 데이터베이스 연동과 같은 비즈니스 로직을 수행
      • 일반적으로 DAO와 VO 클래스로 이루어져 있다
    • View
      • JSP가 화면 기능을 담당
      • Model에서 처리한 결과를 화면에 표시
    • Controller
      • 서블릿이 컨트롤러의 역할을 한다
      • 클라이언트의 요청을 분석
      • 요청에 대해서 필요한 모델을 호출
      • Model에서 처리한 결과를 보여주기 위해 JSP를 선택

MVC를 이용한 구현

    1. 조회 기능 구현
      • 흐름
        1. 브라우저에서 요청
        2. 서블릿이 요청을 받아 DAO의 조회 메서드를 호출
        3. DAO의 조회 메서드에서 SQL문으로 정보 조회 후 정보를 VO에 설정하여 반환
        4. 서블릿에서 조회한 정보를 JSP로 포워딩
        5. JSP에서 포워딩한 정보를 브라우저로 출력
      • 구현 예시
        • 더보기
          @WebServlet("/mem.do")
          public class MemberController extends HttpServlet {
          	private static final long serialVersionUID = 1L;
          	MemberDAO memberDAO;
          	
          	@Override
          	public void init() throws ServletException {
          		memberDAO = new MemberDAO();
          	}
          
          	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          		doHandle(request, response);
          	}
          
          	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          		doHandle(request, response);
          	}
          
          	private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          		request.setCharacterEncoding("utf-8");
          		response.setContentType("text/html;charset=utf-8");
          		List<MemberVO> membersList = memberDAO.listMembers();
          		request.setAttribute("membersList", membersList);
          		RequestDispatcher dispatch = request.getRequestDispatcher("/test01/listMembers.jsp");
          		dispatch.forward(request, response);
          	}
          
          }
          public class MemberDAO {
          
          	private DataSource dataFactory;
          	private Connection conn;
          	private PreparedStatement pstmt;
          	
          	public MemberDAO() {
          		try {
          			Context ctx = new InitialContext();
          			Context envContext = (Context) ctx.lookup("java:/comp/env");
          			dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
          		}catch (Exception e) {
          			e.printStackTrace();
          		}
          	}
          	
          	public List<MemberVO> listMembers() {
          		List<MemberVO> membersList = new ArrayList<MemberVO>();
          		try {
          			conn = dataFactory.getConnection();
          			String query = "select * from t_member order by joinDate desc";
          			System.out.println(query);
          			pstmt = conn.prepareStatement(query);
          			ResultSet rs = pstmt.executeQuery();
          			while(rs.next()) {
          				String id = rs.getString("id");
          				String pwd = rs.getString("pwd");
          				String name = rs.getString("name");
          				String email = rs.getString("email");
          				Date joinDate = rs.getDate("joinDate");
          				MemberVO memberVO = new MemberVO(id,pwd,name,email,joinDate);
          				membersList.add(memberVO);
          			}
          			rs.close();
          			pstmt.close();
          			conn.close();
          		}catch (Exception e) {
          			e.printStackTrace();
          		}
          		return membersList;
          	}
          }
          public class MemberVO {
          
          	private String id;
          	private String pwd;
          	private String name;
          	private String email;
          	private Date joinDate;
          
          	public MemberVO(String id, String pwd, String name, String email, Date joinDate) {
          		super();
          		this.id = id;
          		this.pwd = pwd;
          		this.name = name;
          		this.email = email;
          		this.joinDate = joinDate;
          	}
              
          	getter/setter 추가
          }
          <%@ page language="java" contentType="text/html; charset=UTF-8"
          	import="java.util.*, ex01.*"
          	isELIgnored="false"
              pageEncoding="UTF-8"%>
          <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
          <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          <%
          	request.setCharacterEncoding("utf-8");
          %>
          <!DOCTYPE html>
          <html>
          <head>
          	<meta charset="UTF-8">
          	<title>정보 출력</title>
          	<style>
          		.cls1 {
          			font-size: 40px;
          			text-align: center;
          		}
          		.cls2 {
          			font-size: 20px;
          			text-align: center;
          		}
          	</style>
          </head>
          <body>
          	<p class="cls1">회원정보</p>
          	<table align="center" border="1">
          		<tr align="center" bgcolor="lightgreen">
          			<td width="7%"><b>아이디</b></td>
          			<td width="7%"><b>비밀번호</b></td>
          			<td width="7%"><b>이름</b></td>
          			<td width="7%"><b>이메일</b></td>
          			<td width="7%"><b>가입일</b></td>
          		</tr>
          		
          		<c:choose>
          			<c:when test="${ empty membersList }">
          				<tr>
          					<td colspan=5>
          						<b>등록된 회원이 없습니다</b>
          					</td>
          				</tr>
          			</c:when>
          			<c:when test="${ !empty membersList }">
          				<c:forEach var="mem" items="${membersList}">
          					<tr align="center">
          						<td>${mem.id}</td>
          						<td>${mem.pwd}</td>
          						<td>${mem.name}</td>
          						<td>${mem.email}</td>
          						<td>${mem.joinDate}</td>
          					</tr>
          				</c:forEach>
          			</c:when>
          		</c:choose>
          	</table>
          	<a href="#">
          		<p class="cls2">회원 가입하기</p>
          	</a>
          </body>
          </html>
    2. 추가 기능 구현
      • 컨트롤러는 브라우저로부터 전달되는 요청을 구분하고 그 요청에 해당하는 모델을 선택하여 작업을 요청할 때 커맨드 패턴을 사용
      • 커맨더 패턴 : 브라우저가 URL 패턴을 이용해 컨트롤러에게 수행 작업을 요청하는 방법
        • 컨트롤러는 HttpServletRequest의 getPathInfo() 메서드로 URL 패턴에서 요청명을 받아와 작업을 수행
        • 예시 : http://localhost:8080/pro17/member/listMember.do
      • 흐름
        1. 브라우저에서 정보를 입력하고 URL 패턴으로 서버에 추가 요청
        2. 컨트롤러에서 getPathInfo() 메서드로 URL 패턴의 추가 요청명을 받음
        3. 요청명에 대해 DAO의 추가 메서드를 호출
        4. 추가 메서드에서 SQL문으로 테이블에 회원 정보 추가
      • 구현 예시
        • 더보기
          private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          		String nextPage = null;
          		request.setCharacterEncoding("utf-8");
          		response.setContentType("text/html;charset=utf-8");
          		String action = request.getPathInfo();
          		System.out.println("action : " + action);
          		
          		if(action == null || action.equals("/listMembers.do")) {
          			List<MemberVO> membersList = memberDAO.listMembers();
          			request.setAttribute("membersList", membersList);
          			nextPage = "/test02/listMembers.jsp";
          		} else if(action.equals("/addMember.do")) {
          			String id = request.getParameter("id");
          			String pwd = request.getParameter("pwd");
          			String name = request.getParameter("name");
          			String email = request.getParameter("email");
          			MemberVO memberVO = new MemberVO(id, pwd, name, email);
          			memberDAO.addMember(memberVO);
          			nextPage = "/member/listMembers.do";
          		} else if(action.equals("/memberForm.do")) {
          			nextPage = "/test02/memberForm.jsp";
          		} else {
          			List<MemberVO> membersList = memberDAO.listMembers();
          			request.setAttribute("membersList", membersList);
          			nextPage = "/text02/listMembers.jsp";
          		}
          		RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
          		dispatch.forward(request, response);
          	}
          public class MemberDAO {
          	
              ...생략
              
          	public void addMember(MemberVO m) {
          		try {
          			conn = dataFactory.getConnection();
          			String id = m.getId();
          			String pwd = m.getPwd();
          			String name = m.getName();
          			String email = m.getEmail();
          			String query = "insert into t_member(id, pwd, name, email) VALUES(?, ?, ?, ?)";
          			System.out.println(query);
          			pstmt = conn.prepareStatement(query);
          			pstmt.setString(1, id);
          			pstmt.setString(2, pwd);
          			pstmt.setString(3, name);
          			pstmt.setString(4, email);
          			pstmt.executeUpdate();
          			pstmt.close();
          			conn.close();
          		}catch (Exception e) {
          			e.printStackTrace();
          		}
          	}
          	
          }
          <%@ page language="java" contentType="text/html; charset=UTF-8"
          	import="java.util.*, ex01.*"
          	isELIgnored="false"
              pageEncoding="UTF-8"%>
          <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
          <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          <c:set var="contextPath" value="${pageContext.request.contextPath}" />
          <%
          	request.setCharacterEncoding("utf-8");
          %>
          <!DOCTYPE html>
          <html>
          <head>
          	<meta charset="UTF-8">
          	<title>정보 출력</title>
          	<style>
          		.cls1 {
          			font-size: 40px;
          			text-align: center;
          		}
          		.cls2 {
          			font-size: 20px;
          			text-align: center;
          		}
          	</style>
          </head>
          <body>
          	<p class="cls1">회원정보</p>
          	<table align="center" border="1">
          		<tr align="center" bgcolor="lightgreen">
          			<td width="7%"><b>아이디</b></td>
          			<td width="7%"><b>비밀번호</b></td>
          			<td width="7%"><b>이름</b></td>
          			<td width="7%"><b>이메일</b></td>
          			<td width="7%"><b>가입일</b></td>
          		</tr>
          		
          		<c:choose>
          			<c:when test="${ empty membersList }">
          				<tr>
          					<td colspan=5>
          						<b>등록된 회원이 없습니다</b>
          					</td>
          				</tr>
          			</c:when>
          			<c:when test="${ !empty membersList }">
          				<c:forEach var="mem" items="${membersList}">
          					<tr align="center">
          						<td>${mem.id}</td>
          						<td>${mem.pwd}</td>
          						<td>${mem.name}</td>
          						<td>${mem.email}</td>
          						<td>${mem.joinDate}</td>
          					</tr>
          				</c:forEach>
          			</c:when>
          		</c:choose>
          	</table>
          	<a href="${contextPath}/member/memberForm.do">
          		<p class="cls2">회원 가입하기</p>
          	</a>
          </body>
          </html>
          <%@ page language="java" contentType="text/html; charset=UTF-8"
              pageEncoding="UTF-8"
              isELIgnored="false"%>
          
          <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
          <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          <c:set var="contextPath" value="${pageContext.request.contextPath}" />
          
          <!DOCTYPE html>
          <html>
          	<head>
          		<meta charset="UTF-8">
          		<title>회원 가입창</title>
          	</head>
          	<body>
          		<form method="post" action="${contextPath}/member/addMember.do">
          			<h1 style="text-align:center">회원 가입창</h1>
          			<table align="center">
          				<tr>
          					<td width="200">
          						<p align="right">아이디</p>
          					</td>
          					<td width="400">
          						<input type="text" name="id">
          					</td>
          				</tr>
          				<tr>
          					<td width="200">
          						<p align="right">비밀번호</p>
          					</td>
          					<td width="400">
          						<input type="password" name="pwd">
          					</td>
          				</tr>
          				<tr>
          					<td width="200">
          						<p align="right">이름</p>
          					</td>
          					<td width="400">
          						<input type="text" name="name">
          					</td>
          				</tr>
          				<tr>
          					<td width="200">
          						<p align="right">이메일</p>
          					</td>
          					<td width="400">
          						<input type="text" name="email">
          					</td>
          				</tr>
          				<tr>
          					<td width="200">
          						<p>&nbsp;</p>
          					</td>
          					<td width="400">
          						<input type="submit" value="가입하기">
          						<input type="reset" value="다시입력">
          					</td>
          				</tr>
          			</table>
          		</form>
          	</body>
          </html>
    3. 수정 및 삭제 기능 구현
      • 수정 흐름
        1. 브라우저에서 URL 패턴으로 컨트롤러에 수정 요청과 수정할 정보 전송
        2. 컨트롤러가 전송된 정보를 가져온 후 테이블의 정보 수정
        3. 컨트롤러가 수정된 회원 목록창 전송
      • 삭제 흐름
        1. 브라우저에서 URL 패턴으로 컨트롤러에 삭제 요청과 삭제할 기본키 전송
        2. 컨트롤러는 request의 getPathInfo() 메서드로 요청명을 가져옴
        3. 회원 ID를 SQL문으로 전달하여 테이블에서 정보 삭제
      • 구현 예시
        • 더보기
          private void doHandle(HttpServletRequest request, HttpServletResponse response)	throws ServletException, IOException {
          		String nextPage = null;
          		request.setCharacterEncoding("utf-8");
          		response.setContentType("text/html;charset=utf-8");
          		String action = request.getPathInfo();
          		System.out.println("action:" + action);
          		if (action == null || action.equals("/listMembers.do")) {
          			List<MemberVO> membersList = memberDAO.listMembers();
          			request.setAttribute("membersList", membersList);
          			nextPage = "/test03/listMembers.jsp";
          		} else if (action.equals("/addMember.do")) {
          			String id = request.getParameter("id");
          			String pwd = request.getParameter("pwd");
          			String name = request.getParameter("name");
          			String email = request.getParameter("email");
          			MemberVO memberVO = new MemberVO(id, pwd, name, email);
          			memberDAO.addMember(memberVO);
          			request.setAttribute("msg", "addMember");
          			nextPage = "/member/listMembers.do";
          		} else if (action.equals("/memberForm.do")) {
          			nextPage = "/test03/memberForm.jsp";
          		}else if(action.equals("/modMemberForm.do")){
          		     String id=request.getParameter("id");
          		     MemberVO memInfo = memberDAO.findMember(id);
          		     request.setAttribute("memInfo", memInfo);
          		     nextPage="/test03/modMemberForm.jsp";
          		}else if(action.equals("/modMember.do")){
          		     String id=request.getParameter("id");
          		     String pwd=request.getParameter("pwd");
          		     String name= request.getParameter("name");
          	         String email= request.getParameter("email");
          		     MemberVO memberVO = new MemberVO(id, pwd, name, email);
          		     memberDAO.modMember(memberVO);
          		     request.setAttribute("msg", "modified");
          		     nextPage="/member/listMembers.do";
          		}else if(action.equals("/delMember.do")){
          		     String id=request.getParameter("id");
          		     memberDAO.delMember(id);
          		     request.setAttribute("msg", "deleted");
          		     nextPage="/member/listMembers.do";
          		}else {
          			List<MemberVO> membersList = memberDAO.listMembers();
          			request.setAttribute("membersList", membersList);
          			nextPage = "/test03/listMembers.jsp";
          		}
          		RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
          		dispatch.forward(request, response);
          	}
          public void modMember(MemberVO memberVO) {
          		String id = memberVO.getId();
          		String pwd = memberVO.getPwd();
          		String name = memberVO.getName();
          		String email = memberVO.getEmail();
          		try {
          			conn = dataFactory.getConnection();
          			String query = "update t_member set pwd=?,name=?,email=?  where id=?";
          			System.out.println(query);
          			pstmt = conn.prepareStatement(query);
          			pstmt.setString(1, pwd);
          			pstmt.setString(2, name);
          			pstmt.setString(3, email);
          			pstmt.setString(4, id);
          			pstmt.executeUpdate();
          			pstmt.close();
          			conn.close();
          		} catch (Exception e) {
          			e.printStackTrace();
          		}
          	}
          
          	public void delMember(String id) {
          		try {
          			conn = dataFactory.getConnection();
          			String query = "delete from t_member where id=?";
          			System.out.println(query);
          			pstmt = conn.prepareStatement(query);
          			pstmt.setString(1,id);
          			pstmt.executeUpdate();
          		} catch (Exception e) {
          			e.printStackTrace();
          		}
          	}
          <%@ page language="java" contentType="text/html; charset=UTF-8"
          	pageEncoding="UTF-8"
          	isELIgnored="false" 
          %>
          <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
          <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          <c:set var="contextPath" value="${pageContext.request.contextPath}"  />  
          <%
          request.setCharacterEncoding("UTF-8");
          %>    
          <html>
          <head>
          <c:choose>
             <c:when test='${msg=="addMember" }'>
                <script>
                   window.onload=function(){
                      alert("회원을 등록했습니다.");
                   }
                </script>
             </c:when>
             <c:when test='${msg=="modified" }'>
                <script>
                  window.onload=function(){
                    alert("회원 정보를 수정했습니다.");
                  }
                </script>
             </c:when>
             <c:when test= '${msg=="deleted" }'>
                <script>
                   window.onload=function(){
                      alert("회원 정보를 삭제했습니다.");
                  } 
                </script>
          </c:when>
          </c:choose>
          
             <meta  charset="UTF-8">
             <title>회원 정보 출력창</title>
          <style>
               .cls1 {
                 font-size:40px;
                 text-align:center;
               }
              
               .cls2 {
                 font-size:20px;
                 text-align:center;
               }
            </style>
            
          </head>
          <body>
           <p class="cls1">회원정보</p>
             <table align="center" border="1" >
                <tr align="center" bgcolor="lightgreen">
                   <td width="7%" ><b>아이디</b></td>
                   <td width="7%" ><b>비밀번호</b></td>
                   <td width="7%" ><b>이름</b></td>
                   <td width="7%"><b>이메일</b></td>
                   <td width="7%" ><b>가입일</b></td>
                   <td width="7%" ><b>수정</b></td>
          		 <td width="7%" ><b>삭제</b></td>
                   
             </tr>
          
          <c:choose>
              <c:when test="${empty  membersList}" >
                <tr>
                  <td colspan=5>
                    <b>등록된 회원이 없습니다.</b>
                 </td>  
                </tr>
             </c:when>  
             <c:when test="${!empty membersList}" >
                <c:forEach  var="mem" items="${membersList }" >
                  <tr align="center">
                    <td>${mem.id }</td>
                    <td>${mem.pwd }</td>
                    <td>${mem.name}</td>     
                    <td>${mem.email }</td>     
                    <td>${mem.joinDate}</td>
                    <td><a href="${contextPath}/member/modMemberForm.do?id=${mem.id }">수정</a></td>
          		   <td><a href="${contextPath}/member/delMember.do?id=${mem.id }">삭제</a></td>
                         
                 </tr>
               </c:forEach>
          </c:when>
          </c:choose>
             </table>  
           <a href="${contextPath}/member/memberForm.do"><p class="cls2">회원 가입하기</p></a>
          </body>
          </html>
          <%@ page language="java" contentType="text/html; charset=UTF-8"
                pageEncoding="UTF-8"
              isELIgnored="false" %>
          <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
          <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          <c:set var="contextPath" value="${pageContext.request.contextPath}"  />
          <%
            request.setCharacterEncoding("UTF-8");
          %> 
          <head>
          <meta charset="UTF-8">
          <title>회원 정보 수정창</title>
          <style>
            .cls1 {
               font-size:40px;
               text-align:center;
             }
          </style>
          </head>
          <body>
           <h1 class="cls1">회원 정보 수정창</h1>
          <form  method="post" action="${contextPath}/member/modMember.do?id=${memInfo.id}">
           <table align="center" >
             <tr>
               <td width="200"><p align="right" >아이디</td>
               <td width="400"><input   type="text" name="id" value="${memInfo.id}" disabled ></td>
               
             </tr>
           <tr>
               <td width="200"><p align="right" >비밀번호</td>
               <td width="400"><input   type="password" name="pwd" value="${memInfo.pwd}" >
               </td>
             </tr>
             <tr>
               <td width="200"><p align="right" >이름</td>
               <td width="400"><input   type="text" name="name" value="${memInfo.name}" ></td>
             </tr>
             <tr>
               <td width="200"><p align="right" >이메일</td>
               <td width="400"><input   type="text" name="email"  value="${memInfo.email}" ></td>
             </tr>
             <tr>
               <td width="200"><p align="right" >가입일</td>
               <td width="400"><input   type="text"  name="joinDate" value="${memInfo.joinDate }" disabled  ></td>
             </tr>
             <tr align="center" >
              <td colspan="2" width="400"><input type="submit" value="수정하기" >
                 <input type="reset" value="다시입력" > </td>
             </tr>
           </table>
          </form>
          </html>
          <%@ page language="java" contentType="text/html; charset=UTF-8"
          	pageEncoding="UTF-8"
          	isELIgnored="false" %>
          
          <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
          <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          <c:set var="contextPath" value="${pageContext.request.contextPath}"  />     
          <!DOCTYPE html>
          <html>
          <head>
             <meta charset="UTF-8">
             <title>회원 가입창</title>
          <body>
          <form method="post"   action="${contextPath}/member/addMember.do">
          <h1  style="text-align:center">회원 가입창</h1>
          <table  align="center">
              <tr>
                 <td width="200"><p align="right">아이디</td>
                 <td width="400"><input type="text" name="id"></td>
              </tr>
              <tr>
                  <td width="200"><p align="right">비밀번호</td>
                  <td width="400"><input type="password"  name="pwd"></td>
              </tr>
              <tr>
                  <td width="200"><p align="right">이름</td>
                  <td width="400"><p><input type="text"  name="name"></td>
              </tr>
              <tr>
                  <td width="200"><p align="right">이메일</td>
                  <td width="400"><p><input type="text"  name="email"></td>
              </tr>
              <tr>
                  <td width="200"><p>&nbsp;</p></td>
                  <td width="400">
          	       <input type="submit" value="가입하기">
          	       <input type="reset" value="다시입력">
                 </td>
              </tr>
          </table>
          </form>
          </body>
          </html>

답변형 게시판

  • 게시판 기능은 모든 웹 페이지의 기본 기능을 포함한다. 때문에 게시판을 만들 수 있다면 모든 웹 페이지를 쉽게 만들 수 있다
  • 실제 개발에서는 Service 클래스를 거쳐서 DAO 클래스의 기능을 수행하도록 구현한다
    • DAO는 DB에 접근하는 기능을 수행하고 Service는 실제 프로그램을 업무에 적용하는 사용자 입장에서 업무 단위, 즉 트랜잭션으로 작업을 수행한다
    • 트랜잭션 : 사용자 입장에서 하나의 논리적인 기능을 의미하고, 일반적으로 묶어서 처리하는 단위 기능을 뜻함
  • 실제 개발에서는 유지보수와 시스템의 확장성을 위해 Service 클래스의 메서드를 이용해 큰 기능을 단위 기능으로 나눈 후 Service 클래스의 각 메서드는 세부적인 기능을 하는 DAO의 SQL문들을 조합하여 자신의 기능을 구현한다
  • 구현 예시는 스프링 프레임워크로 적용하며 기록

'게시판만들기기록 > 스프링 프레임워크' 카테고리의 다른 글

스프링 JDBC  (0) 2021.10.07
스프링 MVC  (0) 2021.10.06
관점 지향 프로그래밍  (0) 2021.10.06
의존성 주입과 제어의 역전  (0) 2021.10.06
프레임워크란  (0) 2021.10.05
Comments