관련된 내용 틈틈히 정리해보자!
Filter, Interceptor, AOP
- 웹서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종
- 기존에 서버는 정적 자료(HTML, 사진, 글)를 주고받았지만, 다양한 기능이 요구되면서 동적인 페이지를 제공하기 위해 서블릿 탄생
- 서블릿은 클라이언트의 요청에 맞춰 동적인 결과를 만들어주는 자바 웹 프로그래밍 기술이다.
- 웹 어플리케이션 서버의 서블릿 컨테이너에서 동작하고
- request를 받으면 요청에 맞는 로직을 실행한 후
- 클라이언트에게 HTTP 형식으로 응답한다
- 서블릿 예제 : https://java-is-happy-things.tistory.com/23
filter, interceptor, AOP
filter
- 요청과 응답을 거른 뒤 정제하는 역할
- dispatcherServlet 이전에 실행되는 경우 : 필터가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나, 체크를 수행
- 자원의 처리가 끝난 후 실행되는 경우 : 응답 내용에 대해서 변경하는 처리 진행
- 스프링 컨텍스트 '외부'에 존재하여 스프링과 무관한 자원에 대해 동작
- 인코딩 변환 처리, XSS 방어 처리 등에 사용된다.
interceptor
- 요청에 대한 작업 전후로 "가로채서" 처리
- 스프링 컨텍스트 '내부'에서 dispatcherServlet이 컨트롤러 호출하기 전, 후에 끼어들어 컨트롤러에 관한 요청과 응답에 간섭하여 처리한다
- 스프링의 모든 bean 객체에 접근할 수 있다
- 인터셉터는 여러개를 사용할 수 있고, 로그인 체크, 권한체크, 로그확인 등의 업무를 처리
AOP
Aspect-Oriented Programming : https://velog.io/@backtony/Spring-AOP-%EC%B4%9D%EC%A0%95%EB%A6%AC
핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것
OOP와는 다르게 부가기능적인 측면에서 보았을때 공통된 요소를 추출하자는 것입니다. 이때 가로(횡단) 영역의 공통된 부분을 잘라냈다고 하여, AOP를 크로스 컷팅(Cross-Cutting) 이라고 부르기도 합니다.
-
인터셉터나 필터와 달리, 메소드 전후의 지점에 자유롭게 설정 가능
-
주소/파라미터/어노테이션 등 다양한 방법으로 대상 지정 가능(인터셉터, 필터는 주소로만 가능)
-
AOP의 포인트컷
- @Before: 대상 메서드의 수행 전
- @After: 대상 메서드의 수행 후
- @After-returning: 대상 메서드의 정상적인 수행 후
- @After-throwing: 예외발생 후
- @Around: 대상 메서드의 수행 전/후