MVC란?

로직과 뷰를 분리할 수 있다.

클라이언트가 보내는 모든 요청을 프론트 컨트롤러인 Servlet이 받는다.
프론트 컨트롤러는 요청만 받고 처리는 하지 않는다. 모든 요청은 처리는 컨트롤러 또는 Handler에 보낸다. 이러한 Controller는 Bean으로 결과를 만들어 Model에 보내고, 프론트 컨트롤러가 응답을 반환한다.

우리가 만들 부분은 보라색으로 표시되어 있다.
Dispatcher Servlet에 보낸다.Dispatcher Servlet은 요청을 처리해줄 Controller와 Method가 무엇인지 Handler Mapping에 물어본다.Controller가 동작할지는 어노테이션으로 작성해놓아야 한다.Hanlder Adapter에게 실행을 요청한다.Controller가 실행한다.Controller가 요청한 view name을 가지고 View Resolver가 호출 되고, 이를 통해 보여지게 된다.Front Contrller는 요청을 받아서 DispatcherServlet에 전달한다고 하였다.
이를 처리할 핸들러에게 넘기고 핸들러가 처리한 결과를 받아 사용자에게 응답 결과를 보여준다.
DispatcherServlet은 여러 컴포넌트를 이용해 작업을 처리하게 된다.

1. 요청이 들어오면 요청의 선처리 작업을 한다.
선처리 작업은 Locale결정, RequestContextHolder에 요청 저장, FlashMap 복원, 멀티파트요청을 해준다.
2번째 방법을 사용해서 설정을 해보겠다.
@Configuration: java config 파일임을 알려준다.
@EnableWebMvc: web에 필요한 빈들을 대부분 자동으로 설정해준다. 다른 설정이 필요할 경우 WebMvcConfigurerAdapter 클래스를 상속 받은 후, 메소드를 오버라이딩하여 구현한다.
@ComponentScan: Controller, Service, Repository, Component 애노테이션이 붙은 클래스를 찾아 스프링 컨테이너가 관리하게 된다.
매핑을 위해 @RequestMapping 애노테이션을 클래스나 메소드에서 사용한다.
- @RequstParam
mapping된 메소드의 argument에 붙일 수 있는 어노테이션
http parmeter의 name과 mapping
required는 필수인지 아닌지 판단.
- @PathVariable
@RequeestMapping의 path에 변수명을 입력받기 위한 placeholder가 필요함.
place holder의 이름과 PathVariable의 name 값과 같으면 mapping됨.