본문 바로가기
Spring

(Spring 관련 정보) Dispatcher Servlet, Filter, Interceptor에 대하여

by SuldenLion 2023. 7. 18.
반응형

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)을 받을 수 있음

반응형

댓글