스프링 MVC(3)

2 minute read

MVC

  • MVC 패턴의 등장 : 비즈니스 로직은 서블릿 처럼 다른곳에서 처리하고, JSP는 목적에 맞게 HTML로 화면(View)을 그리는 일에 집중하도록 하자. 과거 개발자들도 모두 비슷한 고민이 있었고, 그래서 MVC 패턴이 등장했다.
  • 만약 하나의 서블릿이나 jsp로 모든 로직과 렌더링을 처리하게 된다면?
    • 너무 많은 역할을 하므로 유지보수가 어려워 진다.
    • 비즈니스 로직과 전혀 관계 없는 UI를 수정한다 해도 로직을 수정해야 하는 일이 발생할 수 있다.
    • 병렬 처리 불가 : view 작업이 완료될 때 까지 백엔드가 작업을 못할 수 있다.

MVC의 개요

GitHub Logo

  • mvc모델 1로 View와 Controller를 모두 JSP가 담당하는 형태
  • 유지보수가 좋지 않음

GitHub Logo

  • MVC는 Model, View, Controller의 약자이다
    • Controller : HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다.
    • Model : 뷰에 출력할 데이터를 담아둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중
    • View : 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중

참고

  • Redirect : 실제 클라이언트에 응답이 나갔다가 클라이언트가 다시 요청을 하기 때문에, 클라이언트가 인지할 수 있고, 실제로 url도 변경이 된다.
  • Forward : 서버 내부에서 일어나는 호출이기 때문에 클라이언트는 전혀 인지하지 못한다.

MVC패턴의 한계

  1. 중복되는 코드가 많다(forward)
  2. HttpServletResponse 같이 사용하지 않는 코드도 작성할 때가 있다.
  3. 공통으로 처리가 어렵다 -> 기능이 복잡해질 수 록 컨트롤러에서 공통으로 처리해야 하는 부분이 점점 더 많이 증가할 것이다. 단순히 공통 기능을 메서드로 뽑으면 될 것 같지만, 결과적으로 해당 메서드를 항상 호출해야 하고, 실수로 호출하지 않으면 문제가 될 것이다. 그리고 호출하는 것 자체도 중복이다.

MVC 모델을 적용한 jsp활용 예시

회원 목록 조회 - 컨트롤러

@WebServlet(name = "mvcMemberListServlet", urlPatterns = "/servlet-mvc/
members")
public class MvcMemberListServlet extends HttpServlet {
    private MemberRepository memberRepository = MemberRepository.getInstance();
 @Override
 protected void service(HttpServletRequest request, HttpServletResponse 
response)throws ServletException, IOException {
    System.out.println("MvcMemberListServlet.service");
    List<Member> members = memberRepository.findAll();
    request.setAttribute("members", members);
    String viewPath = "/WEB-INF/views/members.jsp";
    RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
    dispatcher.forward(request, response);
 }
}

회원 목록 조회 - 뷰

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
    <a href="/index.html">메인</a>
<table>
    <thead>
        <th>id</th>
        <th>username</th>
        <th>age</th>
    </thead>
 <tbody>
    <c:forEach var="item" items="${members}">
        <tr>
            <td>${item.id}</td>
            <td>${item.username}</td>
            <td>${item.age}</td>
        </tr>
    </c:forEach>
 </tbody>
</table>
</body>
</html>

JSP 기본 문법

  1. <% %> : 실행될 자바 코드 입력
  2. <%! %> : 변수, 메서드 등을 선언할 때 이용하는 태그
  3. <%= %> : 변수, 메서드 등의 실행에 관한 부분을 맡아 그 결과를 출력
    <%! String name = "홍길동"; %>
	<%! public int plus(int a, int b){ return a+b; } %>
	
	<!-- 스크립트릿( 변수선언, 메서드 등에 대한 실행 가능 ) -->
	<% int a = 5; %>
	<% int b = 5; %>
	
	<% plus(a,b); %>
    <%= a>

출처 - 김영한의 스프링 MVC 1편

Leave a comment