오늘한일
- Filter 공부
Spring 프레임워크에서의 "Filter"는 주로 웹 애플리케이션에서 HTTP 요청 및 응답을 처리하고 수정하는 데 사용됩니다. 이러한 Filter는 Servlet API의 일부이며, Spring은 이를 활용하여 다양한 작업을 수행할 수 있도록 지원합니다. 여기에서 Spring에서 Filter가 나온 이유에 대해 설명하겠습니다:
- HTTP Request 및 Response 처리:
- Filter는 일반적으로 HTTP 요청이 서블릿에 도달하기 전이나 후에 실행됩니다. 이를 통해 개발자는 요청 및 응답을 조작하고 수정할 수 있습니다.
- 예를 들어, 요청 데이터의 변조, 헤더의 추가 또는 제거, 응답의 압축 등과 같은 작업을 Filter에서 처리할 수 있습니다.
- Cross-cutting Concerns 처리:
- Filter는 관심사의 분리 (Separation of Concerns)를 실현하는 데 도움이 됩니다. 예를 들어, 보안, 로깅, 인증 등과 같은 여러 관심 영역들을 Filter에서 처리할 수 있습니다.
- 재사용성과 모듈화:
- Filter는 재사용 가능한 모듈로써 설계됩니다. 특정한 기능을 담당하는 Filter를 만들어 두면 여러 서블릿에서 이를 공통적으로 사용할 수 있습니다.
- Spring의 AOP와 통합:
- Spring은 관점 지향 프로그래밍 (AOP)을 지원하는데, Filter는 이와 유사한 역할을 하면서도 Spring AOP와 쉽게 통합될 수 있습니다. 이를 통해 코드의 재사용성과 유지보수성이 향상됩니다.
- 서블릿 컨테이너의 표준 기능 활용:
- Spring은 서블릿 컨테이너의 표준 기능을 활용하여 웹 애플리케이션을 개발합니다. Filter는 서블릿 스펙의 일부이므로 Spring은 이를 통해 서블릿 컨테이너의 특정 동작을 재사용할 수 있습니다.
- 전체적인 웹 애플리케이션 아키텍처 구성:
- Filter는 전체적인 웹 애플리케이션 아키텍처를 구성하는 중요한 요소 중 하나로써, 요청의 전처리나 응답의 후처리와 같은 작업들을 통해 애플리케이션의 동작을 조정하고 향상시킬 수 있습니다.
요약하면, Spring에서의 Filter는 HTTP 요청과 응답을 처리하는 중요한 구성 요소로서, 모듈화, 재사용성, 관심사 분리 등의 이점을 제공하여 개발자가 웹 애플리케이션을 보다 효과적으로 개발하고 유지보수할 수 있도록 도와줍니다.
정리
- Filter를 사용하려면 Filter Interface를 Implements 하여 구현해야 한다.
- HTTP 요청이 오면 doFilter() 메서드가 호출된다.
- ServletRequest는 기능이 별로 없으니 HttpServletRequest로 다운캐스팅 해야한다.
- chain.doFilter(request, response)
- (순서를 설정해둔)다음 필터가 있으면 Filter를 호출한다.
- 다음 실행할 필터가 없으면 Servlet을 호출한다.
- 해당 메서드를 호출하지 않으면 다음 단계로 진행되지 않는다.
- → 다음 필터나 Servlet을 호출하지 않는다.
- Filter를 등록하는 방법은 여러가지가 있다. SpringBoot의 경우 FilterRegistrationBean 사용
- setFilter()
- 등록할 필터를 파라미터로 전달하면 된다.
- setOrder()
- Filter는 Chain 형태로 동작한다.
- 즉, 실행될 Filter들의 순서가 필요하다.
- 파라미터로 전달될 숫자에 따라 우선순위가 정해진다.
- 숫자가 낮을수록 우선순위가 높다.
- 필터를 적용할 URL 패턴을 지정한다.
- 여러개 URL 패턴을 한번에 지정할 수 있다.
- 규칙은 Servlet url-pattern과 같다.addUrlPatterns()
- setFilter()
- @WebFilter 어노테이션은 필터 등록이 가능하지만 순서 조절이 안되니 사용하지 않는다.
'TIL' 카테고리의 다른 글
231221_TIL (0) | 2023.12.22 |
---|---|
231220_TIL (0) | 2023.12.20 |
231212_TIL (0) | 2023.12.13 |
231211_TIL (0) | 2023.12.13 |
231208_TIL (0) | 2023.12.11 |