[TIL] 8월 3일

yeon·2021년 8월 5일
0

Filter vs Interceptor vs AOP

Filter

요청과 응답을 거른 뒤 정제하는 역할

DispatcherServlet 이전에 실행된다.

요청 내용을 변경하거나, 여러가지를 체크할 수 있고 응답에 대해서도 변경할 수 있다.

보통 인코딩 변환 처리, XSS 방어 등의 요청에 대한 처리에 사용된다

  • init()
    • 필터 인스턴스 초기화
  • doFilter()
    • 전/후 처리
  • destroy()
    • 필터 인스턴스 종료

Interceptor

요청에 대한 작업 전/후로 가로챈다.

필터는 스프링 컨텍스트 외부에 존재해서 스프링과 무관한 자원에 대해 동작한다.

반면에 인터셉터는 스프링의 DispatcherServlet이 컨트롤러를 호출하기 전/후에 동작하기 때문에 스프링 컨텍스트 내부에서 컨트롤러에 관한 요청과 응답에 대해 처리한다.

스프링의 모든 빈 객체에 접근할 수 있다.

인터셉터는 여러개 사용할 수 있다.

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

  • preHandler()
    • 컨트롤러 메서드가 실행되기 전
  • postHandler()
    • 컨트롤러 메서드 실행 직후 view 페이지 렌더링 되기 전
    • afterCompletion()
      • view 페이지가 렌더링 되고 난 이후

AOP

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

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

인터셉터와 필터와는 다르게 메소드 전후 지점을 자유롭게 설정할 수 있다.

인터셉터와 필터는 주소를 대상으로 설정하지만, AOP는 주소, 파라미터, 어노테이션 등 여러 방법으로 대상을 지정할 수 있다.

AOP의 Advice와 HandlerInterceptor의 주요 차이점은 파라미터의 차이이다.

Advice는 JoinPoint나 ProceedingJoinPoint 등을 활용해서 호출한다.

HandlerInterceptor는 Filter와 유사하게 HttpServletRequest, HttpServletResponse를 파라미터로 사용한다.

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

참고: https://goddaehee.tistory.com/154


JWT Claim의 subject?

Claim의 주제, 토큰이 갖고 있는 문맥을 의미한다.


오늘 한일

  • sql 첫걸음 2장, 3장
  • JWT 기반 로그인 구현을 하려고 하는데, 어떤 자료들은 요청 헤더에서 토큰을 추출하고 decode하는 과정을 Filter에서 하기도 하고 어떤 자료는 Interceptor에서 진행해서 이 둘의 차이가 궁금해서 찾아봤다. (+ AOP)
    • 필터는 스프링의 컨텍스트 외부에 존재해서 스프링과 무관한 자원에 대해 동작하고 인터셉터는 DispatcherServlet이 컨트롤러를 호출하기 전 후에 동작해서 컨트롤러에 대한 요청과 응답을 처리할 때 사용된다고 한다.
  • 김영한님 스프링 기본강의 수강 중

0개의 댓글