본문 바로가기
Spring

Spring MVC Life cycle

by wwns 2022. 11. 17.
반응형

Spring MVC Lifecycle

출처 : http://terasolunaorg.github.io/guideline/1.0.1.RELEASE/en/Overview/SpringMVCOverview.html#id2

  1.  Filter
    • Web Application의 전역적인 로직을 담당
    • DispatcherServlet에 들어가기 전인 Web 단에서 실행
  2. DispatcherServlet
    • 들어오는 모든 요청을 우선적으로 받아 처리해주는 서블릿
    • HandlerMapping에게 Request에 매핑할 컨트롤러 검색을 요청
    • HandlerMapping으로부터 Controller 정보를 반환받아 해당 Controller와 매핑시킨다.
  3. HandlerMapping
    • DispatcherServlet으로부터 검색 요청받은 Controller를 찾아 리턴해준다.
  4. HandlerInterceptor
    • Request가 Controller에 매핑되기 전 앞단에서 부가적인 로직을 끼워 넣는다.
    • 주로 세션, 쿠키, 권한 인증 로직에 많이 사용됨
  5. Controller
    • Request에 대해 어떤 로직으로 처리할 것인지를 결정하고, 그에 맞는 Service를 호출
    • Service 객체를 스프링 컨테이너로부터 주입받아야 한다.
  6. Service
    • 데이터 처리 및 가공을 위한 비즈니스 로직 수행
    • Request에 대한 실질적인 로직을 수행하기 때문에, Spring MVC Lifecycle의 중심이라고 할 수 있음
    • Repository를 통해 DB에 접근하여 데이터의 CRUD를 처리
  7. Repository
    • 데이터베이스에 접근하는 객체
    • DAO(Data Access Object)를 사용하여 데이터베이스의 데이터를 직접적으로 가져옴
  8. ViewResolver
    • Controller에서 리턴한 View의 이름을 DispatcherServlet으로부터 넘겨받고, 해당 View를 렌더링
    • 렌더링 한 View는 DispatcherServlet으로 리턴하고, DispatcherServlet에서 해당 View 화면을 Response

지금까지의 요소들 중 특히 Filter와 Interceptor는 실행 흐름에 간섭하는 역할을 한다.

하지만 이 둘의 차이점은 실행 시점이 다르다는 것이며, 이를 잘 이해하고 사용할 수 있어야 한다!

 

  • Filter는 DispatcherServlet에 들어가기 전인 Web Application단에서 실행된다.
    • Web Application의 기능만 사용할 수 있다.
    • DispatcherServlet에 요청이 전달되기 전/후에 url패턴에 맞는 모든 요청에 대해 부가 작업을 처리할 수 있다.
      • 주로 Spring Security에서 Filter를 사용
        • CORS 설정, csrf, authorizeRequests 설정, 세션, oauth 등에 대한 작업 처리
  • Interceptor는 Spring Application 단에서 실행된다.
    • Spring Framework의 요소들에 접근이 가능하고 기능을 사용할 수 있다.
    • Dispatcher Servlet이 Controller를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능
      • 주로 Jwt 토큰에 대한 인증 절차를 걸치는 데 사용
      • Spring Application에서 Jwt 토큰에 대해 Validation

Spring 프레임워크를 사용하면 그 내부에서 어떤 동작 원리로 작동하는지 이해해야 잘 사용할 수 있다. 아직 미숙하지만 가장 기본적인 부분부터 정리해나가야겠다. API 개발은 순수히 개발자가 코드를 짜지만 Filter나 Interceptor, Servlet에 대한 개념이 없으면 에러를 마주쳤을 때 상당히 힘들 것이다..

반응형

'Spring' 카테고리의 다른 글

카카오 OAuth2.0 적용하기 - 1  (0) 2023.01.09
Spring Security 작동 원리  (0) 2022.11.23
Refresh Token이란?  (1) 2022.11.19
JWT란 무엇인가?  (0) 2022.11.18
Spring이란?  (0) 2022.11.17