[스프링] Spring MVC

Jaedeok Lee·2021년 8월 17일
1

Spring

목록 보기
2/3
post-thumbnail

MVC?

  • MVC는 Model-View-Controller의 약자.
  • Model : 모델가 렌더링하는데 필요한 데이터이다. 예를 들어 사용자가 요청한 상품 목록이나, 주문 내역이 이에 해당한다.
  • View : 웹 어플리케이션에서 뷰(View)는 실제로 보이는 부분이며, 모델을 사용해 렌더링을 한다. 는 JSP, JSF, PDF, XML등으로 결과를 표현한다.
  • Controller : 컨트롤러는 사용자의 액션에 응답하는 컴포넌트이다. 컨트롤러모델을 업데이트하고, 다른 액션을 수행한다.

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

Spring MVC 기본 동작 흐름

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
    • HandlerMapping
    • HandlerAdapter
    • MultipartResolver
    • LocaleResolver
    • ThemeResolver
    • HandlerExceptionResolver
    • RequestToViewNameTranslater
    • ViewResolver
    • FlashMapManager

DispatcherServlet

  • 프론트 컨트롤러(Front Controller)
  • 클라이언트의 모든 요청을 받아 처리할 핸들러에게 넘기고 핸들러가 처리한 결과를 받아 사용자에게 응답 결과를 보여준다.
  • DispatcherServlet은 여러 컴포넌트를 이용해 작업을 처리한다.
  • 이론적으로 한개 이상 사용할 수 있지만 보통 한개만 선언해서 사용한다.

DispatcherServlet 내부 동작 흐름


내부에 위 사진과 같은 코드가 있다. 라고 생각하면 된다.

  • 요청 선처리 작업

    Spring MVC지역화라는 것을 지원한다. 지역화(Localization)란 같은 사이트에 들어갔음에도 불구하고 어떤 사용자에게 영어로 된 화면이 보여지고 또 다른 사용자에게는 한국어로 된 화면이 보여지듯이 처리할 수 있는 것을 말한다.(한마디로 다국어처리가 가능하다.) 이는 브라우저에 언어를 세팅해두면 헤더 정보에서 언어 설정 값을 이용하여 Locale을 결정할 수 있다.

*RequestContextHolder : 스레드 로컬 객체, 요청을 받아 응답할 때까지 HttpServletRequest, HttpServletResponse 등을 Spring이 관리하는 객체 안에서 사용할 수 있도록 해주는 것이다.

요청 선처리 작업시 사용된 컴포넌트

  • org.springframework.web.servlet.LocaleResolver
    지역 정보를 결정해주는 전략 오브젝트, 디폴트인 AcceptHeaderLocalResolverHTTP 헤더의 정보를 보고 지역정보를 설정한다.
  • org.springframework.web.servlet.FlashMapManager
    FlashMap객체를 조회(retrieve) & 저장을 위한 인터페이스
    RedirectAttributesaddFlashAttribute메소드를 이용해서 저장한다.
    리다이렉트 후 조회를 하면 바로 정보는 삭제된다.
  • org.springframework.web.context.request.RequestContextHolder
    일반 빈에서 HttpServletRequest, HttpServletResponse, HttpSession 등을 사용할 수 있도록 한다.
    해당 객체를 일반 빈에서 사용하게 되면, Web에 종속 될 수 있다.
  • org.springframework.web.multipart.MultipartResolver
    멀티파트 파이리 업로드를 처리하는 전략

요청 전달

요청 처리

예외 처리

뷰 렌더링

요청 처리 종료


참고
부스트 코스 MVC-1
부스트 코스 MVC-2

profile
궁금하거나 추가해야 되는 부분 있으면 댓글 달아주세요~

0개의 댓글