1. Spring Framework란?
서버 어플리케이션 개발 시, 코드 품질 및 개발 속도를 상향 평준화시키기 위해 고안된 프레임워크이다.
2. Spring의 특징
POJO(Plain Old Java Object)
POJO 특정 객체에 종속적이지 않은 순수한 객체를 의미한다.
왜 Spring은 POJO객체를 지향하는 것 일까?
그것은 객체가 특정 객체에 종속적이게 되면, 확장성이 매우 떨어지기 때문이다.
DI(Dependency Injection) - 의존성 주입
Framework에 의해 객체에 속성값을 주입하는 방식으로, 모듈간의 결합도를 낮추어 유연한 코드를 작성하게 해준다.
AOP(Aspect-Orented Programming) - 관심지향 프로그래밍
프로그램 로직 중에 반복되는 코드를 횡으로 분리하여 중복된 코드를 줄여주고 핵심 로직에 대한 가독성을 높여준다. 반복되는 핵심 로직은 Logging, Securirty, Transaction 등이 있고, 해당 로직을 모듈화하여, 필요한 로직에 끼워 넣을 수 있다.
3. Spring MVC란?
Model, View, Controller를 분리한 디자인 패턴이다.
Model
View가 데이터를 표현하는데 필요한 데이터이다. 예를 들어서 게시글 리스트, 게시글 상세 등, 화면에 출력하기 위한 데이터를 의미한다.
View
Model Data의 렌더링을 담당하며, 렌더링된 데이터를 포함한 HTML을 생성한다.
JSP, Thymeleaf, Freemaker, Mustache 등 여러 Template Engine이 있다.
Controller
View와 Model 사이의 연결을 담당한다.
4. Spring MVC의 동작
DispatcherServlet
Spring Framework가 제공해주는 Servlet클래스이다. FrontController라고도 하고 사용자의 URL 요청을 수행할 Controller를 찾기 위해 URL 정보를 HandlerMapping로 전달한다.
HandlerMapping
사용자의 요청을 처리할 Controller를 찾는다. (Controller URL Mapping)
Controller와 URL을 연결할 수 있는 Mapping Table을 가지고있다.
Controller 선언 시 함께 선언하는 @RequestMapping("/url")통해 매핑이 가능하다.
Controller
사용자 요청에 대한 처리를 담당한다.
DB에 대한 처리 및 파일 처리 등, 다양한 서비스 로직을 호출하여 실행한다.
Servlet이 수행했던 역할과 같다.
@Controller를 통해 선언가능하다.
ViewResolver
Controller가 반환한 View Name에 Prefix, suffix를 적용하여 View Object를 반환한다.
4. Spring MVC 동작 상세
사용자가 브라우저를 통해 특정 URL로 서비스를 요청한다.
2) DispatcherServlet이 요청을 가로채고, Controller를 찾기 위해 HandlerMapping에 요청 정보를 전달한다.
3) HandlerMapping을 통해 Controller를 찾고 DispatcherServlet에 반환한다.
4) Controller를 실행해 사용자가 요청한 처리를 수행 후, Model과 View를 DispatcherServlet에 반환한다.
5) DispatcherServlet은 View Name을 ViewResolver로 전달하여 View를 찾고 Model 값을 이용해 렌더링하여 사용자에게 반환한다.
참조 :
engkimbs.tistory.com/601
gmlwjd9405.github.io/2018/12/20/spring-mvc-framework.html
'IT > Spring' 카테고리의 다른 글
[Spring Boot] SpringBootServletInitalizer를 상속하는 이유 (0) | 2020.01.07 |
---|---|
[Spring Boot] @SpringBootApplication 이란? (0) | 2020.01.07 |
[Spring Boot] Spring Boot 사용 및 Thymeleaf 연동 방법 (0) | 2020.01.06 |
[Spring Boot] Logback 설정 방법 (0) | 2020.01.03 |
[Spring Boot] MariaDB 연동 및 Mybatis 사용하기 (0) | 2020.01.02 |