티스토리 뷰

Spring MVC

[Java]Spring MVC 이해하기(Spring MVC Flow)

개발도 운동만큼 2023. 3. 26. 21:22
반응형

Servlet Application 에 Spring 적용 의미

  • Spring이 제공하는 IoC컨테이너를 활용
  • Spring이 제공하는 서블렛 구현체 DispatcherServlet을 사용하겠다.
  • web.xml 파일 내 Listener 변경(기등록된 리스너를 제거하고, Spring에서 제공하는 ContextLoaderListener 등록)
  • ContextLoaderListener는 Spring IoC Container(즉, Application Context)를 Servlet Applicaiton 생명 주기에 맞춰서 바인딩 해준다.
  • Applicaiton Context를 Web Application에 등록되어있는 Servlet들이 사용할 수 있도록 Application Context를 만들어서 이 Application Context를 Servlet Context에 ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE라는 이름으로 등록해주고 Servlet Context가 종료될시점에 제거(Servlet Context : Servlet들이 사용할 수 있는 공용의 정보들을 모아두는 공간)

스프링 MVC 구조

image

  1. DispathcerServlet

    • 가장 앞서 요청을 받아들여 FrontController 라고 불림
    • 가장 핵심이며 모든 요청은 DispatcherServlet에게 전달된다.
    • DispathcerServlet은 HandlerMapping 에게 위임하여 요청을 처리할 Handler(Controller)를 찾는다.
    • 각 Controller에 요청을 전달하고 컨트롤러가 반환한 결과값을 view에 전달해 응답.
  2. HandlerMapping

    • 클라이언트의 요청 URL을 처리할 컨트롤러를 찾아서 DispatcherServlet에 반환.
    • @Controller 어노테이션이 적용된 객체의 @RequestMapping 값을 이용해 요청을 처리할 컨트롤러 탐색
  1. HandlerAdapter
    • DispatcherServlet의 처리요청을 변환해서 컨트롤러에 전달.
    • Controller의 응답 결과를 DispatcherServlet이 요구하는 형식으로 변환.

Spring MVC 처리 과정

image

Spring MVC 는 핵심이 DispatcherServlet 이다.

  1. 모든 요청에 대한 서블릿 필터가 실행 됨

  2. 모든 요청은 DispatcherServlet 에게 전달 된다.

  3. DispatcherServlet은 HandlerMapping 에게 위임하여 요청을 처리할 Handler(Controller) 를 찾는다.

    -HandlerMapping은 요청 URL을 보고 Handler를 찾아서 Handler의 이름과 함께 반환한다.

    -이때 반환되는 것은 HandlerExecutionChain 타입이다.(handler과 인터셉터 관련 상태를 가지고 있다.)

  4. DispathcerServlet은 찾아낸 Handler를 실행할 수 있는 HanderAdapter를 찾는다.

  5. 찾아낸 HandlerAdapter를 사용 Handler를 실행(invokeHandlerMethod)
    -Handler를 실행하면서 Service, Repository, DB 등 비즈니스 로직을 수행.
    -Handler의 리턴 값 : view(뷰 파일명), Model(데이터)

  1. DispatcherSevlet은 ViewResolver에게 view 의 이름을 전달하고 view 객체를 얻는다.

    -view 이름에 해당하는 view 를 찾음.

    -view Resolver는 전략 객체이며 view name 뿐 아니라 헤더 정보도 전달.

    -view Resolver는 전달된 정보를 바탕으로 사용자에게 보여줄 view 가 무엇인지 결정.

  1. DispatcherServlet 은 View 객체에게 Model 과 함께 화면 표시를 의뢰한다.

  2. View 는 해당하는 뷰를(ex. JSP, Thymleaf..) 호출하며, Model 객체에서 화면 표시에 필요한 정보를 가져와 화면 표시를 처리한다.

    -찾은 뷰에 모델 데이터를 랜더링하고 요청의 응답값을 생성한다.

  3. DispatcherServlet 은 View 로부터 받은 결과를 클라이언트에게 반환한다.

중요 Point :

아래 이미지에 DispathcerServlet의 doDispatch 메소드를 보면 try-catch 구문이 감싸고 있음.

  • Controller로 들어오는 예외는 catch로 잡아주기 때문에 Controller에서 try-catch문을 쓰는 것은 불필요한 코드.

  • 추가로 Service, Repository 에서 발생하는 예외는 Spring에서 모두 Controller로 위임하여 처리하게 됨

  • ExceptionHandler를 만들어서 Controller에서 전역으로 예외처리 하는 것이 코드 가독성에 좋음.

image
image

반응형

'Spring MVC' 카테고리의 다른 글

[Java]Spring DispatcherServlet  (0) 2023.03.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함