14. AOP, Interceptor, Filter 의 차이점, Request가 들어올때 거치는 순서, 각 역할들의 장점을 설명해주실 수 있을까요?

1. AOP (Aspect-Oriented Programming):

  • AOP는 관점 지향 프로그래밍의 개념을 기반으로 한다.
  • 주요 목적은 핵심 로직과 횡단 관심사를 분리하여 모듈화하고 중복 코드를 제거하는 것이다.
  • 횡단 관심사를 나타내는 어드바이스(Advice)와 어드바이스를 적용할 지점인 포인트컷(Pointcut)으로 구성된다.
  • 주로 메서드 실행 전후, 예외 발생 시 등의 시점에서 횡단 관심사를 처리한다.

2. Interceptor:

  • Interceptor는 주로 웹 애플리케이션에서 요청을 가로채고 처리하는 역할을 한다.
  • 주로 MVC 패턴에서 컨트롤러 호출 전후, 뷰 렌더링 전후 등의 시점에서 요청을 가로채고 추가적인 작업을 수행한다.
  • Spring Framework에서는 HandlerInterceptor 인터페이스를 구현하여 Interceptor를 사용할 수 있다.
  • 주로 인증, 권한 검사, 로깅 등의 공통적인 작업을 처리한다.

3. Filter:

  • Filter는 웹 애플리케이션에서 요청과 응답을 필터링하고 변환하는 역할을 한다.
  • 서블릿 컨테이너에서 요청을 처리하기 전후에 Filter를 실행하여 요청/응답 데이터에 대한 변환 및 보정 작업을 수행한다.
  • 주로 보안, 인코딩, 캐싱 등의 요청/응답에 대한 공통적인 처리를 담당한다.
  • Servlet Filter 인터페이스를 구현하여 Filter를 사용할 수 있다.

요청이 들어올 때 거치는 순서는 다음과 같다:

  1. Filter: 서블릿 컨테이너에서 요청을 처리하기 전에 Filter가 실행된다.
  2. Interceptor: Filter 이후에 Interceptor가 실행된다.
  3. Controller: Interceptor에서 처리된 후에 컨트롤러가 실행된다.
  4. AOP: 컨트롤러 내부에서 AOP가 적용된 메서드가 호출된다.
더보기

1. 필터(Filter): 클라이언트의 요청이 서블릿 컨테이너에 도달하기 전에 필터가 실행됩니다. 필터는 클라이언트의 요청을 가로채고 사전 처리를 수행할 수 있습니다. 필터 체인에는 여러 개의 필터가 등록되어 있을 수 있으며, 필터는 순차적으로 실행됩니다.

 

2. 인터셉터(Interceptor): 클라이언트의 요청이 컨트롤러에 도달하기 전에 인터셉터가 실행됩니다. 인터셉터는 요청의 전처리 작업을 수행할  있습니다. 인터셉터 역시 여러 개가 등록될  있으며, 순차적으로 실행됩니다.

 

3. 컨트롤러(Controller): 인터셉터에서 요청의 전처리 작업이 완료되면 실제로 요청을 처리하는 컨트롤러가 실행됩니다. 컨트롤러는 클라이언트의 요청에 대한 핵심 비즈니스 로직을 수행합니다

 

4. 인터셉터(Interceptor): 컨트롤러의 실행이 완료된 후에는 인터셉터가 다시 실행됩니다. 이번에는 요청의 후처리 작업을 수행할  있습니다. 인터셉터는 컨트롤러의 실행 결과에 따라 추가적인 작업을 수행할  있습니다.

 

5. 필터(Filter): 최종적으로 응답이 클라이언트로 전달되기 전에 필터가 실행됩니다. 필터는 응답의 후처리 작업을 수행할  있습니다. 필터 체인에 등록된 필터들이 순차적으로 실행되며, 최종적으로 응답이 클라이언트로 전달됩니다.

각각의 장점은 다음과 같다:

  • AOP: 핵심 로직과 횡단 관심사의 분리로 코드의 모듈성, 재사용성, 유지보수성이 증가합니다. AOP를 사용함으로써 횡단 관심사를 한 곳에서 관리할 수 있으며, 코드 중복을 줄이고 가독성을 향상시킬 수 있습니다. 또한, 핵심 로직에 집중할 수 있으므로 코드의 복잡성을 감소시킬 수 있습니다.
  • Interceptor: Interceptor는 웹 애플리케이션에서 요청 전후에 추가 작업을 수행할 수 있습니다. 주로 인증, 권한 검사, 로깅 등의 공통적인 작업을 처리할 수 있습니다. Interceptor를 사용하면 애플리케이션 전반에 걸쳐 일관된 처리를 할 수 있으며, 코드 중복을 피할 수 있습니다.
  • Filter: Filter는 서블릿 컨테이너에서 요청과 응답을 필터링하고 변환하는 역할을 합니다. 주로 보안, 인코딩, 캐싱 등의 요청/응답에 대한 공통적인 처리를 담당합니다. Filter를 사용하면 요청과 응답에 대한 처리를 일관되게 적용할 수 있으며, 여러 개의 Filter를 연결하여 다양한 기능을 적용할 수 있습니다.
