Filter/Interceptor / AOP

suye 22·2023년 2월 23일

기술면접 준비하기

목록 보기
7/16

1. Filter란?

  • 요청과 응답을 거른뒤 정제하는 역할이다.

  • HTTP 요청과 응답을 변경할 수 있는 재사용이 가능한 코드이다.

  • 필터는 객체의 형태로 존재하며 클라이언트로부터 오는 요청과(Request) 최종자원(서블릿/JSP)사이에 위치하며, 클라이언트의 요청정보를 알맞게 변경할 수 있으며, 또한 필터는 최종 자원과 클라이언트로 가는 응답(Response)사이에 위치하여 최종 자원의 요청 결과를 알맞게 변경할 수 있다.

  • 필터는 클라이언트의 요청을 필터체인의 다음단계에 보내는 것이 아니라, 다른자원의 결과를 클라이언트에 전송 가능하다.

  • 필터의 이러한 기능은 사용자 인증이나, 권한 체크와 같은곳에 사용한다.

출처: https://twofootdog.github.io/Spring-%ED%95%84%ED%84%B0(Filter)%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80/

2. Interceptor란?


출처: https://dev-coco.tistory.com/173

  • Dispatcher Servlet이 Controller를 호출하기 전,후에 인터셉터가 끼어들어 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다.
  • Controller에 들어오는 요청(HttpRequest), 응답(HttpResponse)를 가로채는 역할을 하는 객체입니다.
  • 웹 컨테이너에서 동작하는 필터와 달리 인터셉터는 스프링 컨텍스트에서 동작한다.
  • 해당 단어의 의미와 같이 사용자 요청에 의해 서버에 들어온 Request 객체를 컨트롤러의 핸들러(사용자가 요청한 url에 따라 실행되어야 할 메서드, 이하 핸들러)로 도달하기 전에 낚아채서 개발자가 원하는 추가적인 작업을 한 후 핸들러로 보낼 수 있도록 해주는 것이 인터셉터(Interceptor)입니다.

인터셉터의 사용사례

  • 세부적인 보안 및 인증/인가 공통 작업
  • API 호출에 대한 로깅 또는 검사
  • Controller로 넘겨주는 정보(데이터)의 가공
    인터셉터에서는 클라이언트의 요청과 관련되어 전역적으로 처리해야 하는 작업들을 처리 할 수 있다.

3. AOP(Aspect Oreinted Programming)란?


출처: https://code-lab1.tistory.com/193

  • 관점지향 프로그래밍이라고 하며,어떤 기능을 구현할 때 그 기능을 핵심기능부가기능으로 구분해 각각을 하나의 관점으로 보는것을 의미한다. (모듈화 하는 것)
    모듈화: 어떤 공통된 로직이나 기능을 하나의 단위로 묶은 것

Filter, Interceptor, AOP의 흐름


출처: https://goddaehee.tistory.com/154 [갓대희의 작은공간]

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

  1. 서버를 실행시켜 서블릿이 올라오는 동안에 init이 실행되고, 그 후 doFilter가 실행된다.

  2. 컨트롤러에 들어가기 전 preHandler가 실행된다

  3. 컨트롤러에서 나와 postHandler, after Completion, doFilter 순으로 진행이 된다.

  4. 서블릿 종료 시 destroy가 실행된다.

프록시 패턴?

  • 원래 객체를 감싸고 있는 객체
  • 프록시 객체가 원래 객체를 감싸서, client의 요청을 처리하게 하는 패턴
  • 특정한 interface를 노출시키지 않고, 외부로부터 감추고 싶을 때 사용하는 패턴

출처: https://good-or-bad.tistory.com/43

Filter, Interceptor, AOP 이 3 가지 기능은 무슨 행동을 하기전에 먼저 실행하거나, 실행한 후에 추가적인 행동을 할 때 사용되는 기능들이다.

Filter/Interceptor / AOP 차이점? 동작 시점이 다르다.

filter->interceiptor->aop의 순서대로 실행된다.

  • filter는 사용자의 request를 받아서 servlet에 가기 전에 실행된다.
  • interceptor는 controller에 가기 전에 실행된다.
  • aop는 어드바이스에 따라 비즈니스 메소드가 호출될 때, 호출된 후, 예외가 발생하는 시점등에서 적용된다.
  • Filter : spring과 무관한 servlet의 기술, url 기반으로 동작한다.
  • Interceptor : spring의 기술, url 기반으로 동작, 빈 객체에 접근 가능하다.
  • AOP : spring의 기술, pointcut 기반으로 동작, 웹과 무관하게 business logic과 연결해서 사용됨, 빈 객체에 접근 가능하다.

0개의 댓글