흰 스타렉스에서 내가 내리지

Filter, Interceptor, AOP의 차이 본문

Spring

Filter, Interceptor, AOP의 차이

주씨. 2023. 1. 16. 00:19
728x90

공통 업무에 관련된 코드를 모든 페이지마다 작성해야 한다면 중복된 코드가 많아지고, 서버의 부하를 주고, 유지보수도 쉽지 않게 된다. 

따라서 공통 부분을 따로 빼서 관리하는게 좋은데, 

이 때 사용할 수 있는 것이 이 세가지.

1. Filter

2. Interceptor

3. AOP

 

Interceptor와 Filter는 Servlet 단위에서 실행된다. 반면 AOP는 메소드 앞에 Proxy 패턴의 형태로 실행된다. 

실행순서를 보면 Filter가 가장 밖에 있고, 그 안에 Interceptor, 그 안에 AOP가 있는 형태이다. 

따라서 요청이 들어오면 Filter → Interceptor → AOP → Interceptor → Filter 순으로 거치게 된다. 

 

 

1. Filter

Spring 이 아닌 톰캣과 같은 웹 컨테이너 영역.

일반적으로 인코딩 변환처리, XSS 방어 등의 요청에 대한 처리로 사용된다. 

메서드 : init(), doFilter(), destroy()

- HTTP 또한 Spring이 아닌 WAS에서 처리하는 것이니까 HTTP Request/Response에 대한 로깅은 Filter에서 처리하는게 적절하다.

 

2. Interceptor

Spring이 제공하는 레이어로, DispatcherServlet이 호출되기 전, 호출된 후에 끼어들기 때문에 Spring Context 내부에서 요청과 응답을 가공할 수 있다.

인터셉터는 여러개를 동시에 사용할 수 있다. 

Spring Security, 로그인체크, 권한체크, 프로그램 실행시간 계산작업 등의 처리로 사용된다. 

메서드 : preHandler(), postHandler(), afterCompletion()

 

3. AOP

OOP를 보완하기 위해 나온 개념

객체지향 프로그래밍을 했을 때 줄일 수 없는 부분을 줄이기 위해 종단면(관점)에서 바라보고 처리한다. 

주로 로깅, 트랜잭션, 에러처리 등 비즈니스 단의 메서드에서 조금 더 세밀하게 조정하고 싶을 때 사용한다. 

 

AOP의 포인트컷 

1) @Before :  대상 메서드의 실행 전

2) @After : 대상 메서드의 실행 후

3) @After-returning : 대상 메서드의 정상적인 실행 후 

4) @After-throwing : 예외 발생 후 

5) @Around : 대상 메서드의 실행 전/후

'Spring' 카테고리의 다른 글

@Transactional(readOnly = true)  (0) 2023.01.18
스프링에서 Bean을 주입받는 방식  (0) 2023.01.17
Spring Interceptor , 스프링 인터셉터  (0) 2023.01.16
Spring WebFlux  (0) 2023.01.01
spring security와 jwt를 이용한 로그인  (0) 2022.10.04