[Spring] 스프링 필터와 인터셉터

석연걸·2025년 2월 16일

스파르타 코딩클럽

목록 보기
16/17

◆ 개요

  • 로그인 검증 부분에서 필터와 인터셉터를 사용하면 비즈니스 로직에서 공통된 로그인 검증 코드를 제거할 수 있음을 알게 되어서 공부를 해보게 됐다.

◆ 필터

  • J2EE 표준 스펙 기능으로 디스패처 서블릿에 요청이 전달되기 전/후에 url패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다.
  • 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이며, 필터는 스프링 범위 밖인 웹 컨테이너에서 작동을 한다.

◆ 필터의 메소드

  • init : 필터 객체를 초기화하고 서비스에 추가하기 위함
  • doFilter : url패턴에 맞는 모든 HTTP 요청이 디스패처 서블릿으로 전달되기 전에 웹 컨테이너에서 실행되는 메서드
  • destroy : 필터 객체를 서비스에서 제거하고 사용하는 자원을 반환하기 위함

◆ 인터셉터

  • 필터와 달리 Spring이 제공하는 기술로써, 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다.
  • 필터는 웹 컨테이너에서 작동을 하지만 인터셉터는 스프링 컨텍스트에서 작동을 한다.

◆ 인터셉터의 메소드

  • preHandle : 컨트롤러가 호출 되기 전에 실행됨.
  • postHandle : 컨트롤러가 호출 된 후에 실행됨 (view 관련).
  • afterCompletion : 컨트롤러가 호출 된 후에 실행되며, 비즈니스 로직에서 예외가 발생했다면 처리해줌

대상필터(Filter)인터셉터(Interceptor)
관리되는 컨테이너Servlet ContainerSpring Container
Request/Response 조작 가능 여부조작 가능조작 불가능
용도1. 공통된 보안 및 인증/인가 관련 작업
2. 모든 요청에 대한 로깅 또는 검사
3. 이미지/데이터 압축 및 문자열 인코딩
4. Spring과 분리되어야 하는 기능
1. 세부적인 보안 및 인증/인가 공통 작업
2. API 호출에 대한 로깅 또는 검사
3. Controller로 넘겨주는 정보(데이터)의 가공

◆ 최종 설명

필터

  • 스프링과 무관하게 전역적으로 처리해야 하는 작업들을 처리할 수 있다.
  • 대표적으로 보안 공통 작업이 있으며, 인터셉터보다 앞단에서 동작하므로 전역적으로 해야하는 보안 검사를 하여, 올바른 요청이 아닐 경우 차단을 할 수 있다.
  • 또한 필터는 이미지나 데이터의 압축이나 문자열 인코딩과 같이 웹 애플리케이션에 전반적으로 사용되는 기능을 구현하기 적합하다.

인터셉터

  • 클라이언트 요청과 관련되어 전역적으로 처리해야 하는 작업들을 처리할 수 있다.
  • 대표적인 것은 세부적으로 적용해야 하는 인증/인가와 같이 클라이언트 요청과 관련된 작업 등이 있다.
  • 객체 자체를 조작할 수는 없으나, 해당 객체가 내부적으로 갖는 값은 조작할 수 있어 컨트롤러로 넘겨주기 위한 정보를 가공하기에 용이하다.

0개의 댓글