Blog

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

Author
Summary
Request가 들어올때 거치는 순서, Filter,Interceptor, AOP의 차이점
Category
Study
Tags
CS
Favorite
Memory Date
2023/10/19
Cross Reference Study
Related Media
Related Thought
Related Lessons
tag
날짜
작성자
진행상황
진행 전
태그구분
6 more properties
AOP, Interceptor, Filter 의 차이점, Request가 들어올때 거치는 순서, 각 역할들의 장점을 설명해주실 수 있을까요?
우선 Request가 클라이언트로부터 컨트롤러까지 전달되는 과정의 순서를 말씀드리면,
HTTP 요청을 보냄 → 웹 어플리케이션 서버(WAS)로 전달 → Filter → Dispatcher Servlet → Interceptor 또는 AOP → Controller 순서로 요청이 전달됩니다.
여기서 Filter, Interceptor, AOP의 공통점은 클라이언트의 요청을 중간 과정에서 가로채거나 처리하여 추가 기능을 수행하는데 사용되지만, 위치와 역할에 차이가 있습니다.
차이점은 Filter는 웹 애플리케이션 서버에서 동작하며, 요청이 서버에 도달하기 전과 응답이 클라이언트에게 전송되기 전에 실행됩니다. Interceptor와 AOP는 웹 서버에서 동작하며, 주로 컨트롤러 메소드의 실행 전과 후에 추가 작업을 수행합니다. Interceptor와 AOP는 주로 비즈니스 로직에 초점을 맞추어 사용되고, 위치와 실행 시점에서 차이가 있습니다.
각 역할의 장점은
Filter: 모든 요청에 대한 일괄 처리에 유용하며, 웹 애플리케이션 전체에 적용되는 작업에 적합합니다.
Interceptor: 주로 컨트롤러 메소드의 전/후처리에 활용되며, 특정 기능을 가진 모듈 간에 공통 작업을 처리합니다.
AOP: 횡단 관심사를 관리하고 모듈 간의 중복 코드를 제거하여 코드를 모듈화하고 유지보수성을 향상시킵니다.
추가질문 Request 요청이 전달되는 과정을 보다 자세히 설명할 수 있나요?
Request가 클라이언트로부터 컨트롤러까지 전달되는 과정을 설명드리면
클라이언트가 특정 URL의 HTTP 요청을 보내면 웹 어플리케이션 서버로 전달되고 WAS 안의 웹 서버의 컨트롤러 중 해당 URL에 매칭되는 메소드가 요청을 받고 수행하게 됩니다.
1.
이 중간 과정에서 클라이언트로부터 처음 HTTP 요청이 들어오는 곳은 WAS에 위치한 필터입니다. 예를 들어, 요청의 인코딩을 확인하거나 로깅을 수행하는 등의 일반적인 전처리 작업을 수행합니다.
2.
필터에서 전처리가 끝난 HTTP요청은 웹 서버로 진입하게 됩니다. 이때 이 요청을 처음 받는 부분은 Dispatcher Servlet입니다. 컨트롤러로 배분하는 관문 역할은 Dispatcher Servlet이 하게 됩니다.
3.
이후 Dispatcher Servlet에서 Controller로 요청이 전달되기 전 Interceptor가 동작합니다. 예를 들어, 인증 정보를 확인하거나 특정 기능의 로깅을 추가하는 등의 작업을 수행하게 됩니다.
4.
여기서 AOP는 Intercepter와 비슷하게 Dispatcher Servlet에서 Controller로 요청이 전달되기 전까지 범위에서 다양한 시점에서 작업을 수행 할 수 있습니다. intercepter 전부터 실행하고자 하면 @Before 로 수행 기능을 정의할 수 있고 반대로 응답 기준으로는 @After로 정의하면 Controller로부터 응답이 AOP를 거쳐 Intercepter를 통하게 됩니다. @Around 를 사용하면 요청, 응답 모두 AOP가 먼저 수행되고 Intercepter로 이동 후 요청및응답이 다음 주체로 전달됩니다.
추가질문 AOP와 Interceptor가 동일한 기능을 하는것처럼 느껴지는데 차이점이 있을까요?
여기서 AOP와 Interceptor가 유사한 위치에 있기 때문에 유사한 역할을 하기도 합니다. 모두 애플리케이션의 횡단 관심사(cross-cutting concerns)를 처리하는 목적이 있지만
AOP는 주로 메소드 호출 전(before), 후(after), 예외 발생 시(after-throwing), 반환 값 처리(after-returning) 등의 시점에서 동작합니다. 메소드 호출, 객체 생성 등과 같은 특정 Join Point에 대한 관심사를 모듈화합니다. 예를 들어, 트랜잭션 관리, 로깅, 보안 등의 기능을 전체 애플리케이션에 걸쳐 적용할 때 사용됩니다.
Interceptor는 주로 HTTP 요청과 응답 처리와 관련된 특정 작업을 수행하며, 주로 웹 애플리케이션에서 사용됩니다. 예를 들어, 요청 전처리, 후처리, 로깅, 보안 등을 다룰 때 사용됩니다.
Interceptor는 Spring MVC의 일부로서 프레임워크에서 직접 지원하는 기능이기 때문에 일반적으로 높은 효율성을 가질 수 있습니다. AOP는 AspectJ와 같은 라이브러리를 사용해 구현되고 어드바이스를 삽입하는 방식으로 동작하므로, 약간의 오버헤드가 발생할 수 있지만 실제 프로젝트에선 미미한 수준인 것으로 알려져있습니다. 성능 테스트를 통해 실제로 어떤 방식이 더 적합한지 확인하는 것이 좋을 것으로 생각됩니다.
두가지 전처리와 후처리 부분이 중복되는 것 보다 프로젝트의 특성과 개발자의 선호도, 유지보수성 등을 고려하여 선택하는 것이 중요합니다. 예를들어 로깅을 구현한다 했을때 로깅을 둘다 구현하는 것은 비효율적일 수 있습니다.