쯔이's Dev

필터(Filter) 본문

카테고리 없음

필터(Filter)

jjhim531 2024. 11. 3. 15:35
반응형

웹 애플리케이션에서 요청과 응답의 흐름을 가로채어 특정 작업을 수행하는 기능을 말합니다. 필터는 클라이언트(사용자)와 서버 사이에 위치하여 요청이나 응답을 가로채어 사전 또는 사후에 특정 로직을 실행할 수 있는 기능을 제공합니다.

필터의 주요 기능

필터는 주로 다음과 같은 기능을 수행합니다.

  1. 요청 및 응답의 전처리 및 후처리:
    • 요청이 컨트롤러에 도달하기 전, 응답이 클라이언트로 전달되기 전에 특정 작업을 수행할 수 있습니다.
    • 예: 인코딩 설정, 인증 및 권한 확인, 로깅, 요청 데이터 검사 등.
  2. 보안 검사:
    • 사용자가 로그인했는지, 특정 URL에 접근할 권한이 있는지 등을 검사할 수 있습니다.
  3. 로깅 및 모니터링:
    • 요청과 응답에 대해 필요한 정보를 기록하거나 분석하여 성능을 모니터링할 수 있습니다.
  4. 데이터 변환:
    • 요청 데이터의 포맷을 변환하거나, 특정 필드를 추가 및 수정하여 컨트롤러에서 사용하기 쉽게 만들 수 있습니다.

필터의 동작 순서

필터는 요청과 응답의 흐름에서 맨 앞에 위치합니다. 즉, 클라이언트가 요청을 보낼 때 먼저 필터가 요청을 처리한 후, 컨트롤러에 전달됩니다. 응답 역시 필터를 거쳐 클라이언트에게 전달됩니다.

  1. 클라이언트 → 필터 → 서블릿(컨트롤러) → 필터 → 클라이언트

필터 설정 방법

1. web.xml을 사용하여 필터 설정

web.xml에서 필터를 설정할 수 있습니다. 다음은 인코딩 필터를 설정하는 예제입니다.

xml
코드 복사
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
  • filter-name: 필터의 이름입니다.
  • filter-class: 필터의 구현 클래스입니다.
  • url-pattern: 필터를 적용할 URL 패턴입니다. /*는 모든 URL에 적용합니다.

2. 자바 설정(Java Configuration)으로 필터 설정

스프링 부트나 스프링 설정 파일에서 자바 코드로 필터를 설정할 수도 있습니다.

java
코드 복사
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.CharacterEncodingFilter; @Configuration public class WebConfig { @Bean public FilterRegistrationBean<CharacterEncodingFilter> encodingFilter() { FilterRegistrationBean<CharacterEncodingFilter> filterBean = new FilterRegistrationBean<>(); filterBean.setFilter(new CharacterEncodingFilter("UTF-8", true)); filterBean.addUrlPatterns("/*"); // 모든 요청에 필터 적용 return filterBean; } }

필터와 인터셉터의 차이점

필터와 인터셉터는 모두 요청과 응답을 가로채어 작업을 수행하지만, 적용되는 레이어주된 역할에서 차이가 있습니다.

  • 필터(Filter): 웹 애플리케이션의 가장 앞단에서 요청과 응답을 처리하며, 주로 인코딩 설정, 보안, 로깅 등에 사용됩니다.
  • 인터셉터(Interceptor): 스프링의 핸들러 레벨에서 동작하여 컨트롤러 호출 전후에 처리 로직을 추가하며, 주로 인증, 권한 검사, 비즈니스 로직 전처리 등에 사용됩니다.

필터의 장점

  • 재사용성: 여러 요청에서 공통적으로 필요한 로직을 재사용할 수 있습니다.
  • 관심사 분리: 보안, 로깅 등의 부가적인 로직을 분리하여 코드의 유지보수성을 높입니다.
  • 일관성: 필터를 통해 모든 요청에 대해 일관된 전처리, 후처리 작업을 수행할 수 있습니다.

필터는 웹 애플리케이션의 전반적인 요청 흐름을 제어하고 일관성 있는 작업을 추가하기에 적합합니다.

728x90
반응형