MVC Model 1 아키텍쳐
브라우저의 요청 -> JSP page가 요청을 받음 -> Java Bean -> Database -> Java Bean -> JSP page의 응답 -> 브라우저에 요청 결과 표시
이 경우에는 JSP 자체에 Java 코드와 HTML 코드가 섞이게 되어 유지 보수를 하기에 어려움을 겪게 된다.
MVC Model 2 아키텍쳐
Model 1 아키텍쳐에서 유지 보수의 어려움을 해결하고자 나온 모델이다.
브라우저 요청 -> 서블릿(컨트롤러) -> Java Bean -> Database -> JSP page(View)의 응답 -> 브라우저에 요청 결과 표시
MVC Model 2 발전형태
프론트 컨트롤러는 요청을 처리하지 않고 컨트롤러에서 처리한다. 이런 컨트롤러는 Java Bean 등을 이용해서 결과를 만들어 내고 만들어진 결과를 모델에 담아 프론트 컨트롤러에 보내면 프론트 컨트롤러는 알맞은 뷰에게 모델을 전달해서 결과를 출력한다.
Spring Web Module
Model2 MVC 패턴을 지원하는 Spring Module
Clinet의 request -> Dispatcher Servlet class(Controller를 찾음) -> Handler Mapping -> Handler Apapter(결정된 Controller로 보냄) -> 로직 수행(Service) -> Controller(View name을 리턴함) -> View Resolver -> View(jsp, html) 출력
Dispatcher Servlet
: Client의 요청을 처리해 줄 컨트롤러와 메서드가 무엇인지 Handler Mapping
에게 물어본다.Handler Mapping
: Handler Mapping
이 받은 요청은 컨트롤러
가 알아서 동작하는 것이 아니기 때문에 xml 파일이나 java 파일에 어노테이션으로 설정한다.DispatcherServlet
은 여러 컴포넌트를 이용해 작업을 처리한다.
내부에 위 사진과 같은 코드가 있다. 라고 생각하면 된다.
Spring MVC
는 지역화라는 것을 지원한다. 지역화(Localization)란 같은 사이트에 들어갔음에도 불구하고 어떤 사용자에게 영어로 된 화면이 보여지고 또 다른 사용자에게는 한국어로 된 화면이 보여지듯이 처리할 수 있는 것을 말한다.(한마디로 다국어처리가 가능하다.) 이는 브라우저에 언어를 세팅해두면 헤더 정보에서 언어 설정 값을 이용하여 Locale
을 결정할 수 있다.*RequestContextHolder : 스레드 로컬 객체, 요청을 받아 응답할 때까지 HttpServletRequest, HttpServletResponse 등을 Spring이 관리하는 객체 안에서 사용할 수 있도록 해주는 것이다.
AcceptHeaderLocalResolver
는 HTTP
헤더의 정보를 보고 지역정보를 설정한다.FlashMap
객체를 조회(retrieve) & 저장을 위한 인터페이스RedirectAttributes
의 addFlashAttribute
메소드를 이용해서 저장한다.HttpServletRequest
, HttpServletResponse
, HttpSession
등을 사용할 수 있도록 한다.