Notice
Recent Posts
Recent Comments
Link
쯔이's Dev
필터(Filter) 본문
반응형
웹 애플리케이션에서 요청과 응답의 흐름을 가로채어 특정 작업을 수행하는 기능을 말합니다. 필터는 클라이언트(사용자)와 서버 사이에 위치하여 요청이나 응답을 가로채어 사전 또는 사후에 특정 로직을 실행할 수 있는 기능을 제공합니다.
필터의 주요 기능
필터는 주로 다음과 같은 기능을 수행합니다.
- 요청 및 응답의 전처리 및 후처리:
- 요청이 컨트롤러에 도달하기 전, 응답이 클라이언트로 전달되기 전에 특정 작업을 수행할 수 있습니다.
- 예: 인코딩 설정, 인증 및 권한 확인, 로깅, 요청 데이터 검사 등.
- 보안 검사:
- 사용자가 로그인했는지, 특정 URL에 접근할 권한이 있는지 등을 검사할 수 있습니다.
- 로깅 및 모니터링:
- 요청과 응답에 대해 필요한 정보를 기록하거나 분석하여 성능을 모니터링할 수 있습니다.
- 데이터 변환:
- 요청 데이터의 포맷을 변환하거나, 특정 필드를 추가 및 수정하여 컨트롤러에서 사용하기 쉽게 만들 수 있습니다.
필터의 동작 순서
필터는 요청과 응답의 흐름에서 맨 앞에 위치합니다. 즉, 클라이언트가 요청을 보낼 때 먼저 필터가 요청을 처리한 후, 컨트롤러에 전달됩니다. 응답 역시 필터를 거쳐 클라이언트에게 전달됩니다.
- 클라이언트 → 필터 → 서블릿(컨트롤러) → 필터 → 클라이언트
필터 설정 방법
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
반응형