MVC패턴은 무엇인가, MVC1과 MVC2의 차이점
오늘은 이전부터 기록해두고 싶었던 MVC1과 MVC2에 차이점에 대해 포스팅하려고 한다.
개발자로서 반드시 알아야 할 부분 중에 하나라고 생각하여 정리를 해두고 수시로 익힐 예정이다.
💡 MVC 패턴이란?
MVC 패턴은 소프트웨어 공학에서 사용하는 디자인 패턴 중 하나로 Model, View, Controller의 앞 글짜를 따서 MVC 디자인패턴이라고 한다.
- Model : 어플리케이션의 정보나 데이터, DB등을 말한다. (백그라운드에서 동작하며, 사용자가 원하는 데이터나 정보 제공)
- View : 사용자에게 보여지는 화면, UI를 말한다. 모델로부터 정보를 받아 표출한다.
- Controller : 데이터와 비즈니스 로직 사이의 상호 동작을 관리한다. 즉, 모델과 뷰를 통제하며 MVC 패턴에서 View와 Model이 직접 상호 통신을 하지 않도록 관리한다.
이처럼 사용자는 얻고자 하는 정보나 기능을 Controller에게 요청하고,
Controller는 사용자의 요청을 수신받아 그에 맞는 비즈니스 로직을 수행하여(필요에 따라 모델을 호출하여 데이터 요청),
요청을 처리 이후 View(화면)를 통해 사용자가 원하는 정보를 표출한다.
이러한 MVC패턴은 크게 MVC 모델1 패턴과 스프링이 채택한 MVC 모델2 패턴으로 나누어 볼 수 있다.
💡 MVC1
MVC모델 1 패턴의 경우는 View와 Controller를 모두 Jsp가 담당하는 형태이다. (뷰와 컨트롤러의 역할이 합쳐져 있음)
이처럼 Jsp가 뷰와 컨트롤러 역할을 모두 수행하게 되면, Jsp에 Java코드와 Html, css등의 코드가 섞이게 되고, 소스가 복잡해지고 가독성이 안좋아져 유지보수 차원에서 힘들어지게 된다.
Jsp하나로 유저의 요청을 받고 응답을 처리하기 때문에 구현난이도는 쉬운편이다. 단순한 프로젝트에서는 괜찮지만 복잡해지고 커질수록 단점이 생기게 되는 패턴이다.
장점 : 페이지 흐름이 단순하고 구조가 간단하여 중소형 프로젝트에 적합하다.
단점 : 유지보수가 어렵다(재사용성 및 가독성 떨어짐), 개발자와 디자이너 역할 분담이 어려워 원할한 의사소통이 필수적이다.
💡 MVC2
MVC모델 2 패턴은 모델1에서 유지보수가 힘들다는 단점을 보완하기 위해 나온 모델이며, 널리 표준으로 사용되는 패턴이다.
기존에 View와 Controller의 역할을 모두 수행하던 Jsp는 뷰의 역할만 하게 되고, 대산 Controller의 역할을 Servlet(서블릿)이 수행한다.
모델2는 사용자의 요청을 하나의 컨트롤러(Servlet)가 먼저 받는다. 서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 Jsp 페이지로 포워딩한다.
이처럼 Model, View, Controller의 역할이 분리되어 있어 수정해야될 부분이 있다면, 그것만 꺼내어 수정하면 된다. 따라서 유지보수에 있어도 큰 이점을 가진다.
💡 Spring Framework의 MVC 모델2
구성요소 | 설명 |
DispatcherServlet | 클라이언트의 요청을 전달받아 요청에 맞는 컨트롤러가 리턴한 결과값을 View에 전달 |
HandlerMapping | 클라이언트의 요청(URL)을 어떤 컨트롤러가 처리할지 결정 |
Controller | 클라이언트의 요청을 처리한 뒤, 결과를 DispatcherServlet에 전달 |
ModelAndView | 컨트롤러가 처리한 결과 및 뷰 선택에 필요한 정보를 담음 |
ViewResolver | 컨트롤러의 처리 결과를 생성할 뷰 결정 |
View | 컨트롤러의 처리 결과 화면을 생성 |
'Programming > Spring' 카테고리의 다른 글
DTO, VO, Entity - 개념 정리 및 차이점 (0) | 2023.03.15 |
---|---|
[Spring] WebFlux란 무엇인가? - 개념(특징), MVC와 비교, 사용 이유 (0) | 2022.12.26 |
[Spring] Mybatis - foreach 사용법 및 예제 / 동적 반복 sql 처리 (0) | 2022.06.26 |
[JPA] findBy를 이용한 쿼리 메소드 작성하기(조건처리, like구문 처리) (0) | 2022.02.02 |
[Spring MVC] Dispatcher Servlet 이란? -(FrontController패턴 포함) (2) | 2021.06.15 |