본문 바로가기
스프링 (Spring)

필터(filter), 인터셉터(interceptor), AOP(Aspect-Oriented Programming) 살펴보기

by codeyaki 2023. 7. 22.
반응형

Spring에서 필터와 인터셉터 그리고 AOP는 전부 공통 로직을 분리하여 처리하기 위해서 사용하기 위해서 사용되는 기능이다.

하지만 사용방법과 적용되는 위치의 차이가 있기 때문에 알맞게 사용해야 한다.

 

큰 구조는 Spring mvc Request 라이프 사이클을 통해 확인할 수 있다. ( AOP는 표시되어 있지 않지만...)

필터(Filter):

  • 필터는 서블릿 컨테이너(예: Tomcat, Jetty)에서 요청과 응답을 가로채는 기능이다.
  • 주로 요청과 응답의 헤더를 수정하거나 인코딩을 처리하는 등의 작업에 사용된다.
  • Spring의 javax.servlet.Filter 인터페이스를 구현하여 사용한다.
  • 필터는 web.xml에 등록하여 적용되고, Spring Boot에서는 FilterRegistrationBean을 통해 간편하게 등록하여 사용할 수 있다.

인터셉터(Interceptor):

  • 인터셉터는 Spring의 컨트롤러(Controller)에 대한 요청을 가로채는 기능이다.
  • 컨트롤러가 실행되기 전에 또는 후에 공통 기능(예: 로깅, 권한 검사, 세션 처리 등)에 사용된다.
  • Spring MVC에서 사용되며, HandlerInterceptor 인터페이스를 구현하여 생성된다.
  • 인터셉터는 스프링 컨텍스트에 등록되어 애플리케이션의 모든 컨트롤러에 영향을 미친다. (url을 통해 적용 범위 설정 가능)

AOP(Aspect-Oriented Programming):

  • AOP는 핵심 기능과 공통 기능을 분리하여 모듈화 하는 프로그래밍 패러다임이다.
  • 주요 목표는 코드의 재사용성, 유지 보수성, 가독성을 향상한다.
  • 주로 로깅, 트랜잭션 관리, 보안, 캐싱과 같은 공통 관심사를 따로 모듈화 하여 여러 곳에서 재사용할 수 있도록 한다.
  • Spring AOP는 프록시 기반으로 동작하며, 주로 런타임에 동작하는 기능을 처리한다.
  • AOP는 메서드 레벨에서 적용될 수 있으며, Spring에서는 @Aspect 어노테이션과 함께 @Before, @After, @Around 등의 어노테이션을 사용하여 AOP를 구현한다.

즉, 필터는 서블릿 컨테이너에서 동작(디스패처 서블릿 이전), 인터셉터는 디스패처 서블릿과 각 컨트롤러 사이에서 동작, 마지막으로 AOP는 인터셉터 이후에 동작하게 된다.

 

전체적인 구조를 잘 그려놓은 다이어그램을 발견해서 공유하고자 가져왔다.

출처: https://goddaehee.tistory.com/154

반응형