MVC 패턴

  • 애플리케이션을 Model-View-Controller 로 구분하여 설계하는 디자인 패턴
  • 역할에 맞게 모듈을 분리함으로서 유지보수 및 확장이 용이하다.

 

MVC 패턴 사용 이전과 이후의 비교

MVC 패턴 사용 이전

@WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save")
public class MemberSaveServlet extends HttpServlet {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        int age = Integer.parseInt(req.getParameter("age"));

        Member member = new Member(username, age);
        memberRepository.save(member);

        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");

        PrintWriter writer = resp.getWriter();
        writer.write("<html>\n" +
                "<head>\n" +
                "    <meta charset=\"UTF-8\">\n" +
                "</head>\n" +
                "<body>\n" +
                "성공\n" +
                "<ul>\n" +
                "    <li>id="+member.getId()+"</li>\n" +
                "    <li>username="+member.getUsername()+"</li>\n" +
                "    <li>age="+member.getAge()+"</li>\n" +
                "</ul>\n" +
                "<a href=\"/index.html\">메인</a>\n" +
                "</body>\n" +
                "</html>");
    }
}
  • 컨트롤러에서 조회한 데이터를 통해 View 를 만드를 로직까지 포함하고 있다. 하나의 모듈에서 여러 역할을 수행하게되면 그만큼 코드가 많아지고 코드를 변경해야할 때 변경 부분을 찾기가 힘들어지는 등 유지보수 및 관리가 힘들어진다.

 

MVC 패턴 사용 이후

/*
	비즈니스 로직을 실행하는 컨트롤러의 역할을 담당하는 서블릿
*/
@WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save")
public class MvcMemberSaveServlet extends HttpServlet {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        int age = Integer.parseInt(req.getParameter("age"));

        Member member = new Member(username, age);
        memberRepository.save(member);

        // Model에 데이터를 보관
        req.setAttribute("member", member);

        String viewPath = "/WEB-INF/view/save-result.jsp";
        RequestDispatcher dispatcher = req.getRequestDispatcher(viewPath);
        dispatcher.forward(req, resp);
    }
}


/*
	View 의 역할을 담당하는 JSP
*/
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
성공
<ul>
    <li>id=${member.id}</li>
    <li>username=${member.username}</li>
    <li>age=${member.age}</li>
</ul>
<a href="/index.html">메인</a>
</body>
</html>
  • MVC 패턴을 통해 컨트롤러와 View 의 로직을 분리하면 코드 변경시 변경 사항을 담당하는 모듈의 코드만 변경하면 된다. 즉, 변경 포인트가 명확해진다.

'Spring > Spring MVC' 카테고리의 다른 글

스프링 MVC 구조 & DispatcherServlet  (0) 2022.08.21
Servlet & Servlet Container  (0) 2022.08.03

+ Recent posts