이미지 출처
https://terasolunaorg.github.io/guideline/1.0.1.RELEASE/en/Overview/SpringMVCOverview.html
- 클라이언트 요청
클라이언트가 요청한 URL에 대한 요청이 서버에 도달합니다.
- DispatcherServlet
모든 클라이언트 요청은 DispatcherServlet을 통해 처리됩니다.
DispatcherServlet은 Spring MVC 애플리케이션의 전반적인 제어를 담당합니다.
요청을 처리하기 위해 적절한 핸들러(Controller)를 선택합니다.
- HandlerMapping
DispatcherServlet은 요청 URL과 매핑되는 핸들러(Controller)를 결정하기 위해 HandlerMapping을 호출합니다.
- Controller
HandlerMapping은 결정된 핸들러(Controller)를 DispatcherServlet에 반환합니다.
DispatcherServlet은 선택된 핸들러(Controller)를 실행합니다.
- Model
핸들러(Controller)는 클라이언트 요청에 대한 비즈니스 로직을 수행하고, 결과를 Model 객체에 저장합니다.
- ViewResolver
핸들러(Controller)는 결과를 보여줄 View를 결정합니다.
ViewResolver는 View 객체를 반환합니다.
- View
View는 핸들러(Controller)가 처리한 모델 데이터를 사용하여 실제로 클라이언트에게 응답을 생성합니다.
- Response
응답이 생성되면 DispatcherServlet은 HttpServletResponse 객체를 사용하여 응답을 클라이언트에게 반환합니다.
- Interceptor
핸들러(Controller)가 실행되기 전, 후에 Interceptor를 실행할 수 있습니다.
Interceptor는 보안, 로깅, 트랜잭션 처리, 캐싱 등의 기능을 구현합니다.
- ExceptionResolver
핸들러(Controller)나 Interceptor에서 예외가 발생할 경우 ExceptionResolver를 사용하여 예외를 처리합니다.
- 클라이언트 응답
DispatcherServlet은 모든 작업을 완료하고 클라이언트에게 응답을 반환합니다.
필터(Filter)와 인터셉터(Interceptor)는 둘 다 웹 애플리케이션에서 HTTP 요청과 응답을 처리하는 데 사용됩니다. 하지만 이 둘은 목적과 사용 방법에서 차이가 있습니다.
필터는 HTTP 요청 및 응답을 변경하거나 조작하는 데 사용됩니다. 예를 들어, 인증된 사용자만 특정 페이지에 접근할 수 있도록 하는 등의 보안 필터를 작성할 수 있습니다. 필터는 서블릿 컨테이너에서 요청과 응답을 처리하기 전후에 실행됩니다. 필터는 보통 요청이나 응답에 대한 특정 헤더 정보를 추가하거나, 요청 데이터의 유효성을 검증하거나, 요청을 로깅하는 등의 역할을 합니다.
인터셉터는 핸들러(Controller)가 요청을 처리하기 전, 후에 실행되는 컴포넌트로, 주로 로깅, 보안, 트랜잭션 처리, 캐싱 등의 기능을 구현합니다. 필터와 마찬가지로 인터셉터도 요청 및 응답을 조작할 수 있지만, 주요 목적은 주요 로직을 포함하는 핸들러(Controller)의 전처리와 후처리를 수행하는 것입니다.
따라서 필터는 서블릿 컨테이너에서 요청 및 응답을 처리하는데 사용되며, 인터셉터는 스프링 프레임워크와 같은 웹 애플리케이션 프레임워크에서 핸들러(Controller)의 전처리와 후처리를 처리하는데 사용됩니다.