JSP 필터(Filter)란 무엇인가?
서블릿(Servlet)과 JSP 필터는 웹 애플리케이션에서 클라이언트의 요청과 서버의 응답을 가로채어 전·후 처리 작업을 수행하는 자바(Java) 클래스입니다. 필터를 활용하면 인증, 로깅 같은 공통 기능을 핵심 비즈니스 로직과 분리해 구현할 수 있어 코드의 재사용성과 유지보수성이 크게 향상됩니다.
필터의 주요 용도
필터는 크게 두 가지 목적으로 사용됩니다.
- 요청(Request) 가로채기 : 클라이언트의 요청이 백엔드의 서블릿이나 JSP 같은 리소스에 도달하기 전에 이를 가로채 필요한 처리를 수행합니다.
- 응답(Response) 조작 : 서버가 생성한 응답이 클라이언트로 전송되기 전에 내용을 수정하거나 가공합니다.
필터의 종류
서블릿 명세(Specification)에서는 다양한 용도의 필터 유형을 제안하고 있습니다.
- 인증(Authentication) 필터 — 사용자의 신원을 확인합니다.
- 데이터 압축(Data Compression) 필터 — 응답 데이터를 압축해 전송 효율을 높입니다.
- 암호화(Encryption) 필터 — 민감한 데이터를 안전하게 보호합니다.
- 리소스 접근 이벤트 트리거 필터 — 특정 리소스에 접근할 때 이벤트를 발생시킵니다.
- 이미지 변환(Image Conversion) 필터 — 이미지 형식을 변환합니다.
- 로깅 및 감사(Logging & Auditing) 필터 — 요청 기록을 남기고 감사 추적을 지원합니다.
- MIME-TYPE 체인 필터 — 콘텐츠 타입에 따라 처리 흐름을 제어합니다.
- 토큰화(Tokenizing) 필터 — 문자열이나 스트림을 토큰 단위로 처리합니다.
- XSL/T 필터 — XML 콘텐츠를 다른 형식으로 변환합니다.
필터의 배포와 설정 방법
필터는 배포 서술자(Deployment Descriptor) 파일인 web.xml에 선언한 뒤, 애플리케이션 내의 서블릿·JSP 이름 또는 URL 패턴에 매핑하여 사용합니다. Tomcat 환경이라면 web.xml 파일은 일반적으로 <Tomcat 설치 디렉터리>\conf 경로에서 찾을 수 있습니다.
다음은 web.xml에서 필터를 선언하고 모든 요청(URL 패턴 /*)에 매핑하는 기본적인 예입니다.
<filter>
<filter-name>logFilter</filter-name>
<filter-class>com.example.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>logFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>필터의 생성과 실행 순서
JSP 컨테이너가 웹 애플리케이션을 시작할 때, 배포 서술자에 선언된 각 필터의 인스턴스를 생성합니다. 여러 필터가 등록되어 있는 경우에는 web.xml에 선언된 순서대로 차례로 실행되므로, 필터 간 실행 순서가 중요하다면 선언 순서를 신중하게 결정해야 합니다.
마무리
JSP 필터는 인증, 로깅, 압축, 암호화 등 웹 애플리케이션의 공통 관심사를 깔끔하게 분리해 주는 강력한 도구입니다. web.xml 설정만으로 손쉽게 적용할 수 있으므로, 서블릿·JSP 기반 프로젝트를 진행한다면 반드시 익혀두면 좋은 핵심 기술입니다.