Spring MVC

호돌·2021년 1월 9일
0

BackEnd

목록 보기
2/25

🌿스프링 MVC

  • 자바 웹 어플리케이션을 개발할 때 가장 많이 쓰이는 웹 프레임워크이다.
  • MVC는 Model-View-Controller 의 약자롤, 기본 시스템 모듈을 MVC로 나누어 구현되어있다.
    • Model : 뷰를 생성하는 데 사용할 데이터
    • View : 모델을 사용해 화면을 렌더링
    • Controller : 흐름을 제어함. 브라우저 요청을 받아 모델을 만들고 뷰로 리다이렉션 한다.
  • Web 서버에 특화되어 만들어진 모듈로서 다음과 같은 주요 기능을 포함한다.
    • 다양한 범위의 파라미터와 반환값을 가지는 유연한 컨트롤러 메서드 정의.
    • 도메인 POJO 객체의 폼 백엔드 객체로의 재사용.
    • 모델은 키-값 쌍과 함께 해시 맵을 사용, 또한 여러 뷰 기술과의 통합을 허용함.
    • 바인딩이 유연하다. 타입 불일치 발생시 런타임 에러 이전에 밸리데이션 에러(400)로 해결가능.
    • 단위 테스트 컨트롤러에 MockMvc 프레임워크 포함.
  • 스프링 부트를 사용하면 자바 애플리케이션이 내장 톰캣을 만들고 그안에 DispatcherServlet을 등록한다.

🔨Spring MVC의 기본 동작흐름

Spring MVC는 MVC Model2의 발전된 형태로 구성되어 있다.

  • Database를 제외한 파란색 부분은 모두 Spring MVC가 제공한다.
  • 보라색 부분은 개발자가 구현해야하며, 녹색 부분인 View는 Spring이 제공하는 부분도 있고, 개발자가 구현해야하는 부분도 있다.

💡 Dispatcher Servlet

클라이언트의 요청을 받아 컨트롤러에게 전달, 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성하도록 한다.

💡 Handler Mapping

클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정한다.

💡 Handler Adapter

DispatcherServlet의 처리 요청을 변환해서 컨트롤러에게 전달, 그 응답결과를 DispatcherServlet이 요구하는 형식으로 변환한다.

💡 Controller

클라이언트의 요청을 처리한 뒤, 결과를 리턴한다.

💡 ModelAndView

컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다.

💡 ViewResolver

컨르롤러의 처리 결과를 보여줄 뷰를 결정한다.

💡 View

컨트롤러의 처리 결과 화면을 생성한다. JSP 템플릿 파일등을 이용한다.

동작 흐름

  1. 클라이언트의 모든 요청은 Dispatcher Servlet이라는 Servlet Class가 받는다.

  2. Dispatcher Servlet은 요청 URL을 Handler Mapping에게 전달하고, 현재 요청에 알맞은 Controller와 Method에 대한 정보를 알아낸다. 어떤 요청에 대한 어떤 Controller가 동작할지를 xml 파일이나 Java파일의 어노테이션으로 설정한다. 또한 Spring으로 만들어진 Web Application이 실행될 떄, Handler Mapping 객체들이 생성되면서 이런 정보들을 관리한다.

  3. Dispatcher Servlet은 HandlerAdapter에게 요청 처리를 위임한다.

  4. Handler Adapter는 Controller와 해당 메서드를 실행한다.
    Handler Mapping은 DispatcherServlet으로 부터 전달된 URL을 바탕으로 HandlerAdapter 객체를 포함하는 HandlerExecutionChain 객체를 생성하며, 이후 DispatcherServlet이 HandlerExecutionChain 객체로부터 HandlerAdapter 객체를 가져와서 해당 메소드를 실행하게 된다.

  5. Controller는 비지니스 로직을 처리하고, 그 결과를 바탕으로 뷰(ex. JSP)에 전달할 객체를 Model객체에 저장한다. Dispatcher Servlet에게 View name을 리턴한다.

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

  6. Dispatcher Servlet은 view name을 View Resolver에게 전달하여 View객체를 얻는다.
    이때 View name 뿐만 아니라 accept와 같은 header 정보도 전달된다.

    header 정보 내의 Accept는 HTML, JSON, XML 일 수 있고, 기본적으로는 HTML이다.

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

    JSP인 경우 JstlView 객체가 생성되며, JstlView 객체가 "xxxx.jsp"에 포워딩하여 결과를 보여준다.

  7. Dispatcher Servlet은 View 객체에 화면 표시를 의뢰한다.

  8. View 객체는 해당하는 뷰(ex. JSP, Thymeleaf)를 호출하며, 뷰는 Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리한다.

profile
저도 모르는데요?, 내가 몰라서 적는 글

0개의 댓글