당니의 개발자 스토리
Filter 본문
Filter 개념과 ControllerHelper의 차이
Front Controller를 쓰면 공통 로직을 한 곳으로 모을 수 있다.
그런데 여전히 한계가 있다..
왜냐하면 Controller 안에서만 공통 처리가 가능하기 때문이다.
예를 들어 이런 상황을 보자.
- 로그인 여부 체크
- 요청 로그 기록
- XSS 방지
- 인증 토큰 검사
이건 특정 컨트롤러가 아니라 모든 요청에 적용되어야 하는 기능이다.
그래서 나온 게 Filter다.
이게 뭔 말인가?
Filter는 요청이 서블릿에 들어가기 전에 가로채서 처리하는 구조이다.
즉,
클라이언트 → 서버 → (Filter) → (Servlet/Controller) → 응답
이런 흐름으로 처리된다. 따라서, Filter는 Controller보다 앞에서 동작한다.
근데, 만약 로그인을 안했으면 막아야된다는 로직이 필요할 때,
if (!isLogin()) {
return;
}
이걸 모든 컨트롤러마다 다 써야하는데 너무 비효율적이다.
그래서 컨트롤러로 들어가기 전에 Filter에서 이것을 처리해주는 것이다!
보통 흐름이 이런데, 코드로 보면
이렇게 하고, 아래처럼 나뉜다.
- chain 호출 전 → 요청 처리
- chain 호출 → 다음 필터 또는 서블릿
- chain 호출 후 → 응답 처리
예를 들어 로그 필터를 만들면 이런 구조다.
System.out.println("요청 들어옴");
chain.doFilter(request, response);
System.out.println("응답 나감");
그렇다면 대체 ControllerHelper랑 뭐가 다른거지? 라고 질문할 수도 있다.
아까 설명했듯이 이 둘의 차이는 적용 범위다.
ControllerHelper는 특정 Controller 안에서만 동작한다.
Filter는 모든 요청 앞단에서 동작한다.
즉, ControllerHelper = 내부 코드의 공통 처리를 담당하는 것이고,
Filter = 전체 요청을 공통 처리하는 것이다.
Filter를 쓰는 대표적인 이유는 세 가지다.
첫 번째 인증
로그인 안 되어 있으면 접근 차단
두 번째 로깅
어떤 요청이 들어왔는지 기록
세 번째 보안
XSS, CSRF 같은 공격 방지
다음에는 Filter에 대해서 더욱 깊이 들어가보겠다!!
'Java, Spring' 카테고리의 다른 글
| Spring이 JDBC와 트랜잭션 작업을 줄여주는 방식 (1) | 2026.05.06 |
|---|---|
| 프레임워크와 라이브러리의 차이, IoC 제어의 역전 (0) | 2026.05.04 |
| gRPC란? REST와 gRPC의 차이 (0) | 2026.04.21 |
| Filter Mapping과 Dispatcher (0) | 2026.04.21 |
| Servlet 구조와 Front Controller 패턴 (0) | 2026.04.20 |
