[Spring] Spring MVC&Dispatcher Servlet이란?

2021. 1. 5. 22:08Study/spring

Spring-MVC?


MVC 패턴

Model,View,Controller의 개념이 합쳐지면서 생긴 방식으로 소프트웨어 공학에서사용되는 디자인 패턴이다.

 

1. 사용자의 Request를 Controller가 받는다.

2. Controller는 Business Logic을 처리를 Service와 같이 처리한 후 결과를 Model에 담는다.

3. Model에 저장된 결과를 바탕으로 시각처리를 담당하는 View를 제어하여 사용자에게 전달한다.

 

뉴렉처유투브영상참고

  • Controller
    사용자가 접근 한 URL에 따라 요청을 파악한다. URL에 맞는 Method를 호출하여 Service와 함께 Business Logic을 처리한다. 최종적으로 나온 결과는 Model에 저장을 하고, View에 던져준다.
  • Model
    Model은 Controller에서 받은 데이터를 저장하는 역할을 한다.
  • View
    Controller로 부터 받은 Model 데이터를 바탕으로 사용자에게 표현해준다. 일반적으로 HTML, JSP... 에 해당한다.

 

model 1 방식 model 2 방식
 view+controller,model 를 view와  controller를 한곳에서 처리 view, controller,model를 분리해서 처리

 

**mvc패턴/model 2를 사용하는 이유?

  • 개발자와 웹 퍼블리셔의 영역을 분리할 수 있다.
  • 컨트롤러의 url를 통해서 뷰를 제어하기 떄문에 뷰의 교체나 변경과 같은 유지보수에 유용하게 사용될 수 있다.

 

모델 2방식이 개발자와 웹 퍼블리셔 간의 역할분담을 하는데는 성공했지만, 각 컨트롤러 사이의 중복코드의 문제와 개발자의 개발 패턴 등의 차이문제로 인해 모델 2방식은 좀 더 강제적인 형태의*Front controller형식을 적용하게 된다.

 

Front controller의 패턴의 가장 중요한 변화는 전체로직의 일부만을 컨트롤러가 처리하도록 변경되었다는 점이다.

전체 로직의 일부를 컨트롤러에게 위임하고 모든 흐름의 제어는 앞쪽의 Front  Controller가 담당하게 된다.

(제일 앞에서서버로 들어오는 모든 요청을 프론트 컨트롤러를 Spring에서 정의하였고, 이를 *Dispatcher-Servlet이라고함. 그래서 공통처리 작업을 Dispatcher  서블릿이 처리한 후 적절한 세부 컨트롤러로 작업을 위임)

 

이 구조를 사용하게 될 경우 개발자가 작성하는 컨트롤러는 전체 로직의 일부만을 처리하는 형태가 되기 떄문에 작성해야 하는 전체 코드는 줄어들게 된다.

 

*Front Controller(프론트 컨트롤러)?

Front Controller는 주로 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의  모든

요청을 받아서 처리해주는 컨트롤러인데 , MVC구조에서 함께 사용되는 패턴

 

Spring MVC Framework

  1. Client로부터 요청이 들어오면 *DispatcherServlet이 호출된다.
  2. DispatcherServlet은 받은 요청을 HandlerMapping에게 던져준다. 요청받은 URL을 분석하여 HandlerMapping 적합한 Controller를 선택하여 반환한다.
  3. DispatcherServlet는 다음으로 HandlerAdapter를 호출한다. HandlerApdater는 해당하는 Controller 중 요청한 URL에 맞는 적합한 Method를 찾아준다.
  4. Controller는 Business Logic을 처리하고, 해당하는 결과를 View에 전달할 객체를 Model에 저장한다.
  5. Controller는 View name을 DispatcherServlet에게 리턴한다.
  6. DispatcherServlet은 ViewResolver를 호출하여 Controller가 리턴한 View name을 기반으로 적합한 View를 찾아준다.
  7. DispatcherServlet은 View 객체에 처리결과를 넘겨 최종 결과를 보여주도록 요청한다.
  8. View 객체는 해당하는 View를 호출하며, View는 Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리하고 Client에게 넘겨준다.

 

* Dispatcher-Servelet(Dispatcher 서블릿)


Servelt Container에서 HTTP프로토콜을 통해 들어오는 모든 요청을 프레젠테이션 계층의
제일 앞에 둬서 중앙 집중식으로 처리해주는 프론트 컨트롤러(Front controller)

클라이언트로부터 어떠한 요청이 오면 톰캣과 같은 서블릿 컨테이너가 요청을 받는데., 이때 제일 앞에서

서버로 들어오는 모든 요청을 프론트 컨트롤러를 Spring에서 정의하였고, 이를 Dispatcher-Servlet이라고함. 그래서 공통처리 작업을 Dispatcher  서블릿이 처리한 후 적절한 세부 컨트롤러로 작업을 위임해준다.

 

*Servlet(서블릿)?

클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servelt 클래스의 구현 규칙을 지킨자바 웹 프로그래밍 기술

 

*Servlet Container(서블릿 컨테이너)?

서블릿을 관리해주는 컨테이너
클라이언트의 요청(request)를 받아주고 응답(response)할수 있게 웹서버와 소켓으로 통신하며 대표적인 예로 톰켓이 있음.

 

 

 

참고:www.youtube.com/watch?v=9Tmzt6Q9WI8&feature=youtu.be, mangkyu.tistory.com/14