Dispatcher Servlet, Filter, Interceptor는 웹 애플리케이션에서 클라이언트의 요청을 처리하는데 사용되는 컴포넌트들이다.
Dispatcher Servlet
- 디스패처 서블릿은 가장 앞단에서 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 컨트롤러에 위임해 주는 프론트 컨트롤러(Front Controller) 혹은 중앙제어 컨트롤러(Central Controller)라 할 수 있으며 Spring MVC 프레임워크에서 주요한 역할을 수행함.
- 웹 애플리케이션의 진입점으로써 클라이언트의 모든 요청을 받아들이고, 요청에 대한 처리를 적절한 핸들러(=Controller)로 매핑하여 해당 Handler가 요청을 처리할 수 있도록 전달함.
- 요청과 응답의 흐름을 관리하고, 핸들러와 뷰의 매핑을 중개하여 각 요청을 적절하게 처리함. → 이를 통해 개발자는 핵심 비지니스 로직에 집중할 수 있으며, Dispatcher Servlet이 요청의 흐름을 자동으로 관리하여 효율적인 웹 애플리케이션 구축 가능
▷ Dispatcher Servlet의 주요 특징과 작동 방식
● 설정과 등록
- 웹 애플리케이션에서 Dispatcher Servlet은 'web.xml' 파일이나 Java Config를 통해 등록됨.
- 'web.xml'에서는 DispatcherServlet 클래스를 서블릿으로 등록하고 URL 매핑을 설정함.
- Java Config에서는 DispatcherServlet 클래스를 Bean으로 등록하고 URL 매핑을 설정함.
● URL 매핑
- Dispatcher Servlet은 클라이언트의 요청 URL을 보고, 해당 URL을 어떤 핸들러가 처리할지 매핑함.
- URL 매핑은 설정 파일에서 'url-pattern'을 지정하거나, Java Config에서 @RequestMapping을 사용하여 설정할 수 있음.
● 핸들러 매핑 (Handler Mapping)
- Dispatcher Servlet은 요청을 처리할 핸들러를 찾기위해 Handler Mapping을 사용함
- 핸들러 매핑은 요청 URL과 핸들러(Controller) 사이의 매핑을 관리하는 역할을 함.
● 핸들러 어댑터 (Handler Adapter)
- Dispatcher Servlet은 Handler Adapter를 사용하여 핸들러가 실제로 요청을 처리할 수 있도록 함.
- 핸들러 어댑터는 핸들러의 타입을 확인하고, 해당 핸들러에 맞는 메서드를 호출하여 요청을 처리함.
● 뷰 리졸버 (View Resolver)
- 핸들러가 요청을 처리한 후, Dispatcher Servlet은 View Resolver를 사용하여 응답을 생성할 뷰(View)를 찾음.
- 뷰 리졸버는 뷰의 이름을 기반으로 실제 뷰 객체를 찾아 응답에 사용함
● 응답 처리
- Dispatcher Servlet은 핸들러가 처리한 결과와 뷰를 결합하여 최종적인 응답을 생성함.
- 응답은 클라이언트에게 전달되며, 뷰를 사용하여 클라이언트에게 랜더링된 페이지를 보여줌.
Filter
- 웹 애플리케이션에서 클라이언트의 요청과 응답에 대해 중간에 가로채서 필요한 전/후 처리 작업을 수행하는 컴포넌트.
- Dispatcher Servlet 이전에 요청을 가로채거나 응답을 가공하는데 사용되며, 여러 개의 Filter를 체인 형태로 구성할 수 있음.
- 공통적인 기능을 하나의 Filter로 구현하여 모든 요청에 적용할 수 있음 (코드 재사용성, 유지보수성 향상)
● Filter의 동작 순서
- 클라이언트의 요청이 서버로 전달되면, 해당 요청은 Dispatcher Servlet 이전에 등록된 Filter 체인을 따라 순차적으로 가로채짐.
- Filter 체인은 필터들의 순서를 기반으로 동작하며, 각 필터는 다음 필터 또는 Dispatcher Servlet으로 요청을 전달할 수 있음.
- 응답의 경우도 클라이언트에게 전달되기 전에 등록된 Filter 체인을 따라 가공됨.
● 주요 메서드
- Filter 인터페이스는 doFilter() 메서드를 가지고 있으며, 이 메서드를 구현하여 필터가 요청과 응답을 처리함.
- doFilter() 메서드는 첫 번째 파라미터로 ServletRequest와 ServletResponse를 받음. 이걸 이용해서 요청과 응답을 가공하고 다음 필터나 Dispatcher Servlet으로 전달.
● 주요 기능
- Filter를 사용하여 요청 데이터의 인코딩 변경, 인증 처리, 로깅, 보안 검사, 캐시 처리 등의 기능을 구현할 수 있음.
- 필터는 서블릿에 비해 더 일반적인 목적으로 사용되며, 웹 애플리케이션에서 공통적인 기능을 재사용하는데 유용함
● 등록
- Filter는 웹 애플리케이션의 설정 파일 'web.xml'에 등록하여 사용함.
- 'web.xml'에서는 각 Filter의 클래스와 매핑 URL을 설정하여 등록할 수 있음.
- Java Config를 사용하는 경우에는 'FilterRegistrationBean' 클래스를 사용하여 필터를 등록할 수 있음
Interceptor
- 인터셉터는 Spring Framework에서 제공하는 기능으로, Dispatcher Servlet과 컨트롤러(Handler) 사이에서 요청과 응답을 처리하는데 사용되는 컴포넌트.
- Filter와 유사한 역할을 수행하지만, Spring의 Context와 통합하여 더 풍부한 기능을 제공함.
- 주로 공통적인 비즈니스 로직을 처리하거나, 특정 핸들러 실행 전후에 추가적인 작업을 수행할 때 사용됨.
● 설정과 등록
- Interceptor는 Spring의 'HandlerInterceptor' 인터페이스를 구현하여 사용함
- Interceptor는 Spring의 설정파일(Java Config나 XML)에 등록하여 사용
- Java Config 사용의 경우, 'WebMvcConfigurer'을 구현하여 'addInterceptors()' 메서드를 오버라이딩하여 Interceptor를 등록함.
- XML 설정 사용의 경우, '<mvc:interceptors>' 요소를 사용하여 Interceptor를 등록함.
● 작동 순서
- 클라이언트의 요청이 Dispatcher Servlet에 도달하면, 등록된 Interceptor들이 순차적으로 호출됨.
- 인터셉터들은 'preHandle()' 메서드를 사용하여 요청을 가로채고 처리하며, 특정 작업을 수행할 수 있음.
- 인터셉터 체인의 마지막에서는 핸들러가 호출되어 요청을 처리함.
- Handler가 처리한 결과에 따라 postHandle() 메서드가 호출되고 응답을 가공할 수 있음
- 최종적으로 응답이 클라이언트로 전달되기 직전에 'afterCompletion()' 메서드가 호출되며, Interceptor 체인의 모든 작업이 완료됨.
● 주요 메서드
- preHandle() : 핸들러 호출 전에 실행되며, 요청을 가로채고 전/후 처리 작업 수행
- postHandle() : 핸들러 호출 후, 뷰가 랜더링되기 전에 실행되며, 요청과 응답을 가공할 수 있음.
- afterCompletion() : 응답이 클라이언트로 전달된 후에 실행되며, Interceptor의 모든 작업이 완료됨
● 주요 기능
- Interceptor를 사용하여 인증, 권한 검사, 로깅, 세션 관리, 트랜잭션 처리 등의 공통적인 비즈니스 로직을 구현할 수 있음
- 특정 핸들러에만 적용되는 기능 또는 모든 핸들러에 적용되는 기능을 구현할 수 있음
- Filter보다 Spring의 컨텍스트와 통합되므로 Spring Bean을 활용하거나 의존성 주입(Dependency Injection)을 받을 수 있음
'Spring' 카테고리의 다른 글
Spring Tiles (스프링 타일즈) (0) | 2023.07.25 |
---|---|
웹 페이지 파일(이미지) 업로드 & 페이지네이션 (0) | 2023.07.24 |
스프링 CRUD Library 프로그램 버전별 정리 後 (0) | 2023.07.17 |
MyBatis 정리 (0) | 2023.07.16 |
(스프링 관련 정보) web.xml / servlet-context.xml / root-context.xml 에 대하여 (1) | 2023.07.16 |
댓글