필터(Filter)란
필터는 이름에서도 알 수 있듯 정수기 필터, 에어컨 필터, 담배의 필터와 같이 무언가를 걸러내는 필터를 말합니다. JSP/Servlet 에서도 필터의 개념은 같지만 걸러내는 대상이 다릅니다.

Jsp/Servlet에서의 필터는 서블릿 2.3 부터 추가된 기능으로 클라이언트(브라우저)가 서버로 요청을 보내올때 요청이 서블릿으로 전달되기 전, 후에 필터링하기 위한 기술을 의미합니다.

Jsp/Servlet 스펙에서 필터는 사용하기 쉽도록 javax.servlet.Filter 인터페이스로 제공하고 있으며 이것을 구현하고 web.xml에 등록하기만 하면 간단하게 사용할 수 있습니다.

인터페이스의 구현 메서드는 서블릿의 service() 메서드나 doGet() doPost() 메서드와 유사하기때문에 매우 익숙하게 사용할 수 있습니다.



필터의 필터링 대상
필터에 대한 설명에서 요청이 Servlet이나 웹 자원으로 전달되기 전과 후에 각각 필터링 할 수 있다고 했습니다. 이는 정확하게 설명하면 요청(Request)이 Servlet이나 JSP등의 처리 메서드나 기타 자원에 전달되기 전에 한 번 그리고 요청에 대한 처리를 완료하고 응답(Response)이 클라이언트로 전송되기 전에 한 번 이라고 할 수 있습니다.









필터가 필요한 이유
필터가 필요한 이유는 웹 컴포넌트(Servlet, Jsp)에서 공통적으로 처리해야할 일들을 필터를 통해 처리할 수 있기 때문입니다.

예를 요청 데이터의 본문을 UTF-8로 인코딩 하는 부분은 거의 대부분의 웹 컴포넌트에서 처리하는 로직입니다.
request.setCharacterEncoding("utf-8");                                                
String param = request.getParameter("param");
cs

그러나 웹 어플리케이션에 수십 수백개의 웹 컴포넌트를 개발해야 한다면 이런 한글 인코딩 처리 코드는 수백여개의 중복이 발생할 것입니다. 매번 웹 컴포넌트를 개발할때마다 인코딩 처리 로직을 넣어주는것도 문제지만, 만약 웹 어플리케이션을 수출한다거나 정책이 바뀌어 인코딩처리를 다른것으로 바꿔주어야 한다면 중복되는 모든 코드를 각각 바꿔주어야 하므로 유지보수 측면에서도 좋지 못한 방법일 것입니다.

필터는 이런 상황에서 인코딩 처리 부분을 분리하여 개발을 빠르고 유지보수 측면에서 나중에 코드를 변경할때도 쉽게 수정이 용이하게 해줍니다. 인코딩 정책이 바뀐다 하더라도 필터부분만 수정해주면 됩니다.




필터의 기능 및 사용 예
필터의 기능은 다음과 같습니다.
  • 서블릿이 호출되기 전에 요청(request)를 가로채어 조작한다.
  • 서블릿이 호출되기 전에 요청을 가로채어 점검할 수 있다.
  • 서블릿이 호출되기 전에 HTTP 요청의 헤더를 조작할 수 있다.
  • 서블릿이 호출된 이후 응답(response)를 출력하기 전에 가로채어 조작한다.
  • 서블릿이 호출된 이후 응답 헤더를 조작할 수 있다.

그에따른 사용 예는 다음과 같습니다.
  • 로그인여부나 권한 검사와 같은 인증 기능
  • 요청이나 응답에 대한 로그(기록) 기능
  • 오류 처리 기능
  • 데이터 압축이나 변환 기능
  • 인코딩 처리 기능 등..




관련글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,