1. 서버를 실행시켜 서블릿이 올라오는 동안에 init이 실행되고, 그 후 doFilter가 실행된다.
2. 컨트롤러에 들어가기 전 preHandler가 실행된다.
3. 컨트롤러에서 나와 postHandler, after Completion, doFilter 순으로 진행이 된다.
4. 서블릿 종료 시 destroy가 실행된다.
1. Filter
필터는 주로 스프링 영역 밖에서 처리된다.
인증이나 권한 체크에 많이 쓰이며 모든 요청에 대한 로깅이나 검사나 이미지/데이터 압축 및 문자열 인코딩에서도 사용하게 된다.
사용하기 위해선 javax.servlet의 Filter 인터페이스를 구현하면 된다.
- init(FilterConfig filterconfig) : 필터 객체를 초기화 하여 서비스에 추가하기 위한 메소드. 웹 컨테이너가 1회 init 메소드를 호출하여 초기화 하면 이후 모든 요청은 doFilter를 통해 처리 된다.
- doFilter(ServletRequest request, ServletResponse response, FilterChain chain) : url-pattern에 맞는 모든 요청이 디스패처 서블릿으로 가기 전에 실행된다. chain.doFilter() 전/후에 원하는 처리 과정을 넣어서 사용한다.
- destroy() : 필터 객체를 서비스에서 제거하고 자원을 반환하기 위한 메소드이며 1번 호출 되면 doFilter에 의해 처리되지 않는다.
2. Interceptor
인터셉터는 스프링이 제공하는 기능이며, 컨트롤러의 동작 전/후에 동작하게 된다.
좀 더 세부적인 인증이나 API 호출 로깅에 사용하며 컨트롤러로 넘겨주는 데이터의 가공이 필요 할 때도 사용한다.
org.springframework.web.servlet의 HandlerInterceptor 인터페이스를 구현하여 사용이 가능하다.
- preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) : 컨트롤러 호출 전 실행 되기에 컨트롤러 이전에 처리 할 내용을 작성한다.
- postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) : 컨트롤러가 호출 되고 난 후 실행된다. RestAPI 기반 컨트롤러가 많이 사용되면서 자주 사용 되지는 않는 편이다. 컨트롤러 하위 계층에서 작업이 진행되다가 예외가 발생하면 호출하지 않는다.
- afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) : 모든 작업이 완료된 이후 실행된다. 요청 처리 중에 사용한 리소스를 반환 할 때 사용한다. 컨트롤러 하위 계층에서 작업이 진행되다가 예외가 발생하더라도 반드시 호출 된다.
3. AOP(Aspect Oriented Programming)
관점 지향 프로그래밍을 뜻하는 용어.
앱 전반에 걸쳐 공통으로 사용되는 기능들에 대한 관심사를 공통 관심 사항이라고 부르는데, 이 공통된 기능을 재사용 하는 것을 말한다. (로깅, 트랜잭션, 에러 처리 등)
인터셉터와 필터는 주소로 대상을 구분하지만, AOP는 주소, 파라미터, 어노테이션 등의 다양한 방법으로 대상을 구분 할 수 있다.
- Aspect : 흩어진 관심사를 모듈화
- Target : Aspect를 적용하는 곳(ex. 클래스, 메서드...)
- Advice : 실질적인 부가기능을 담은 구현체
- JointPoint : Advice가 적용될 위치. 다양한 시점에 적용 가능
- PointCut : JointPoint의 상세한 스펙을 정의한 것. 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음
포인트컷 어노테이션
- @Before : 대상 메서드의 수행 전
- @After : 대상 메서드의 수행 후
- @After-returning : 대상 메서드의 정상적인 수행 후
- @After-throwing : 예외 발생 후
- @Around : 대상 메서드의 수행 전/후
AOP는 좀 더 자세히 볼 필요가 있을듯.
출처 및 참고
https://goddaehee.tistory.com/154
[Spring] Filter, Interceptor, AOP 차이 및 정리
[Spring] Filter, Interceptor, AOP 차이 및 정리 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ [Spring] 필터, 인터셉터, AOP 정리 ] 입니다. : ) 공통 프로세스에 대한 고민자바 웹 개발을 하다보면, 공통적으
goddaehee.tistory.com
https://mangkyu.tistory.com/173
[Spring] 필터(Filter) vs 인터셉터(Interceptor) 차이 및 용도 - (1)
Spring은 공통적으로 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있도록 많은 기능들을 지원하고 있다. 이번에는 그 중에서 필터(Filter) vs 인터셉터(Interceptor)의 차이에 대해 알아보고자
mangkyu.tistory.com
https://memodayoungee.tistory.com/114
[Spring] Filter, Interceptor, AOP의 차이점에 대해
AOP를 공부하게 되면 뒤따로오는 개념인 필터와 인터셉터. 인터셉터를 오늘 처음으로 어떤 것인지에 대해 공부하게 됐는데, AOP와 비슷하다 생각했다. 그래서 AOP와 인터셉터의 차이점에 대해 블
memodayoungee.tistory.com
https://life-is-potatoo.tistory.com/30
[Spring] AOP Aspect Orientend Programming(관점 지향 프로그래밍)
AOP Aspect Orientend Programming(관점 지향 프로그래밍) : 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠 보고 그 관점을 기준으로 각각 모듈화하는 것 Crosscutting Concerns(흩어진 관심사) :
life-is-potatoo.tistory.com
'간단이론정리' 카테고리의 다른 글
[OOP] 객체 지향 4대 특징 및 객체 지향 5대 원칙(SOLID) (0) | 2024.06.20 |
---|---|
[OOP] 디자인 패턴(Design Pattern) 정리 (0) | 2024.06.20 |
[OS] 프로세스(Process)와 스레드(Thread) (0) | 2024.06.12 |
트랜잭션 격리수준(Isolation Level) (0) | 2024.06.11 |
HTTP Method 정리하기 (0) | 2024.05.25 |