Filter, Interceptor, AOP

국물빌런·2020년 3월 9일
1

전에 어떤 글에서 위 3가지를 한번 정리 하겟다고 썻었는데 무슨글인지는 모르겠다.
내가 프로블로거라면 그 글에 이 글의 링크정도는 달았겠지..
뭐 그게 중요한건 아니고 위 3가지가 동작이 비슷해서 구분이 좀 필요할 것 같아서 참고할만한 링크를 가져왔다.
https://thiago6.tistory.com/63?category=827160

일단 필터는 디스패쳐 서블릿 앞단에서 작동한다.
스프링 프레임웍의 완전 밖이란 말이다.
그래서 스프링과 무관한 서블릿의 기능과 자원을 사용한다.

자바 소스 구현후 web.xml에 등록하여 사용할 수 있다.
필터를 구현한 클래스는 아래 메서드를 사용하면 된다.
Filter의 메서드
init(): 필터 인스턴스 초기화
doFilter(): 전/후 처리
destroy(): 필터 인스턴스 종료

다음은 인터셉터다.필터와 동작은 거의 동일하다.
다만 인터셉터는 스프링에서 제공하는 기능이고 스프링 프레임워크 안에서 동작하므로 스프링의 자원들을 사용할 수 있다.
즉 인터셉터는 빈이므로 컨테이너에 있는 빈들을 접근 할 수 있다..
주로 세션, 쿠키를 사용한 '권한 체크', '로그인 체크' 등 Http 단위의 업무를 처리할때 사용한다.
인터셉터는 서블릿 디스패쳐와 컨트롤러, 뷰 사이에서 동작한다.
구현한 자바 소스와 servlet-context.xml에 등록해서 사용한다.
Interceptor의 메서드는 아래와 같습니다.
preHandler(): 컨트롤러 도달 전
postHandler(): 컨트롤러 메서드 처리 후 view 호출 전
afterCompletion(): view 페이지 응답 후

AOP는 특정한 기능이라기 보다는 OOP같은 코딩 패러다임이다.
AOP를 적극적으로 지원하는 프레임웍중에 하나가 spring인것이다.
코어 로직과 사이드 로직을 분리하려는 노력의 결과다.
사이드 로직이라고 하는건 로깅, 실행시간, 예외처리 등 실제 비지니스의 결과를 연산하는 로직 이외의 로직들을 말한다.
필터와 인터셉트와는 배경 자체가 다르므로 엉뚱하게 쓰지 않아야한다.
필터와 인터셉터는 Http프로토콜에 한정되어 있다.
그러나 AOP는 비지니스 로직을 분리하기 위한 것이다.
AOP의 포인트컷은 다음과 같다.

@Before: 대상 메서드의 수행 전
@After: 대상 메서드의 수행 후
@After-returning: 대상 메서드의 정상적인 수행 후
@After-throwing: 예외발생 후
@Around: 대상 메서드의 수행 전/후

profile
국물을 달라

0개의 댓글