맨땅에 헤딩하는 개바른자

Spring MVC Lifecycle 구조 본문

JAVA

Spring MVC Lifecycle 구조

앵낄낄 2022. 4. 15. 15:51
반응형

회사에서 업무를 보면서 Request용 Dto를 검증하는 과정에서 컨트롤러 진입 전에 여러 단계를 걸치면서 유입되는 과정을 보게된다.

단순히 Filter, Interceptor등 컨트롤러 진입 전 전처리를 하기 위한 구성이 있다는 정도만 알고있어도 충분히 업무에서도 무리없이 가능하지만 간혹 상급 개발자분들끼리 얘기하시는 용어를 못 알아 들을 때가 있었다. 프록시를 타는건가? 구멍을 뚫어서 길을 만들어주면될거 같다 등등 왈왈왈 ~

듣다보니 답답함이 생겨서 MVC를 공부하는 취지로 글을 작성하려고 한다.

[Spring 라이프사이클 구조]

위 그림 예제에서 controller, service, repositry는 다 아는 내용으로 생략

  1. Filter
    • 요청이 들어오면 제일 먼저 적용되는 부분이다.
  2. DispatcherServlet
    1. 많이 들어본 녀석인데..? 자바를 처음 배울 때 학원에서 doGet, doPost 단계에서 dispatcher 위임처리 할 때 많이 보던 단어다
      1. 이거랑 연관이 있는걸가? 완전 초기 배울 때라 정확히 기억이 안나네요 ^^;
    • 들어오는 모든 Request를 우선적으로 받아 처리해주는 서블릿이다.
    • HandlerMapping에게 Request에 대해 매핑할 Controller 검색을 요청한다.
    • HandlerMapping으로부터 Controller 정보를 반환받아 해당 Controller와 매핑시킨다.
    • Dispatcher라는 단어가 '배치 담당자'라는 뜻이 있듯이, 말 그대로 Request에 대해 어느 컨트롤러로 매핑시킬것인지 배치하는 역할을 한다.
  3. HandlerMapping
    • DispatcherServlet으로부터 검색을 요청받은 Controller를 찾아 정보를 리턴해준다.
  4. HandlerInterceptor
    • Request가 Controller에 매핑되기전 앞단에서 부가적인 로직을 끼워넣는다.
    • 주로 세션, 쿠키, 권한 인증 로직에 많이 사용된다.
  5. ViewResolver
    • Controller에서 리턴한 View의 이름을 DispatcherServlet으로부터 넘겨받고, 해당 View를 렌더링한다.
    • 렌더링한 View는 DispatcherServlet으로 리턴하고, DispatcherServlet에서는 해당 View 화면을 Response 한다.

AOP 구성 시 사용되는 항목

  • FilterAOP경우 Spring단계에서 사용되기 때문에 Filter에서 적용하는 건 Java단의 기능 적용이 적절한거 같다.
    • 본인은 Logging 기능에 관련된 항목을 Filter에 적용한 사례가 있다.
    • Filter의 상세한 내용은 Filter만 다루는 글에 정리할 계획이다.
    • 그리고 Filter의 구현체들이 다양하게 존재하는데 이것도 상세하게 알아볼 계획이다.
  • 그림에서 보다시피 Filter가 적용되는 시점은 WebApplication에서 처리가 된다.
  • Interceptor 그림에서 보다시피 interceptor가 적용되는 시점은 SpringApplication에서 적용된다. Spring 관련 된 로직이나, Bean에 접근해서 해야할 땐 interceptor에서 작업을 진행하면 된다.
반응형