Replies: 1 comment 1 reply
|
마지막까지 더 파이팅입니다 ~~! 중간에 표로 정리되어있는 부분이 깔끔하네요 👍 |
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
섹션 5. 스프링 MVC - 구조 이해
1. 스프링 MVC 전체 구조
직접 만든 MVC 프레임워크 구조

Spring MVC 구조

DispatcherServlet 구조 살펴보기
org.springframework.web.servlet.DispatcherServletDispatcherServlet 서블릿 등록
부모 클래스에서
HttpServlet을 상속 받아 사용, 서블릿으로 동작스프링 부트가 자동으로 서블릿으로 등록, 모든 경로
(urlPatterns="/")에 대해 매핑요청 흐름
HttpServlet이 제공하는service()가 호출됨DisaptcherServlet의 부모인FrameworkServlet에서service()를 오버라이드 해둠FrameworkServlet.service()를 시작으로 여러 메서드가 호출되면서DispatcherServlet.doDispatch()도 호출됨doDispatch() 를 분석한 동작 순서
InternalResourceViewResolver가 자동 등록, 사용됨InternalResourceView(JstlView)를 반환하는데, 내부에 forward() 로직이 있음인터페이스 살펴보기
DispatcherServlet코드의 변경없이 원하는 기능을 변경, 확장 가능하다는 것DispatcherServlet에 등록하면 나만의 컨트롤러 제작 가능주요 인터페이스 목록
2. 핸들러 매핑과 핸들러 어댑터
과거에 사용했던, 스프링이 제공하는 간단한 컨트롤러로 핸들러 매핑과 어댑터 이해하기
Controller 인터페이스
과거 버전 스프링 Controller
OldController
@Component: 이 컨트롤러를/springmvc/old-controller라는 이름의 스프링 빈으로 등록OldController가 호출 될 수 있는 이유는?HandlerMapping (핸들러 매핑)
HandlerAdapter (핸들러 어댑터)
Controller인터페이스를 실행할 수 있는 핸들러 어댑터 찾아서 실행핸들러 매핑으로 핸들러 조회
BeanNameUrlHandlerMapping가 실행 성공, 핸들러인OldController반환핸들러 어댑터 조회
Controller인터페이스를 지원하는SimpleControllerHandlerAdapter가 대상이 됨핸들러 어댑터 실행
SimpleControllerHandlerAdapter실행, 핸들러 정보도 넘겨줌SimpleControllerHandlerAdapter는 핸들러인OldController를 내부에서 실행, 결과 반환HttpRequestHandler
Controller인터페이스가 아닌 다른 핸들러, 서블릿과 가장 유사한 형태
MyHttpRequestHandler로 간단히 구현
핸들러 매핑으로 핸들러 조회
BeanNameUrlHandlerMapping가 실행 성공, 핸들러인MyHttpRequestHandler반환핸들러 어댑터 조회
HttpRequestHandler인터페이스를 지원하는HttpRequestHandlerAdapter가 대상이 됨핸들러 어댑터 실행
HttpRequestHandlerAdapter실행, 핸들러 정보도 넘겨줌HttpRequestHandlerAdapter는 핸들러인MyHttpRequestHandler를 내부에서 실행, 결과 반환3. 뷰 리졸버
OldController - view를 조회할 수 있도록 변경
return new ModelAndView("new-form");코드를 추가하였다실행
localhost:8080/springmvc/old-controller를 실행Whitelabel Error Page가 뜬다실행 - 해결방법
application.propertires에 코드 추가하기InternalResourceViewResolver (뷰 리졸버)
application.propertires에 등록한 설정 정보 사용뷰 리졸버 동작 방식
스프링 부트가 자동 등록하는 뷰 리졸버
핸들러 어댑터 호출
핸들러 어댑터를 통해
new-form이라는 논리 뷰 이름 획득ViewResolver 호출
new-form이라는 뷰 이름으로 viewResolver 순서대로 호출BeanNameViewResolver:new-form이라는 이름의 스프링 빈으로 등록된 뷰가 없으므로 찾지 못함InternalResourceViewResolver가 호출됨InternalResourceViewResolver
InternalResourceView반환뷰-InternalResourceView
JSP 처럼 forward() 를 호출해서 처리할 수 있는 경우에 사용
view.render()
view.render()가 호출되고InternalResourceView는forward()를 사용해서 jsp 실행4. 스프링 MVC - 시작하기
@RequestMapping
스프링이 만든, 애노테이션을 활용한 매우 유연하고 실용적인 컨트롤러
@RequestMappingRequestMappingHandlerMappingRequestMappingHandlerAdapter가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터
스프링에서 주로 사용하는 애노테이션 기반의 컨트롤러를 지원하는 방식, 실무에서 대부분 사용
회원 등록 폼 변경
@Controller@RequestMappingModelAndView회원 저장 변경
mv.addObject("member", member)ModelAndView를 통해 Model 데이터를 추가할 때 사용회원 목록 변경
5. 스프링 MVC - 컨트롤러 통합
@RequestMapping을 잘 보면 클래스 단위가 아니라 메서드 단위에 적용된 것을 확인할 수 있다. 따라서 컨트롤러 클래스를 유연하게 하나로 통합할 수 있다.기존의 중복이 있는 코드
@RequestMapping("/springmvc/v2/members/new-form")@RequestMapping("/springmvc/v2/members")@RequestMapping("/springmvc/v2/members/save")컨트롤러를 통합하여 중복 제거
@RequestMapping("/springmvc/v2/members")@RequestMapping("/new-form")@RequestMapping("/save")@RequestMapping6. 스프링 MVC - 실용적인 방식
과거에는 개발자가 직접 ModelView 를 생성해서 반환하였으나, 스프링 MVC는 개발자의 편리한 개발을 위해 많은 편의 기능을 제공한다
Model 파라미터
save(),members()를 보면 Model을 파라미터로 받는 것을 확인할 수 있다.ViewName 직접 반환
@RequestParam 사용
@RequestParam으로 받을 수 있다.@RequestMapping -> @GetMapping, @PostMapping
All reactions