면접준비

스프링은 어떻게 동작할까?

소금_msg 2022. 12. 6. 18:19

Spring이란?

경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며

스프링으로부터 필요한 객체를 얻어올 수 있다.

 

스프링은 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.

스프링은 제어의 역행(IoC : Inversion of Control)을 지원한다. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.

 

스프링은 의존성 주입(DI : Dependency Injection)을 지원한다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

 

스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원한다. 따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할수있다.

 

 

Spring MVC의 구성 요소

DispatherServlet

 - Front Controller를 담당

+프론트 컨트롤러란?

(MVC패턴에서 입구를 하나로 만든 형태로

프론트 컨트롤러는 서블릿 하나로 클라이언트의 요청을 받는다.

공통처리가 가능해서 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다.

프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출한다.

뷰에서 들어오는 모든 요청을 담당하여 웹 애플리케이션을 실행하는 모든 요청을 일괄적으로 처리할 수 있음)

 

Servlet/JSP에서 사용자 요청이 발생하면 이 요청 정보를 해석하고, 개발자가 만든 코드를 동작시키는 첫 번째 서블릿

 

HandlerMapping

- 클라이언트의 요청을 바탕을 어떤 Handler(Controller 메소드)를 실행할지 결정

 

Model

- Controller에서 View로 넘겨줄 객체가 저장되는 곳

key-value pair

 

ViewResolver

view name을 바탕으로 View객체를 결정

 

View

뷰에 화면 표시 처리를 의뢰

 

Controller

클라이언트 요청에 맞는 presentation layer의 처리를 실행해야 한다.

 

뷰(JSP,THYmeleaf...)

클라이언트에게 화면을 표시한다.

 

 

Spring의 동작 원리

1. Dispatcher Servlet > 2. Handler Mapping > 3. Handler Adapter > 4. Controller > 5. view name > 6. View Resolver > 7. View > 8. Response

1. DispatcherServlet이 브라우저로부터 요청을 받는다.

2. DispatcherServlet은 요청된 URL을 HandlerMapping 객체에 넘기고, 호출해야 할 Controller 메소드(핸들러) 정보를 얻는다.

3. DispatcherServlet이 HandlerAdapter 객체를 가져온다.

4. HandlerAdapter 객체의 메소드를 실행한다.

(정확하게는 HandlerMapping은 DispatcherServlet로부터 전달된 URL을 바탕으로 HandlerAdapter 객체를 포함하는 HandlerExecutionChain 객체를 생성하며, 이후 DispatcherServlet HandlerExecutionChain 객체로부터 HandlerAdapter 객체를 가져와서 해당 메소드를 실행하게 된다.)

5. Controller 객체는 비즈니스 로직을 처리하고, 그 결과를 바탕으로 뷰에 전달할 객체를 Model 객체에 저장한다.

6. DispatcherServlet에게 view name을 리턴한다.

7. DispatcherServlet은 view name을 View Resolver에게 전달하여 View 객체를 얻는다.

8. DispatcherServlet은 View 객체에 화면 표시를 의뢰한다.

9. View 객체는 해당하는 뷰를 호출하며 뷰는 Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리한다.

 

실질적으로 Controller를 실행하는 것은 Handler Adapter이다.

View Resolver는 "전략 객체"

View Resolver에게 전달되는 정보는 view name뿐만이 아니라, header정보(accept 등)도 전달 된다.

header 정보 내의 Accept는 기본적으로는 HTML에 따라서는 JSON, XML인 경우도 있다.

View Resolver는 전달된 정보를 바탕으로 사용자에게 보여줄 view가 무엇인지를 결정한다.

JSP의 경우 JstlView 객체가 생성된다. JstlView 객체가 "ABC.jsp"에 포워딩하여 결과를 보여준다.(JSP 객체를 생성하는 것이 아니다.)

 

 

 

참고블로그

https://yenbook.tistory.com/6

 

[Spring MVC] Spring의 동작 원리

Spring 이란? 경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다. 스프링은 Plain Old Java Object

yenbook.tistory.com