손영배 블로그 누구나 쉽게 이해하고 습득하기

Spring MVC 기본 동작 흐름(model2) 본문

Web/spring framwork

Spring MVC 기본 동작 흐름(model2)

손영배 2020. 1. 2. 16:22

Spring MVC 기본 동작 흐름

 

model2 아키텍쳐로 구성 되어 있다.

 

DB를 제외한 파랑색 부분은 Spring MVC가 제공하는 것들이다.

개발자가 만들어야 하는 부분은 보라색으로 된 부분.

녹색(view) spring이 제공하는 것도 있고 개발자가 같이 만들어야 되는 것도 있고

 

① Request : Client에서 요청을 보내면 보낸 모든 요청을 Dispatcher Servlet이 모두 받게 된다.(Front Controller) Dispatcher Servlet은 요청을 처리할 핸들러와 매서드가 무엇인지 Handler Mapping에게 물어본다.

 

Handler Mapping은 어떤 요청에 어떤 Controller가 동작할지를 xml나 Annotaion를 설정하게 된다. 이렇게 설정, 만들어진 Bean들을 Handler Mapping이 관리를 하게 된다.

 

③ 2번에 알게된 정보들로 Handler Adapter에게 실행을 요청, 

그때 결정된 Controller, method가 실행 될꺼고

⑤ 그 결과를 Model에 받아서 Dispathcher Servlet에게 view name을 전달하게 된다.

View Resolver를 통해서 view를 출력하게 된다.

⑧ 응답

 

요청 처리를 위해 사용되는 컴포넌트

  • DispatcherServlet
    - HandlerMapping
    - HandlerAdapter
    - MultipartResolver
    - LocaleResolver
    - ThmemResolver
    - HandlerExceptionResolver
    - RequestToViewNameTranslator
    - ViewResolver
    - FlashMapManager

 

@EnableWebMvc

  • DispatcherServlet의 RequestMappingHandlerMapping, RequestMappingHandlerAdapter, ExceptionHandlerExceptionResolver, MessageConverter 등

    Web에 필요한 bean들을 대부분 자동으로 설정 해준다.

@WebMvcConfigurerAdapter

  • @EnableWebMvc를 이용하면 기본적인 설정이 모두 자동으로 되지만, 사용자 기본 설정 이외의 설정이 필요할 경우에는(커스터 마이징) WebMvcConfigurerAdapter를 상속 받은 후, 메소드를 오버라이딩하여 구현한다.

@RequestMapping

  • Http요청과 이를 다루기 위한 Controller의 메소드를 연결하는 어노텐이션
  • @RequestMapping("/users", method=RequestMethod.POST)
    - From Spring 4.3 version
    - @GetMapping
    - @PostMapping
    - @PutMapping
    - @DeleteMapping
    - @PatchMapping
  • Http 특정 헤더와 연결하는 방법
    - @RequestMapping(method = RequestMethod.GET, headers = "content-type=application/json")
  • Http Paramether 와 연결하는 방법
    - @RequestMapping(method = RequestMethod.GET, params = "type=raw")
  • Content-Type Header 와 연결하는 방법
    - @RequestMapping(method = RequestMethod.GET, consumes = "application/json")
  • Accept Header 와 연결하는 방법
    -
    @RequestMapping(method = RequestMethod.GET, produces = "application/json")

'Web > spring framwork' 카테고리의 다른 글

Spring 생성자 주입을 써야 하는 이유  (0) 2020.06.12