ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [기술면접 Spring] Filter, Interceptor, AOP 차이점
    취업준비/기술면접 2022. 9. 20. 11:46

     

    자바 웹 개발을 하다보면 공통적으로 처리해야 할 업무들이 많다. 예를 들어 로그인 관련(세션체크)처리, 권한체크, PC와 모바일웹의 분기처리, 로그, 페이지 인코딩 변환 등등. 공통 관련된 코드를 모든 페이지 마다 작성 해야한다면 중복된 코드가 많아지게 되고 프로젝트 단위가 커질수록 서버에 부하를 줄 수 있으며 소스 관리도 되지 않는다.

     

    따라서, 공통 부분은 빼서 관리하는 것이 좋다.

     

    공통처리를 위해 활용할 수 있는 방법이 3가지가 있다.

     

     

    Filter, Interceptor, AOP의 흐름

     

     

     

    Interceptor와 Filter는 Servlet 단위에서 실행된다. 반면 AOP는 메소드 앞에 proxy패턴의 형태로 실행된다. 요청이 들어오면 Filter -> Interceptor -> AOP ->Interceptor -> Filter 순으로 거치게 된다. 

     

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

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

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

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

     

     

     

    Filter(필터)

     

    필터는 말 그대로 요청과 응답을 거른 뒤 정제하는 역할을 한다. 서블릿 필터는 DispatcherServlet 이전에 실행되는데 필터가 동작하도록 지정된 자원의 앞단에 요청내용을 변경하거나, 여러가지 체크를 수행할 수 있다.

     

    또한 자원의 처리가 끝난 후 응답내용에 대해서도 변경하는 처리를 할 수 있다. 보통 web.xml에 등록하고, 일반적으로 인코딩 변환 처리, XSS 방어 등의 요청에 대한 처리로 사용된다. 

     

    필터의 대표 예시는 한글 처리를 위한 인코딩이 있다. 

     

    더보기

    인코딩 (코드화, 암호화): 동영상이나 문자 등 사람이 인지할 수 있는 형태의 데이터를 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정을 말한다. 

    디코딩 (역코드화, 복호화) : 반대로 사람이 이해할 수 있도록 바꿔주는 것 즉 바이트형식을 문자(문자열)로 변환.

     

    < 필터의 실행 메서드 >

    - init() : 필터 인스턴스 초기화

    - doFilter() : 전/후 처리

    - destroy () : 필터 인스턴스 종료

     

     

     

     

    Interceptor(인터셉터)

     

    인터셉터는 요청에 대한 작업의 전/후로 가로챈다고 보면 된다. 필터는 스프링 컨텍스트 외부에 존재하며 스프링과 무관한 자원에 대해 동작한다. 하지만 인터셉터는 DispatcherServlet 이 컨트롤러를 호출하기 전,후로 끼어들기 때문에 스프링 컨텍스느 내부에서 Controller에 관한 요청과 응답에 대해 처리한다. 즉) 클라이언트의 요청이 컨트롤러에 가기 전에 가로채고, 응답이 클라이언트에게 가기 전에 가로챈다. 

     

    관리자만 접근할 수 있는 관리자 페이지에 접근하기 전에 관리자 인증을 하는 용도로 활용될 수 있고, 쿠키 제어, 파일 업로드 등의 작업을 수행한다. 

     

    <인터셉터 실행메서드>

    - preHandler() : 컨트롤러 메서드가 실행되기 전

    - postHandler() : 컨트롤러 메서드 실행직 후 veiw 페이지 렌더링 되기 전

    - afterCompletion() : view 페이지가 렌더링 되고 난 후

     

     

     

    필터와 인터셉터

     

    인터셉터는 Servlet의 앞, 뒤에서 HttpRequest, HttpResponse를 가로채는 Filter와 그 역할이 유사한데 차이점이 있다.

     

    1. 호출 시점 : Filter는 DispatcherServlet 이 실행되기 전, Interceptor는 DispatcherServlet 이 실행된 후
    2. 설정 위치 : Filter는 web.xml에서 Interceptor는 spring-servlet.xml에서
    3. 구현 방식 : Filter는 web.xml에서 설정을 하면 구현이 가능하지만 Interceptor는 설정은 물론 메서드 구현이 필요하다.

     

     

    AOP

     

    OOP를 보완하기 위해 나온 개념으로 객체지향의 프로그래밍을 했을 때 중복을 줄일 수 없는 부분을 줄이기 위해 관점에서 바라보고 처리한다. 주로 로깅, 트랜잭션, 에러 처리 등 비즈니스단의 메서드에서 조금 더 세밀하게 조정하고 싶을 때 사용한다. Interceptor나 Filter와 달리 메서드 전후의 지점에 자유롭게 설정이 가능하다. Interceptor와 Filter는 주로 대상을 구분해서 걸러내야 하는 반면, AOP는 주소, 파라미터, 어노테이션 등 다양한 방법으로 대상을 지정할 수 있다. 

     

    AOP에 대한 내용을 더 자세히 알아보려면 아래 포스팅에서 참고 바람.

     

    https://wonisdaily.tistory.com/77

     

    [5-ch18 Spring] AOP 개념, 용어(JoinPoint, Pointcut, Advice..)

    AOP란? AOP는 흔히 '관점 지향 프로그래밍' 이라고 불린다. 이때 '관점(Aspect)'이라는 용어는 개발자들에게 '관심사(concern)'라는 말로 통용된다. '관심사'는 개발 시 필요한 고민이나 염두에 두어야

    wonisdaily.tistory.com

     

     

     

     

     

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

    반응형

    댓글

Designed by Tistory.