당니의 개발자 스토리

Filter 본문

Java, Spring

Filter

clainy 2026. 4. 21. 09:50

Filter 개념과 ControllerHelper의 차이

Front Controller를 쓰면 공통 로직을 한 곳으로 모을 수 있다.


그런데 여전히 한계가 있다..

 

왜냐하면 Controller 안에서만 공통 처리가 가능하기 때문이다.

예를 들어 이런 상황을 보자.

  • 로그인 여부 체크
  • 요청 로그 기록
  • XSS 방지
  • 인증 토큰 검사

이건 특정 컨트롤러가 아니라 모든 요청에 적용되어야 하는 기능이다.

그래서 나온 게 Filter다.

 

이게 뭔 말인가?

Filter는 요청이 서블릿에 들어가기 전에 가로채서 처리하는 구조이다.

즉,

클라이언트 → 서버 → (Filter) → (Servlet/Controller) → 응답

이런 흐름으로 처리된다. 따라서, Filter는 Controller보다 에서 동작한다.

근데, 만약 로그인을 안했으면 막아야된다는 로직이 필요할 때,

if (!isLogin()) {
	return;
}
 

이걸 모든 컨트롤러마다 다 써야하는데 너무 비효율적이다.

그래서 컨트롤러로 들어가기 전에 Filter에서 이것을 처리해주는 것이다!


클라이언트 → 필터1 → 필터2 → 서블릿 → 필터2 → 필터1 → 응답
 

보통 흐름이 이런데, 코드로 보면

chain.doFilter(request, response);
 

이렇게 하고, 아래처럼 나뉜다.

  • chain 호출 전 → 요청 처리
  • chain 호출 → 다음 필터 또는 서블릿
  • chain 호출 후 → 응답 처리

예를 들어 로그 필터를 만들면 이런 구조다.

System.out.println("요청 들어옴");
chain.doFilter(request, response);
System.out.println("응답 나감");

 

 

그렇다면 대체 ControllerHelper랑 뭐가 다른거지? 라고 질문할 수도 있다.

 

아까 설명했듯이 이 둘의 차이는 적용 범위다.

ControllerHelper는 특정 Controller 안에서만 동작한다.
Filter는 모든 요청 앞단에서 동작한다.

즉, ControllerHelper = 내부 코드의 공통 처리를 담당하는 것이고,
Filter = 전체 요청을 공통 처리하는 것이다.


Filter를 쓰는 대표적인 이유는 세 가지다.

 

첫 번째 인증
로그인 안 되어 있으면 접근 차단

 

두 번째 로깅
어떤 요청이 들어왔는지 기록

 

세 번째 보안
XSS, CSRF 같은 공격 방지

 

다음에는 Filter에 대해서 더욱 깊이 들어가보겠다!!