Spring 이란?
- 경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
- 스프링은 Plain Old Java Object 방식의 프레임워크이다. 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.
- 스프링은 제어의 역행(IoC : Inversion of Control)을 지원한다. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
- 스프링은 의존성 주입(DI : Dependency Injection)을 지원한다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
- 스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원한다. 따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.
Spring MVC의 구성 요소
DispatcherServlet
- Front Controller를 담당
= Servlet/JSP에서 사용자 요청이 발생하면 이 요청 정보를 해석하고, 개발자가 만든 코드를 동작시키는 첫 번째 서블릿
= 모든 HTTP 요청을 받아들여서 다른 객체들 사이의 흐름을 제어
- Spring MVC 프로젝트 설정에서 가장먼저 해야하는 일은
DispatcherServlet 클래스를 Spring MVC에서 재정의한 클래스로 설정하는 일입니다.
HandlerMapping
- 클라이언트의 요청을 바탕으로 어떤 Handler(Controller 메소드)를 실행할지 결정
Model
- Controller에서 View로 넘겨줄 객체가 저장되는 곳
- key(String)-value pair
ViewResolver
- view name을 바탕으로 View 객체를 결정
View
- 뷰에 화면 표시 처리를 의뢰
Controller
- 클라이언트 요청에 맞는 presentation layer의 처리를 실행해야 한다.
뷰(ex. JSP, Thymeleaf)
- 클라이언트에게 화면을 표시한다.
Spring의 동작 원리
1. DispatcherServlet이 브라우저로부터 요청을 받는다.
2. DispatcherServlet은 요청된 URL을 HandlerMapping 객체에 넘기고, 호출해야 할 Controller 메소드(핸들러) 정보를 얻는다.
3. DispatcherServlet이 HandlerAdapter 객체를 가져온다.
4. HandlerAdapter 객체의 메소드를 실행한다.
※ 보다 정확하게 표현한다면, HandlerMapping은 DispatcherServlet로부터 전달된 URL을 바탕으로 HandlerAdapter 객체를 포함하는 HandlerExecutionChain 객체를 생성하며, 이후 DispatcherServlet이 HandlerExecutionChain 객체로부터 HandlerAdapter 객체를 가져와서 해당 메소드를 실행하게 된다.
5. Controller 객체는 비즈니스 로직을 처리하고, 그 결과를 바탕으로 뷰(ex. JSP)에 전달할 객체를 Model 객체에 저장한다. DispatcherServlet에게 view name을 리턴한다.
6. DispatcherServlet은 view name을 View Resolver에게 전달하여 View 객체를 얻는다.
7. DispatcherServlet은 View 객체에 화면 표시를 의뢰한다.
8. View 객체는 해당하는 뷰(ex. JSP, Thymeleaf)를 호출하며, 뷰는 Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리한다.
- 실질적으로 Controller를 실행하는 것은 Handler Adapter이다.
- View Resolver는 "전략 객체"
View Resolver에게 전달되는 정보는 view name뿐만이 아니라, header 정보(accept 등)도 전달된다 - header 정보 내의 Accept는 기본적으로는 HTML에 따라서는 JSON, XML인 경우도 있다.
- View Resolver는 전달된 정보를 바탕으로 사용자에게 보여줄 view가 무엇인지를 결정한다.
- JSP의 경우 JstlView 객체가 생성된다. JstlView 객체가 "abcd.jsp"에 포워딩하여 결과를 보여준다(JSP 객체를 생성하는 것이 아니다).
'SPRING' 카테고리의 다른 글
[SPRING] 객체로 파라미터 주입 받기 (0) | 2021.07.19 |
---|---|
[SPRING] 파라미터 추출하기 (0) | 2021.07.19 |
[SPRING] 요청 방식 (0) | 2021.07.19 |
[SPRING] URL MAPPING (0) | 2021.07.19 |
[SPRING] Spring 프로젝트 세팅하기 (0) | 2021.07.19 |
댓글