WebMvcAutoConfigurationDispatcherServletAutoConfiguration 이 설정 클래스가 먼저 실행되고WebMvcAutoConfiguration 실행클래스패스에 @ConditionalOnClass({DispatcherServlet.cla
(1) 컨트롤러로 해당 url 로 요청 (2) DispatcherServlet 디스패처스블릿으로 요청받음
HttpServlet 추상 클래스 서비스 메소드로 요청을 받는다해당 doGet 메소드는 FramewrokServlet 추상 클래스의 doGet 메소드 실행된다processReuqest 에서 doService 실행DispatcherServlet 에서 doService 실
HttpServlet 클래스의 init이 호출되는데 여기서도 super init을 호출한다super init 은 GenericServlet의 init 이다 다시 하위 클래스 init 호출 HttpServletBean 의 init 호출 여기서 this.initServl

AbstractHandlerMethodMapping 에서 bean 이면 자동으로 호출되는 API 스프링에 등록된 모든 bean 을 스캔하고 requestMapping 이 적용될 수 있는 클래스를 추출 그 기준인 isHandler 메소드 결과가 true 인지 isHan

beanNameHandler 로 요청하면 DispatcherServlet doDispatch 실행 핸들러어뎁터를 얻는 작업을 한다
요청하면 DispatcherServlet 의 Dodispatch 메소드 호출handlerAdapter 구하는 로직 호출RequestMappingHandlerAdapter 를 가져올 것이다handle 메소드를 실행하여 handler 호출해야함 AbstractHandler
RequestParamMethodArgumentResolver 클래스에서 supportsParameter 에서 매개변수 조건 확인
요청시작DistpatcherServlet 에서 doDispatch 호출적절한 HandlerAdapter 얻어야 함get 메소드로 호출RequestMappingHandlerAdapter 받음실제 handler 호출invokeHandlerMethod 로직이 많지만 mode
RequestParam은 기본형을 받을 수 있고 ModelAttribute는 객체에 바인딩한다결론: 어노테이션을 붙여서 어떤 ArgumentResolver를 사용할지 지정할 수 있는 개념앞선 HandlerRequestMapping과 HandlerRequestAdapte
ServletInvocableHandlerMethod 클래스에서 두개의 핵심이 있다 요청처리: 매개변수를 처리하는 ArgumentResolver 응답처리: ReturnValueHandler RequestResponseBodyMethodProcessor메시지 커번터를 통
WebMvcConfigurationSupport 에서 SessionFlashMapManager 를 만든다 DispatcherServlet에서 initFlashMapManager 한다 flashMapManager 가 있는지 flashMap 객체에 저장하기 위해 비어
(1) 쿼리파라미터 및 폼 데이터 바인딩@RequestParam, @ModelAttribute(2) Http 본문 데이터 바인딩@RequestBody@ModelAttribute를 사용하여 ServletModelAttributeMethodProcess가 요청처리할 때 사
invokeAndHandle 에 들어가면 invokeForRequest를 실행한다ModelAttributeMethodProcessor 의 resolveArgument 자세히 보자setter 로 바인딩하는 것을 보자

: ConversionService 와 ConverterRegistry의 실제적인 API가 모두 구현되어 있다: 스프링이 제공하는 기본 Converter 들을 미리 등록하여 바로 사용 가능하도록 구현 되어 있다
AbstractNamedValueMethodArgumentResolver 에서 resolveArgument 메소드 로직을 탄다이렇게 arg 찾아옴현재 arg는 String 인데 받는 타입이 String이 아니다그래서 다음 로직을 타야함
ModelAttributeMethodProcessor 에서resolveArgument 메소드Object attribute; 빈 객체를 생성한다객체 필드 타입이 String이면 그냥 들어갈 수 있는데 int 나 객체면 타입 변환이 필요하다AbstractNestablePr
포매터 등록FormattingConversionServicegetFieldType 을 통해 타겟 타입을 가져온다그런데 실제로 보면 converter 두개를 등록한다formatter 는 결국 컨버터를 이용초기화 시점에 두 개의 컨버터가 등록된다고 보면됨
ModelAttributeMethodProcessor 클래스에서 resolveArgument 메소드를 통해 객체 바인딩 처리생성자로 바인딩하는 걸로 처리할지 만약 통과하면 세터로 여기서도 bindingResult 봄바인딩 시도하면 오류난 데이터들이 담긴다여기서 중요한
DataBinder 클래스에서오류발생하면서 catch 구문탄다디버그 모드에서 codes 보면 에러 코드들 볼 수 있음4개생성DefaultMessageSourceResolvable 클래스에서이 클래스가 코드, 인자목록 기본 메시지를 가지고 있다타임리프와 연동에서Sprin
컨트롤러에 요청을 하면DispatcherServlet 클래스에서 핸들러를 찾고 handle 함수 실행반환 타입은 ModelAndView 로 반환RequestMappingHandlerAdapter 에서handleInternal 메소드 실행그리고 위 메소드에서mavCont
AnnotatedMethod 클래스이렇게 지나가고AbstractHandlerMethodMapping 클래스인데구체적 클래스가 RequestMappingHandlerMapping으로 나온다RequestMapping 어노테이션이 선언된 메소드를 가져옴메소드를 저장한다잠시

컨트롤러에서 에러를 날리면ErrorReportValve 클래스로StandardHostValve 클래스에서 invoke 메소드 탐이 메소드에서가보면 Response 클래스에서그래서 if문 내부가 실행되고DispatcherServlet에서 doDispatch 함수그리고 h
ErrorMvcAutoConfiguration 클래스에서 내부 클래스로 ErrorPageCustomizer를 가지고 있음 해당 객체를 bean으로 생성 에러페이지를 생성해서 등록 TomcatServletWebServerFactory의 errorPageRegistry

기본 경로는 /error 로RequestMapping 선언한 메소드 두개실행하면ErrorMvcAutoConfiguration 클래스에서DefaultErrorViewResolver bean이 생성되고 이후 view 생성할 때 아래 경로에 파일이 있는지 보고 생성한다그리고
1. FilterRegistrationBean 사용
ValidatorFactory를 구현하고 있다SpringValidatorAdapter를 상속하고 있다LocalValidatorFactoryBean의 아래 메소드 실행validatorFactory 를 가져오는 메소드는 AbstractConfigurationImpl팩토리에