필터(Filter) vs 인터셉터(Interceptor)

2024. 10. 22. 00:06·💻 Backend Development/🌱 Spring Framework
반응형

개요

콘서트 프로젝트에서 대기열을 구현하는 과정에서, 대기열 검증 로직을 어디서 처리할지 고민하게 되었다.
대기열 토큰을 가지고 입장 가능 여부를 검증하는 로직을 작성했는데, 이 로직을 필터나 인터셉터 중 어디에 두는 게 적절할지 알아보면서, 필터와 인터셉터의 차이점과 용도에 대해 정리해보았다.

필터(Filter)

필터는 J2EE 스펙에서 제공하는 기능으로, 디스패처 서블릿(Dispatcher Servlet) 요청 전에 부가적인 작업을 처리할 수 있다. 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이며, 필터는 스프링의 범위를 벗어나 톰캣과 같은 웹 컨테이너에서 관리된다. 즉, 디스패처 서블릿의 전후에 처리되는 것이다.

필터는 디스패처 서블릿 전에 특정 요청을 선별하거나, 요청과 응답을 가로채는 등의 작업을 수행할 수 있다.

디스패처 서블릿에 대한 자세한 내용은 Dispatcher Servlet (디스패처 서블릿) 글을 참고하자.

인터셉터(Interceptor)

인터셉터는 스프링이 제공하는 기능으로, 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 요청과 응답을 가로채거나, 부가적인 작업을 수행할 수 있다. 필터와 달리 스프링 컨테이너에 의해 관리되며, 핸들러 매핑을 통해 컨트롤러 실행 전에 실행된다.

디스패처 서블릿은 적절한 컨트롤러를 찾기 위해 핸들러 매핑을 사용하는데, 그 결과로 HandlerExecutionChain이 반환된다. 이 실행 체인에 인터셉터가 등록되어 있으면, 인터셉터를 순차적으로 거쳐서 컨트롤러가 실행되며, 등록된 인터셉터가 없다면 바로 컨트롤러가 실행된다.

필터(Filter)와 인터셉터(Interceptor)의 차이 및 용도

구분 필터(Filter) 인터셉터(Interceptor)
관리 컨테이너 서블릿 컨테이너(톰캣 등) 스프링 컨테이너
스프링의 예외처리 여부 X O
Reqeust/Response
객체 조작 가능 여부
O X
처리 시점 디스패처 서블릿 전/후 디스패처 서블릿 이후, 컨트롤러 호출 전/후
용도 - 공통된 보안 및 인증/인가 관련 작업
- 모든 요청에 대한 로깅 또는 감사
- 이미지/데이터 압축 및 문자열 인코딩
- Spring과 분리되어야 하는 기능

- 세부적인 보안 및 인증/인가 공통 작업
- API 호출에 대한 로깅 또는 감사
- Controller로 넘겨주는 정보(데이터)의 가공

참고 링크

[Spring] 필터(Filter) vs 인터셉터(Interceptor) 차이 및 용도 - (1)

반응형

'💻 Backend Development > 🌱 Spring Framework' 카테고리의 다른 글

Dispatcher Servlet (디스패처 서블릿)  (0) 2024.10.21
Spring Global Exception Handler (전역 예외 처리)  (0) 2024.10.20
'💻 Backend Development/🌱 Spring Framework' 카테고리의 다른 글
  • Dispatcher Servlet (디스패처 서블릿)
  • Spring Global Exception Handler (전역 예외 처리)
KilPenguin
KilPenguin
penguin-dev 님의 블로그 입니다.
    반응형
  • KilPenguin
    Penguin Dev
    KilPenguin
  • 전체
    오늘
    어제
    • 분류 전체보기 (41)
      • 🏗️ Architecture & Design (2)
        • 📐 Clean Architecture (2)
        • 🔄 Design Patterns (0)
      • ⚡ Performance & Optimizatio.. (4)
        • 🗄️ Database Tuning (2)
        • 🚀 Caching Strategy (1)
        • 🖥️ Server Optimization (1)
      • 💻 Backend Development (9)
        • 🔒 Concurrency Control (5)
        • 🌱 Spring Framework (3)
        • 📨 Event-Driven Architecture (0)
        • ☕ Java Fundamentals (1)
      • 🔧 Dev Tools & Environment (4)
        • 🔄 Version Control (2)
        • 📝 Documentation Tools (1)
        • 🎨 Blog Setup (1)
      • 📈 Career & Growth (21)
        • 🎓 Learning Journey (15)
        • 🎤 Conference & Community (6)
      • 🎯 Personal (1)
        • 👋 Introduction (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    항해솔직후기
    인프런
    항해플러스
    개발바닥밋업
    항해99
    판교퇴근길밋업
    항해플러스후기
    항해플러스백엔드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
KilPenguin
필터(Filter) vs 인터셉터(Interceptor)
상단으로

티스토리툴바