본문 바로가기

CS study/spring

인터셉터와 AOP의 차이, 인터셉터의 추가 개념

목차

    개요

    이번 프로젝터에서 prehandler를 사용하여 인터셉터 기능을 사용했었고, 로그 수집을 위해 포인트컷을 사용하여 AOP(로그 수집)의 기능도 구현해봤다.

     

    문득 드는 생각이 두 기능이 로직상 유사해 보이는데, 똑같은 거 같은데 굳이 인터셉터를 쓰는 이유가 뭘까?

    정확히 말하면 인터셉터의 기능을 AOP가 전부 할 수 있지 않나? 싶어 조사해보았다.

     

     

    그림으로 보는 도식도

    한 눈에 보기 좋은 도식도

     

     

    일단 필터는 이전에 학습했던 것처럼, 스프링 영역 밖에서 서블릿의 입출력을 관리한다.

    Dispatcher Servlet의 호출 이전/이후로 인터셉터는 동작한다.AOP의 경우 애플리케이션 전방에 걸쳐 다양하게 작업을 적용할 수 있는 것을 확인할 수 있다.

    인터셉터의 주요 메소드

    1. preHandle: 이 메소드는 컨트롤러(핸들러) 메소드가 실행되기 전에 호출된다.
      여기서 요청을 사전 처리하며, 반환 값에 따라 핸들러 실행 여부를 제어할 수 있다.

    2. postHandle: 컨트롤러 메소드가 실행된 후, 그리고 클라이언트에게 response를 보내기 전 호출된다.
      응답 데이터의 처리 과정에서 유용하게 사용될 것이다.

    3. afterCompletion: 응답이 클라이언트에게 전송된 후에 호출된다고 한다.
      일반적으로 리소스 정리나 로깅 등의 작업에 사용된다.

    인터셉터는 이 세 가지 주요 메소드를 통해 요청과 응답의 전체 라이프사이클에 걸쳐 작업을 수행할 수 있다.

     

     

     

    결론

     

    인터셉터 기능 중 상당 부분은 AOP를 통해 구현할 수도 있다. 

    하지만 내가 구현했던 '입력 파라미터를 검증' 하여 너무 많은 호출값을 검증하는 로직의 경우 인터셉터를 통해 구현한다면 다음과 같은 장점이 있다.

     

    1. HTTP 요청 및 응답 처리

    인터셉터는 HTTP 요청과 응답의 전체 흐름을 관리하는 데 특화되어 있다. 요청의 헤더를 처리하거나 응답의 바디를 수정하는 것과 같은 작업은 일반적으로 인터셉터를 사용하는 것이 더 편리할 것이다.

     

    2. 효율성 : 메서드를 부르기 전에 차단 가능

    AOP를 사용하여 RequestParam의 값을 검사하는 것도 가능하지만, 이는 메소드가 이미 호출된 후의 상황에서 이루어진다. 요청의 초기 단계에서 차단하는 것이 아니라 메소드 실행 후에 조건을 검사하는 것은 로직상 비효율적인 일이다.

     

    하지만 prehandler를 사용하여 차단 로직을 구현할 경우 컨트롤러가 실행하기 전(메서드 실행 전) 단계에서 검사를 진행하고, 더욱 효율적으로 동작할 수 있다.

     

    @Before?

    사실 해당 로직으로 AOP가 메서드 실행 전에도 동작 구현이 가능하다고 한다. 하지만 이는 일반적인 사항이 아니다.

    AOP는 주로 Spring Framework의 컨텍스트 내에서 작동하며, 로직 상 메소드 호출에 관심사를 분리하며 적용하는 것이 일반적이다.

    즉, AOP는 DispatcherServlet이 요청을 받아 해당 컨트롤러의 메소드를 실행하기 전후로 작동하는 것이 일반적이다.

     

    이 경우로 사용하게 되면 AOP의 일반적인 구현 사례가 아닌 것이다. http에 특화된 인터셉터를 두고 굳이 AOP를 사용할 이유가 존재하지 않는다.

     

    참고자료

     

    https://goddaehee.tistory.com/154

     

    [Spring] Filter, Interceptor, AOP 차이 및 정리

    [Spring] Filter, Interceptor, AOP 차이 및 정리 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ [Spring] 필터, 인터셉터, AOP 정리 ] 입니다. : ) 공통 프로세스에 대한 고민자바 웹 개발을 하다보면, 공통적으

    goddaehee.tistory.com