티스토리 뷰
배경
API의 권한 체크에 대한 기능을 구현하려고 하는 도중 공부한 내용을 포스팅했습니다.
보통 Interceptor, Filter, AOP 이 셋 중 하나를 사용하여 구현하더군요.
그래서 이 셋의 차이가 궁금해서 chatGPT에 물어봤습니다.
1. Interceptor (인터셉터)
Spring Framework(프레임워크)에서 사용되며, 주로 컨트롤러 수준에서 동작합니다.
요청 처리 전, 후 또는 예외 발생 시에 실행되는 특별한 기능을 수행하는 객체입니다.
주로 로깅, 보안 검사, 트랜잭션 관리 등을 수행한다고 합니다.
2. Filter (필터)
Java Servlet 스펙에서 제공하는 기능으로, 요청과 응답을 조작하는 데 사용됩니다.
웹 애플리케이션의 모든 요청과 응답에 대해 실행됩니다.
주로 요청 및 응답의 헤더 수정, 인코딩 변환, 보안 필터링 등을 수행합니다.
웹 서블릿 컨테이너 레벨에서 동작하므로 웹 프레임워크에 독립적입니다.
3. AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)
어플리케이션 전체에서 일반적인 관심사를 추상화하고 분리하는 프로그래밍 패러다임입니다.
메소드 호출 전, 후, 예외 발생 시, 런타임에 다른 관심사(로깅, 트랜잭션, 보안 등)를 적용하는 방식입니다.
메소드 수준, 클래스 수준 또는 패키지 수준에서 Aspect(관점)을 정의하고 이를 적용할 메소드를 선택적으로 지정합니다.
Spring AOP와 같은 라이브러리를 사용하여 구현할 수 있습니다.
적용 시점에서의 차이점
Interceptor는 요청 및 응답 처리에 직접 적용되며, 요청-응답 주기 내에서 특정 동작을 수행합니다.
Filter는 Servlet 컨테이너에서 요청 및 응답을 처리하기 전에 적용되며, AOP는 주로 메소드 호출 시점에 적용됩니다.
범위에서의 차이점
Interceptor는 주로 웹 프레임워크나 언어에 의존적이며, 해당 프레임워크에서 동작합니다.
Filter는 Servlet 스펙에 의존하며, 언어나 프레임워크에 독립적입니다.
AOP는 어플리케이션 코드에 의존하며, 언어나 프레임워크에 독립적입니다.
용도에서의 차이점
Interceptor는 주로 요청 및 응답 처리와 관련된 로직을 처리합니다.
Filter는 주로 HTTP 요청 및 응답에 대한 변환 및 필터링을 수행합니다.
AOP는 어플리케이션의 여러 부분에서 공통 관심사를 추상화하고 캡슐화하기 위해 사용됩니다.
구현에서의 차이점
Interceptor는 주로 웹 프레임워크의 기능을 활용하여 구현됩니다.
Filter는 Java Servlet 스펙에 따라 구현됩니다.
AOP는 관점을 정의하고 AspectJ 또는 Spring AOP와 같은 라이브러리를 사용하여 구현됩니다.
'Sping Framework' 카테고리의 다른 글
스프링의 주요 기술 [1-2]. 애플리케이션 컨텍스트 (0) | 2023.02.07 |
---|---|
스프링의 주요 기술 [1-1]. DI (0) | 2023.02.06 |
스프링의 주요 기술 (0) | 2023.02.02 |
JPA에서의 bulk insert, bulk update test (0) | 2022.08.14 |
프로토타입과 스코프 [3]. 스코프 (0) | 2022.07.15 |
- Total
- Today
- Yesterday
- Spring
- BOJ
- Olympiad
- 테라폼
- Kotlin
- 백준
- 디자인 패턴
- node.js
- 프로그래머스
- 이팩티브 자바
- programmers
- MSA
- 디자인패턴
- kkoon9
- JPA
- Effective Java
- 객체지향
- 정규표현식
- kotest
- AWS
- C++
- 클린 아키텍처
- Algorithm
- 클린 코드
- Java
- BAEKJOON
- 알고리즘
- 코테
- Spring Boot
- 이펙티브 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |