본문 바로가기
public void static main/Java

[Spring] Filter, AOP, Interceptor 그리고 Middleware

by 햄리뮤 2025. 1. 2.
반응형

실무에서 개발하면서 찾아봐야지~ 찾아봐야지~ 했던 filter, aop, interceptor 부분을 드디어 공부해본다!

 

차이점 미리보기

특징 Filter AOP Interceptor Middleware
적용 레벨 HTTP 요청/응답 메서드/클래스 컨트롤러 전후 요청/응답
주요 사용 사례 보안, 로깅 트랜잭션, 로깅 인증, 데이터 가공 요청 처리
프레임워크 종속성 낮음 높음(Spring 등) 높음(Spring MVC) 높음 (Spring Boot)
설정 위치 web.xml/Java Config Bean 등록 Handler 설정 Spring Config
코드 복잡도 중간 높음 중간 낮음

요약

  • Filter는 주로 HTTP 요청/응답을 다루며, 프레임워크에 종속되지 않아 표준적이다.
  • AOP는 메서드 수준의 로직 분리에 적합하며, 코드 재사용성과 유지보수성이 뛰어나다.
  • Interceptor는 컨트롤러 요청 처리 전후 작업에 적합하며, Spring MVC에서 주로 사용된다.
  • Middleware는 Spring Boot 애플리케이션에서 요청 처리를 간소화하고 유연하게 설계할 수 있다.

https://velog.io/@soyeon207/Spring-Filter-Interceptor-AOP


Filter

  • 정의: Java Servlet API에서 제공하는 기능으로, HTTP 요청/응답을 전처리하거나 후처리할 때 사용된다.
  • 사용 목적:
    • 요청/응답 로깅
    • 보안 검사 (인증/인가)
    • Content-Type 설정
  • 위치: Servlet 컨테이너 레벨에서 동작하며, 특정 URL 패턴에 대해 실행된다.
  • 주요 인터페이스: java.servlet.filter
  • 실행 흐름:
    • 요청 -> Filter -> Servlet/Controller -> Filter -> 응답
  • 장점:
    • 요청/응답을 처리하기 위한 표준화된 방식.
    • URL 매핑으로 손쉽게 설정 가능.
  • 단점:
    • 특정 프레임워크에 종속되지 않아, 프레임워크의 고급 기능과 통합이 어려울 수 있다.

AOP(Aspect-Oriented Programming)

  • 정의: 프로그램에서 공통적으로 필요한 기능을 따로 분리해서 관리하는 방법.
  • 사용 목적:
    • 로깅
    • 트랜잭션 관리
    • 보안/인증
  • 위치: Spring AOP 또는 AspectJ와 같은 프레임워크에서 제공되며, 메서드 실행 전후 등 다양한 지점에 적용 가능.
  • 주요 인터페이스/어노테이션:
    • Spring: @Aspect, @Before, @After, @Around
  • 실행 흐음:
    • 메서드 호출 전후에 실행되며, 개발자가 정의한 포인트컥(Pointcut)과 Advice를 통해 동작.
  • 장점:
    • 코드 중복 제거.
    • 메서드, 클래스 레벨에서 미세한 제어 가능.
  • 단점:
    • 추가적인 학습 곡선.
    • Spring 프레임워크에 의존

Interceptor

  • 정의: 주로 Spring MVC, JAX-RS 등 프레임워크에서 제공하는 요청/응답 가로채기 기능.
  • 사용 목적:
    • 요청 데이터 가공
    • 사용자 인증/인가
    • 특정 컨트롤러 로직 실행 전후의 공통 작업
  • 위치: 컨트롤러 레벨에서 동작하며, 요청/응답을 가로챔
  • 주요 인터페이스:
    • Spring: HandlerInterceptor (preHandle, postHandle, afterCompletion 메서드 제공)
  • 실행 흐름:
    • DispatcherServlet -> Interceptor -> Controller -> View
  • 장점:
    • Spring MVC 환경에 최적화.
    • 특정 컨트롤러에 대해 선택적으로 적용 가능.
  • 단점:
    • Spring MVC에 종속적.

Middleware

  • 정의: 주로 Spring Boot에서 사용되며, 요청과 응답을 처리하는 중간 계층, Filter와 유사하지만 더 유연하게 구성가능.
  • 사용 목적:
    • API 요청 처리
    • 공통 로직 구현
  • 위치: Filter와 비슷하게 컨테이너에서 동작하지만, 프레임워크에 종속적임
  • 주요 구현 방식
    • Spring Boot에서 @Component로 구현된 빈에 대해 적용.
  • 장점:
    • Spring Boot 애플리케이션과 밀접하게 통합.
  • 단점:
    • 프레임워크 의존성 존재.

https://www.jumigoods.com/?category_id=3547647

궁금한부분

요약

  • Filter <-> AOP. 일부 교체 가능하지만, Filter는 HTTP 요청/응답 처리에, AOP는 메서드 레벨의 로직에 특화되어있다.
  • Filter <-> Interceptor. Filter로 Interceptor를 대체할 수는 있지만, Spring MVC와의 밀접한 통합을 활용하려면 Interceptor가 더 적합하다.
  • Interceptor <-> AOP. 일부 경우에 교체 가능하지만, Interceptor는 요청/응답의 흐름을 다루는 반면 AOP는 메서드 호출 자체에 초점을 맞춘다.

Filter 대신 AOP를 사용해도 될까?

  • 가능 여부: 부분적으로 가능하지만, 둘은 설계 철학과 적용 대상이 다르다.
  • 설명:
    • Filter는 HTTP 요청/응답 흐름을 가로채서 처리하는 데 특화되어 있다.
      • 예: 인증, 인가, 로깅, 응답 헤더 설정 등.
    • AOP는 메서드 호출 전후나 클래스 레벨에서 공통 로직을 처리한다.
      • 예: 트랜잭션 관리, 메서드 실행 로깅, 예외 처리 등.
  • 대채 가능성:
    • 가능한 경우:
      • Filter에서 하는 작업이 주로 특정 컨트롤러 메서드나 서비스 로직과 관련된 경우, AOP로 대체할 수 있다.
        • 예: 특정 엔트포인트에 대한 로깅을 메서드 실행 시점에 처리.
    • 불가능한 경우:
      • AOP는 HTTP 요청 자체를 직접 다룰 수 없다. 요청 객체(HttpServletRequest) 나 응답 객체(HttpServletResponse)를 다뤄야 하는 작업은 Filter가 필요하다.

AOP 대신 Filter를 사용해도 될까?

  • 가능 여부: 불가능하거나 비효율적인 경우가 많다.
  • 설명:
    • AOP는 메서드 수준에서 동작하며, 특정 클래스나 메서드에 대한 세밀한 동작이 가능하다.
      • Filter는 HTTP 요청/응답에만 적용되므로, 특정 메서드의 호출 전후를 다루는 데 적합하지 않다.
  • 대체 가능성:
    • 불가능한 경우:
      • 메서드 실행 전후에만 적용해야 하는 트랜잭션 관리, 메서드 호출 전후 로깅 등은 Filter로 대체할 수 없다.
    • 가능한 경우:
      • AOP로 구현하려던 작업이 전적으로 HTTP 요청/응답의 전처리/후처리라면 Filter로도 구현한 수 있다.

Interceptor 대신 Filter나 AOP를 사용해도 될까?

  • 가능 여부: 부분적으로 가능, 하지만 Interceptor의 특징에 따라 달라진다.
  • 설명: 
    • Interceptor는 Spring MVC에서 요청/응답 흐름 중 컨트롤러 전후에서 동작한다.
    • Filter는 Interceptor처럼 HTTP 요청/응답을 다룰 수 있지만, Spring MVC와 밀접하게 연동되는 Interceptor의 기능은 완벽히 대체하지 못한다.
    • AOP는 메서드 호출 시점에서 동작하므로, 요청 자체보다는 컨트롤러 내부 로직을 다루는 데 적합하다.
  • 대체 가능성
    • Filter로 대체 가능한 경우:
      • 모든 요청에 대해 동일한 전처리/후처리가 필요할때 (예: CORS 설정, 인증/인가).
    • AOP로 대체 가능한 경우:
      • 특정 컨트롤러 메서드의 실행 전후에만 로직을 적용해야 할 때.
    • 대체 불가능한 경우:
      • Interceptor는 Spring MVC의 Handler와 View 처리 단계에 개입할 수 있다. 이런 동작은 Filter나 AOP로 대체하기 어렵다.

 

일단 개념적인부분을 정리해보았다!

 

** 그냥 하루하루 개인 공부한 것을 끄적 거리는 공간입니다.

이곳 저곳에서 구글링한 것과 강의 들은 내용이 정리가 되었습니다.

그림들은 그림밑에 출처표시를 해놓았습니다.

문제가 될시 말씀해주시면 해당 부분은 삭제 하도록하겠습니다. **

반응형

댓글