일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 기술면접
- 백준
- 서블릿
- JSP
- 다이나믹 프로그래밍
- Spring MVC
- response
- controller
- 알고리즘
- DP
- was
- Service
- Spring
- 코딩테스트
- 자바스크립트
- DI
- 부스터2기
- 네이버
- servlet
- IOC
- 면접
- 다이나믹프로그래밍
- Spring Framework
- 부스트코스
- Callback
- 웹
- Promise
- request
- 파이썬
- 비동기
- Today
- Total
Sh개발일기
Spring MVC란 본문
학습 목표
- MVC Model 1과 MVC Model 2 구조의 차이점에 대해 이해합니다.
- 발전된 형태의 MVC Model 2 구조에 대해 이해합니다.
핵심 개념
- MVC Model 1
- MVC Model 2
- Spring MVC
MVC란
Model-View-Controller의 약자로, 데스크탑 어플리케이션용으로 고안된 개념이다.
- Model - View가 렌더링 하는데 필요한 데이터이다. 예를 들면 사용자가 요청한 상품 목록이나, 주문 내역이 이에 해당한다.
- View - 실제로 보이는 부분을 의미하며, 모델을 사용해 렌더링을 한다. JSP, JSF, PDF, XML 등으로 결과를 표현한다.
- Controller - 사용자의 액션에 응답하는 컴포넌트다. 모델을 업데이트 하고, 다른 액션을 수행한다.
MVC모델은 동작 아키텍처에 따라 Model 1과 Model2로 나뉠 수 있다.
MVC Model 1
MVC Model 1의 아키텍처는 위와 같다. 그림에서 볼 수 있듯, 브라우저가 요청을 보내면 각각의 JSP Page가 요청을 받아들이고 자바빈 등을 이용하여 로직을 수행하고 결과를 브라우저에 보내준다.
이러한 방식은 요청(Request)의 수 만큼 JSP가 필요하게 되고 JSP에 Java, HTML등 여러 종류의 코드가 섞여 있어서 유지/보수가 어렵다는 단점이 있다. 이러한 맥락에서 MVC Model 2가 등장하게 된다.
MVC Model 2
Model 2에서는 요청을 Servlet으로 받고, 자바 빈을 이용한 결과를 JSP를 이용해 브라우저에게 보여주게 된다. 위의 아키텍처에서 Servlet은 요청과 데이터를 처리하는 Controller의 역할을 하게 되고, JSP는 결과를 보여주는 View의 역할을 하게 된다. 즉, Logic을 담당하는 부분과 View를 담당하는 부분으로 나뉘게 되는 것이다.
Spring MVC
Spring에서 제공하는 MVC Model은 Model 2를 발전한 형태를 가지고 있다.
위의 아키텍처에서 보듯 하나의 프론트 컨트롤러 서블릿이 모든 요청을 처리하게 된다. 요청을 실제로 처리하는 작업은 컨트롤러 클래스에 위임하여 처리하며, 위와 같은 아키텍처를 가지고 있는 모델이 Spring Web Model에서 제공하는 Spring MVC의 모습이다.
웹 어플리케이션에 많은 View와 Controller가 존재하게 되면 각각의 View와 Controller을 Server에서 일괄적으로 처리하기 어렵다. 간단한 예로, 위와 같이 프론트 컨트롤러를 만들지 않는다면 하나의 요청당 하나의 url을 가진 Servlet을 만들어야 하며 유지/보수와 가독성, 개발의 효율성등이 떨어지게 된다.
위와 같은 아키텍처는 하나의 프론트 컨트롤러 서블릿을 사용하여 이러한 문제점을 해결할 수 있게 된다.
'BoostCourse' 카테고리의 다른 글
레이어드 아키텍쳐(Layered Architecture) (0) | 2020.03.12 |
---|---|
Spring MVC 구성요소 (0) | 2020.03.12 |
Spring JDBC (0) | 2020.03.09 |
XML과 Java Config를 이용한 설정 (0) | 2020.03.09 |
Spring IoC/DI 컨테이너 (0) | 2020.03.06 |