JSP

Servlet Filter의 모든 것

초코너무조코 2025. 2. 26. 21:08
728x90

Filter는 웹 애플리케이션에서 중요한 역할을 하는 컴포넌트입니다. 클라이언트의 요청과 서버의 응답 사이에서 동작하여 다양한 전처리와 후처리 작업을 수행할 수 있습니다. 이번 글에서는 필터의 개념, 구현 방법, 그리고 실제 사용 사례에 대해 자세히 알아보겠습니다.

Filter란 무엇인가?

Filter는 HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 클래스입니다.

  • 클라이언트와 서버 자원 사이에 위치
  • 요청 전처리와 응답 후처리 가능
  • 여러 개의 필터를 체인으로 구성 가능

Filter 구현하기

Filter를 구현하는 방법은 다음과 같습니다

  1. javax.servlet.Filter 인터페이스 구현
  2. doFilter() 메서드 오버라이드
  3. web.xml에 필터 등록 또는 @WebFilter 어노테이션 사용
@WebFilter("*.jsp")
public class MyFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException {
        // 전처리 코드
        System.out.println("필터 전처리 작업");

        chain.doFilter(request, response);

        // 후처리 코드
        System.out.println("필터 후처리 작업");
    }
}

Filter의 주요 사용 사례

  1. 인코딩 설정: 요청의 문자 인코딩을 일괄적으로 설정
  2. 로깅: 모든 요청에 대한 로그 기록
  3. 인증 및 권한 검사: 사용자 인증 상태 확인
  4. 데이터 압축: 응답 데이터 압축으로 전송 효율 향상
  5. 캐싱: 반복적인 요청에 대한 응답 캐싱

Filter Chain

여러 필터를 연결하여 사용할 수 있습니다. 이를 Filter Chain이라고 합니다. web.xml에서 필터 순서를 지정할 수 있으며, 이 순서대로 필터가 실행됩니다.

Filter Mapping

필터를 특정 URL 패턴에 매핑할 수 있습니다

<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

PerformanceFilter Example

다음은 요청 처리 시간을 측정하는 간단한 성능 모니터링 필터 예제입니다

@WebFilter("/*")
public class PerformanceFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException {
        long startTime = System.currentTimeMillis();

        chain.doFilter(request, response);

        long endTime = System.currentTimeMillis();
        System.out.println("요청 처리 시간: " + (endTime - startTime) + "ms");
    }
}

결론

Filter는 웹 애플리케이션의 요청 처리 과정에 유연성을 제공합니다. 공통 기능을 중앙화하고, 코드 재사용성을 높이며, 애플리케이션의 전반적인 구조를 개선하는 데 도움을 줍니다. 효과적으로 활용하면 웹 애플리케이션의 품질과 유지보수성을 크게 향상시킬 수 있습니다.

728x90