21.06.13 TIL 스프링 MVC : 스프링 MVC의 구조

김정훈·2021년 6월 13일

📌 SpringMvc-스프링 MVC의 구조

<출처 : 스프링 MVC : 김영한 강사님>

https://www.inflearn.com/roadmaps/373

🍃 Spring MVC의 구조

DispatcherServlet이 스프링MVC에서 FrontController이고
이 DispatcherServlet이 스프링MVC의 핵심이다.
: DispatcherServlet도 결국에 HttpServlet을 상속받는다.
그리고 MVC의 로직은 DispatcherServlet.doDispatch() 코드에 다 있다고 생각하면 된다.
getHandler, getHandlerAdapter, view, view.render 등 MVC의 핵심 기능은 저기 다 있다.

1. 핸들러 조회
핸들러 매핑(RequestMappingHandlerMapping)을 통해 요청URL에 매핑된 핸들러(컨트롤러) 조회

2. 핸들러 어댑터 조회
핸들러를 실행할 수 있는 핸들러 어댑터(RequestMappingHandlerAdapter)를 조회

3. 핸들러 어댑터를 실행하고, 핸들러 어댑터가 실제 핸들러를 실행한다.

4. ModelAndView 반환
핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
ModelAndView : view와 view에 담아 보낼 값을 저장한다.

5. viewResolver 호출
뷰 리졸버를 찾고 실행하는데, JSP의 경우는 InternalResourceViewResolver가 사용되고
ThymeLeaf같은 경우는 또 별도의 viewResolver가 존재한다.

6. View 반환
뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고,
렌더링 역할을 담당하는 뷰 객체를 반환한다.

7. 뷰 렌더링
뷰를 통해서 뷰를 렌더링 한다.

🍃 스프링 MVC

@RequestMapping을 사용하는 유연한 컨트롤러

  • RequestMappingHandlerMapping (핸들러 매핑)
  • 중간과정 : RequestMappingHandlerMapping을 지원하는 어댑터를 찾는다.
    → RequestMappingHandlerAdapter (핸들러 어댑터)

@Controller

  • 스프링이 자동으로 스프링 빈으로 등록한다. (@Controller 내부에 @Component가 있다.)

@RequestMapping

  • 요청 정보를 매핑한다. 해당 URL(ex. /springmvc/v1/members/new-form)이 호출되면 그 메소드를 실행한다.
    어노테이션 기반으로 동작해서, 메서드의 이름은 임의로 지으면 된다.

ModelAndView

  • 모델(뷰로 전달할 값)과 뷰를 담아서 반환한다.
  • 모델에 데이터를 추가할 때는 addObject()를 사용하여 다음과 같이 하면 된다.
ModelAndView mv = new ModelAndView("~");
mv.addObject("member", member);

🍃 스프링 MVC의 실용적인 방식

ModelAndView가 아니라 View는 String값으로 반환시키고, Model은 Model model 객체로 따로 처리한다.
나는 처음 Spring으로 개발할 때 V3 방식으로 해서 V3가 조금 더 친숙하게 느껴진다.
@RequestParam = request.getParameter("username")이라고 생각하면 된다.
😅 거의 RequestMapping으로 쓰는 경우는 없는 것 같다. @GetMapping, @PostMapping, @PutMapping 이렇게 사용하는데 저 애노테이션들 안에도 결국엔 RequestMapping(method=~~) 이렇게 선언이 되어 있다.

profile
WebDeveloper

0개의 댓글