순간을 기록으로

[스프링] Spring MVC 동작 방식과 구성요소 본문

Development/Spring

[스프링] Spring MVC 동작 방식과 구성요소

luminous13 2022. 6. 24. 00:01

 

안녕하세요. 루미너스입니다.

오늘은 Spring MVC 동작 방식과 구성요소에 대해 배워보겠습니다.

개요

우선 간단히 Spring MVC에 대해 알아보겠습니다.

Spring MVC는 클라이언트의 요청을 편리하게 처리해주는 프레임워크(모듈, 프로젝트)입니다.

전체 이름은 Spring Web MVC이지만 일반적으로 Spring MVC라고 불립니다.

 

Spring MVC는 서블릿 기반으로 동작합니다. 

위키백과에 보면 서블릿(Servlet)이란 웹페이지를 동적으로 생성하는 서버측 프로그램을 말합니다. 

더 구체적으로 말하자면 서블릿은 웹서버의 성능향상을 위해 사용되는 자바 클래스의 일종입니다. 

 

서블릿은 JSP와 유사합니다. 하지만 차이가 있습니다.

서블릿은 자바코드 안에 HTML을 포함합니다. 반면에 JSP는 HTML안에 자바 코드를 포함합니다.

 

Spring MVC 동작 방식과 구성요소

다음은 클라이언트가 요청을 서버에 보냈을 때 Spring MVC가 내부적으로 어떻게 요청을 처리하는 보여주는 그림입니다.

번호의 흐름을 설명하자면 다음과 같습니다.

 

  1. 클라이언트가 요청을 서버에 전송하면, DispatcherServlet이라는 클래스에게 요청이 전달됩니다.
  2. DispatcherServlet은 클라이언트 요청을 처리할 Controller에 대한 검색을 HandlerMapping 인터페이스에게 요청합니다.
  3. HandlerMapping은 클라이언트 요청에 해당하는 컨트롤러를 찾고 해당 컨트롤러 정보를 다시 DispatcherServlet에게 응답합니다.
    • Controller 정보는해당 Controller 안에 있는 Handler 메서드 정보도 가지고 있습니다. 
    • Handler 메서드란 Controller 클래스 안에 구현된 요청을 처리해주는 메서드입니다.
  4. 요청을 처리할 Controller를 찾았으니 이제 클라이언트 요청을 처리할 Handler 메서드를 찾아서 호출해야 합니다.  DispatcherServlet은 Handler 메서드를 직접 호출하지 않고 HandlerAdapter에게 Handler 메서드 호출 책임을 넘깁니다.
  5. HandlerAdapter은 DispatcherServlet의 요청과 더불어 Controller 정보를 가지고 해당 Controller의 Handler 메서드를 호출합니다.
  6. Controller의 Handler 메서드는 비즈니스 로직을 처리한 후 리턴받은 Model 데이터를 HandlerAdapter에게 반환합니다.
  7. HandlerAdapter은 반환받은 Model 데이터와 View 이름을 다시 DispatcherServlet에게 반환합니다.
  8. DispatcherServlet은 반환받은 2개의 데이터 중 View 이름을 가지고 ViewResolver에게 해당 View를 달라고 요청합니다.
  9. ViewResolver는 View 정보에 해당하는 View를 찾아서 DispatcherServlet에게 반환합니다.
  10. DispatcherServlet은 ViewResolver에게 받은 View 객체에게 Model 데이터를 넘겨주면서 클라이언트에게 전달할 응답 데이터 생성을 요청합니다.
  11. View는 응답 데이터를 생성해서 다시 DispatcherServlet에게 반환합니다.
  12. DitpatcherServlet은 View로부터 받은 응답데이터를 마지막으로 클라이언트에게 응답합니다.

 

DispatcherServlet의 역할

  • DIspatcherServlet은 바빠보이지만 직접적으로 요청을 처리하지 않고 다른 구성요소에게 요청을 위임(Delegate)합니다.
  • 이처럼 애플리케이션 가장 앞단 배치되어 다른 구성요소들과 상호작용하면서 클라이언트 요청을 처리하는 패턴을 Front Controller Pattern이라고 합니다
Comments