더보기

각 역할들의 장점:

필터(Filter): 필터는 서블릿 컨테이너에서 동작하므로 웹 애플리케이션 전체에 적용될 수 있습니다. 필터를 이용하여 요청과 응답에 대한 공통된 작업을 처리할 수 있으며, 보안, 인코딩 변환, 로깅 등의 기능을 구현할 수 있습니다.

인터셉터(Interceptor): 인터셉터는 주로 프레임워크에서 제공되는 기능으로, 컨트롤러의 전후에 공통된 작업을 수행할 수 있습니다. 인증, 로깅, 트랜잭션 처리 등의 공통된 작업을 인터셉터를 통해 처리할 수 있습니다. 인터셉터는 컨트롤러에 직접적으로 영향을 주지 않기 때문에 재사용성과 유지보수의 편의성이 높습니다.

  • 필터(Filter)의 장점:

웹 애플리케이션 전체에 적용될 수 있어 공통된 작업을 처리할 수 있습니다.

요청과 응답에 대한 처리를 다양하게 구현할 수 있습니다.

보안, 인코딩 변환, 로깅 등과 같은 기능을 구현할 수 있습니다.

여러 개의 필터를 체인으로 연결하여 순차적으로 실행할 수 있습니다.

  • 인터셉터(Interceptor)의 장점:

컨트롤러의 전후에 공통된 작업을 수행할 수 있어 코드 중복을 줄일 수 있습니다.

인증, 로깅, 트랜잭션 처리 등과 같은 공통된 작업을 효율적으로 처리할 수 있습니다.

프레임워크에서 제공되는 기능으로 재사용성과 유지보수의 편의성이 높습니다.

여러 개의 인터셉터를 순차적으로 실행할 수 있으며, 필요한 작업을 선택적으로 수행할 수 있습니다.

각각의 역할은  애플리케이션에서 요청의 전처리, 후처리, 공통된 작업 처리  다양한 기능을 수행합니다. 필터는 서블릿 컨테이너에서 동작하며, 클라이언트의 요청과 응답에 대한 처리를 담당합니다. 인터셉터는 주로 프레임워크에서 제공되는 기능으로, 컨트롤러의 전후에 개입하여 공통된 작업을 수행합니다. 이러한 역할들을 적절히 활용하면 코드의 재사용성과 유지보수성을 높일  있으며,  애플리케이션의 기능을 효과적으로 개발할  있습니다.

각각의 역할과 장점을 적절히 조합하여 애플리케이션을 개발하면 코드의 재사용성, 유지보수성, 가독성, 일관성 등을 향상시킬  있습니다.

 

세 가지 모두 공통 관심사를 처리하는 데에 있습니다. Interceptor와 Filter는 Servlet 단위에서 실행되고, AOP는 메서드 앞의 Proxy패턴의 형태로 실행됩니다. 실행 순서로는 Request가 들어오면 Filter -> InterCceptor -> AOP -> Intercepotr -> Filter가 됩니다. 필터의 역할은 요청과 응답을 거르고 정제하는 역할입니다. 일반적으로 인코딩 변환처리, 인증 인가 등의 요청에 대한 처리를 합니다 Interceptor는 요청에 대한 작업 전/후 로 가로챕니다. 스프링과 무관한 자원에 대해 동작을 하고, 보통 로그인, 권한 체크, 프로그램 실행 시간 게산 작업, 로그 확인 등의 업무를 처리합니다 AOP는 주로 '로깅', '트랜잭션', '에러 처리'등 비즈니스단의 메서드에서 조금 더 세밀하게 조정하고 싶을 때 사용 , Interceptor나 Filter와는 달리 메소드 전후의 지점에 자유롭게 설정이 가능합니다.

 

필터는 디스패처 서블릿에 요청이 전달되기 전 / 후에 모든 요청에 대해 부가작업을 처리할 수 있습니다. 인터셉터는 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공합니다. AOP 는 인터셉터나 필터와는 달리 메소드 전후의 지점에 부가작업을 처리할 수 있습니다. 따라서 Request 는 필터 -> 디스패처 서블릿 -> 인터셉터 -> AOP -> 컨트롤러 순서로 들어와 역순으로 나가게 됩니다. 필터는 스프링과 무관하게 전역적으로 처리해야 하는 작업들을 처리할 수 있으며, Request 및 Response 객체를 다른 객체로 바꿀 수 있다는 것이 장점이다. 인터셉터는 스프링의 모든 빈 객체에 접근할 수 있고, Controller로 넘겨주는 Request 및 Response 내부의 값을 바꿔 전달할 수 있다는 장점이 있다. AOP 는 비지니스 단의 메소드 실행 전, 후 등 세밀하게 부가 기능을 조정할 수 있다는 장점이 있다.