MVC 패턴이란?
사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다.
소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다.
이러한 "관심사 분리" 는 더나은 업무의 분리와 향상된 관리를 제공합니다.
컨트롤러 (Controller)
HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다.
모델 (Model)
뷰에 출력할 데이터를 담아둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있다.
뷰 (View)
모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다. 여기서는 HTML을 생성하는 부분을 말한다.
회원 정보를 저장하는 서블릿 코드
@WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save")
public class MvcMemberSaveServlet extends HttpServlet {
MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//서비스 기능
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
memberRepository.save(member);
//Model에 데이터를 보낸다.
request.setAttribute("member", member);
//컨트롤러를 통과
String viewPath = "/WEB-INF/views/save-result.jsp";
//View 로직 실행
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
}
}
회원 정보 저장 성공을 보여주는 JSP 코드
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
</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>
- /servlet-mvc/members/save 호출이 들어온다.
- request로 부터 username과 age 정보를 추출해서 memberRepository에 저장한다. (memberRepository.save)
- Model에 데이터를 전달한다. (request.setAttribute)
- View 로직을 실행한다. (dispatcher.forward)
- View에서 Model로 부터 데이터를 참조한다. (${member})
- HTML 결과를 웹 브라우저에 응답한다.
MVC 패턴의 한계 - MVC 컨트롤러의 단점
포워드 와 ViewPath에 중복
매번 dispatcher.forward와 viewPath 부분의 코드가 항상 중복 호출되어야 한다.
사용하지 않는 코드 - 테스트 케이스 작성도 어렵다
사용하지 않는 코드들도 사용해야 할 때가 많다. 이는 테스트 케이스 작성도 어렵게 한다.
*** 공통 처리가 어렵다
기능이 복잡해지면서 컨트롤러에서 공통으로 처리해야 하는 부분이 많아진다.
이런 문제는 프론트 컨트롤러 패턴을 사용해서 해결할 수 있다.
출처
[인프런] 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의
웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -
www.inflearn.com
MVC 패턴
https://developer.mozilla.org/ko/docs/Glossary/MVC
MVC - 용어 사전 | MDN
MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고
developer.mozilla.org
'WEB > Spring 인강' 카테고리의 다른 글
[Spring] 스프링 공부 #22 (0) | 2022.04.05 |
---|---|
[Spring] 스프링 공부 #21 (0) | 2022.04.05 |
[Spring] 스프링 공부 #19 (0) | 2022.03.31 |
[Spring] 스프링 공부 #18 (0) | 2022.03.30 |
[Spring] 스프링 공부 #17 (0) | 2022.03.29 |