Java/Basic

Filter(필터)란?

마시멜로를찾아서 2025. 3. 24. 10:38
반응형

필터(Filter)는 웹 애플리케이션에서 클라이언트의 요청(request)과 서버의 응답(response)이 서블릿이나 컨트롤러에 도달하기 전과 후에 미리 처리하는 기능을 의미합니다.

즉, Servlet 요청과 응답을 가로채어 원하는 작업(인증, 권한 체크, 로깅, 인코딩 등)을 수행할 수 있는 유용한 기능입니다.

필터의 가장 큰 특징은 서블릿이나 컨트롤러를 수정하지 않고도 전체 요청 흐름을 관리할 수 있다는 것입니다.


⚙️ Filter의 동작 과정

일반적인 필터의 처리 과정은 아래와 같습니다.

클라이언트 요청 ▶️ 필터 ▶️ 서블릿(컨트롤러) ▶️ 필터 ▶️ 클라이언트 응답

즉, 요청 시와 응답 시 양방향에서 작동할 수 있습니다.


Filter의 주요 용도

  • 요청과 응답의 인코딩 설정
  • 인증 및 권한 검사
  • 로깅 및 요청/응답 정보 추적
  • 예외 처리와 같은 공통적인 작업 수행

📌 Filter 사용 예시 (Java Servlet)

아래는 요청과 응답에 대한 간단한 로깅 예시입니다.

1️⃣ 필터 클래스 작성 (LoggingFilter.java)

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class LoggingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 필터 초기화 시 호출
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;

        // 요청 정보 로깅
        System.out.println("Request URL: " + req.getRequestURI());

        // 요청을 다음 필터 또는 서블릿으로 전달
        chain.doFilter(request, response);

        // 응답 후 로깅 (옵션)
        System.out.println("Response 완료됨");
    }

    @Override
    public void destroy() {
        // 필터 종료 시 호출 (리소스 해제 등)
    }
}
  • doFilter 메소드에서 실제 필터의 로직을 구현합니다.

2️⃣ 필터 설정 (web.xml)

<web-app>
    <!-- 필터 설정 -->
    <filter>
        <filter-name>LoggingFilter</filter-name>
        <filter-class>com.example.LoggingFilter</filter-class>
    </filter>

    <!-- 필터 매핑 (모든 요청에 필터 적용) -->
    <filter-mapping>
        <filter-name>LoggingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
  • url-pattern을 통해 필터를 특정 URL에만 적용하거나 전체에 적용할 수 있습니다.

🌱 Spring Framework에서의 Filter

스프링에서는 필터를 @Component로 등록하거나, FilterRegistrationBean을 사용하여 추가로 구성할 수도 있습니다.

예시 (스프링 부트 방식)

@Component
public class MySpringFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        System.out.println("Spring Filter 작동 전");
        
        chain.doFilter(request, response);

        System.out.println("Spring Filter 작동 후");
    }
}
  • 스프링 부트에서는 자동으로 필터를 인식하여 처리합니다.

🚩 정리

필터는 웹 애플리케이션에서 공통적으로 처리되어야 하는 작업을 손쉽게 관리할 수 있도록 해줍니다. 요청과 응답을 제어하고 필요한 기능을 모듈화하여 효율적인 애플리케이션을 구축하는 데 필수적인 도구입니다.

반응형