728x90
Filter는 웹 애플리케이션에서 중요한 역할을 하는 컴포넌트입니다. 클라이언트의 요청과 서버의 응답 사이에서 동작하여 다양한 전처리와 후처리 작업을 수행할 수 있습니다. 이번 글에서는 필터의 개념, 구현 방법, 그리고 실제 사용 사례에 대해 자세히 알아보겠습니다.
Filter란 무엇인가?
Filter는 HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 클래스입니다.
- 클라이언트와 서버 자원 사이에 위치
- 요청 전처리와 응답 후처리 가능
- 여러 개의 필터를 체인으로 구성 가능
Filter 구현하기
Filter를 구현하는 방법은 다음과 같습니다
- javax.servlet.Filter 인터페이스 구현
- doFilter() 메서드 오버라이드
- 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의 주요 사용 사례
- 인코딩 설정: 요청의 문자 인코딩을 일괄적으로 설정
- 로깅: 모든 요청에 대한 로그 기록
- 인증 및 권한 검사: 사용자 인증 상태 확인
- 데이터 압축: 응답 데이터 압축으로 전송 효율 향상
- 캐싱: 반복적인 요청에 대한 응답 캐싱
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
'JSP' 카테고리의 다른 글
JSTL의 <c:url> 태그 (0) | 2025.02.27 |
---|---|
JSP에서 EL과 Template Literal 충돌 해결하기 (0) | 2025.02.27 |
EL과 JSTL 완벽 가이드 (0) | 2025.02.26 |
스크립틀릿(Scriptlet) (0) | 2025.02.20 |
Spring MVC에서 @RequestParam과 @ModelAttribute의 차이점 (0) | 2025.02.19 |