본문 바로가기

개발Blog/웹개발(Spring)

[웹개발/spring] Filter 란 무엇인가 ?

반응형

웹개발 하다보면 꼭 접하는 내용으로 이전 포스팅에서
Filter, Interceptor, AOP 에 대한 간단한 개념과 차이점에 대해 설명했었는데요!
이번 글에서는 하나하나 좀더 파헤쳐보겠습니다!

Filter란?

혹시 이런 상황 겪어보신 적 있나요?
“사용자가 로그인했는지 확인해야 하는데, 모든 요청마다 일일이 확인하는 코드를 컨트롤러에 넣어야 하나?”
“CORS 설정이나 공통 헤더 추가 같은 작업도 해야 하는데, 이걸 다 컨트롤러마다 넣는 건 너무 번거로워!”

이럴 때 딱 필요한 게 바로 Filter입니다!
Filter는 웹 애플리케이션의 "첫 번째 관문" 역할을 해요. 요청(request)이 들어오거나 응답(response)이 나갈 때,
중간에 필요한 작업을 해주는 멋진 도구죠.

 

※ CORS 란?

   - 서로 다른 출처 간의 요청을 안전하게 허용하기 위한 규칙

   - CORS는 서버와 브라우저가 "이 요청을 해도 괜찮아?" 하고 대화하는 과정을 나타내요!

 


 

Filter는 이런 일을 해요!

1. 요청(Request) 전처리

요청이 서버에 들어오면, 서블릿이나 컨트롤러에 도달하기 전에 필터가 먼저 작업을 합니다.
예를 들어:

  • 로그인 확인: "이 요청, 로그인 안 한 사람은 처리 못 해!"
  • CORS 설정: 다른 도메인에서 온 요청을 허용하거나 거부.
  • 로깅: "누가, 언제, 무슨 요청을 보냈는지 기록하자!"

2. 응답(Response) 후처리

클라이언트로 응답이 나가기 전에, 필터가 응답 데이터에 손을 댈 수도 있어요.

  • 공통 헤더 추가: "응답에 특정 헤더를 추가하자."
  • 응답 데이터 변경: 응답 데이터를 JSON 형식으로 포맷팅하거나 암호화.

3. 체인 방식으로 여러 필터 연결

필터는 하나만 쓰는 게 아니에요.
예를 들어,

  1. 첫 번째 필터: 로그인 체크.
  2. 두 번째 필터: 요청 데이터 로깅.
  3. 세 번째 필터: 응답 데이터 가공.

이렇게 여러 필터가 체인(chain) 형태로 순차적으로 연결되어 작업을 처리합니다.

 


Filter를 어떻게 구현하나요?

1. Filter 인터페이스 구현

Filter를 사용하려면, javax.servlet.Filter 인터페이스를 구현하면 됩니다. 예제 코드를 볼까요?

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter(urlPatterns = "/*") // 모든 요청에 적용
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) {
        // 필터 초기화 작업 (필요 시)
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException {
        System.out.println("필터 시작: 요청 처리 전");
        
        // 다음 필터 또는 서블릿 호출
        chain.doFilter(request, response);

        System.out.println("필터 끝: 응답 처리 후");
    }

    @Override
    public void destroy() {
        // 필터 종료 작업 (필요 시)
    }
}
 

2. 요점 정리

  • init(): 필터가 초기화될 때 한 번 실행.
  • doFilter(): 요청/응답이 필터를 지나갈 때마다 실행.
  • destroy(): 필터가 종료될 때 한 번 실행.

Filter의 작동 흐름

  1. 클라이언트가 요청을 보냅니다.
  2. 요청이 Filter를 통과합니다. (필요한 작업 수행)
  3. 요청이 서블릿/컨트롤러로 전달됩니다.
  4. 컨트롤러에서 처리한 응답이 다시 Filter를 통과합니다.
  5. 최종적으로 클라이언트에게 응답이 전달됩니다.

 


Filter의 장점

  • 코드 중복 제거: 공통 작업을 한 번에 처리할 수 있어요.
  • 유연한 설정: 원하는 요청에만 필터를 적용할 수 있어요.
  • 요청/응답 관리: 서버로 들어오는 모든 요청과 나가는 응답을 한곳에서 제어 가능!

2025.01.17 - [개발Blog/웹개발(Spring)] - [웹개발/spring] Filter, Interceptor, AOP 의 개념 및 차이

 

[웹개발/spring] Filter, Interceptor, AOP 의 개념 및 차이

Filter, Interceptor, AOP? 뭐가 다를까?웹 개발하다 보면 **요청(request)**이 들어오고 **응답(response)**이 나가는 과정에서 뭔가를 가로채거나,추가로 처리해야 할 때가 많죠? 예를 들면 "로그인을 안 했으

godbokdol2.tistory.com