
애플리케이션의 기능은 크게 두가지로 나눌 수 있다.
첫번째는 핵심기능으로 해당 객체가 제공하는 고유의 기능을 말한다.
두번째는 핵심기능을 보조하는 로그 추척 기능과 같은 부가기능이다.
기존의 프로젝트에 부가기능을 추가하는 경우 각 클래스마다 추가해줘야하는 복잡함과 번거로움이 있다.
이런 경우, AOP(Aspect Oriented Programming), 즉 관점 지향 프로그래밍을 적용할 수 있다.
💡 AOP란?
부가 기능을 핵심 기능에서 분리해 한 곳으로 관리하도록 하고, 이 부가 기능을 어디에 적용할지 선택하는 기능을 제공하는 모듈
💡 AOP 용어
💡 AOP 적용 방식
1. AspectJ
2. 스프링 AOP
💡 스프링에 AOP 적용
포인트컷과 어드바이스로 구성되어 있는 어드바이저를 만들어 스프링 빈으로 등록하면 프록시 생성기가 처리해줌
@Aspect
public class LogTraceAspect{
@Around // 포인트컷
public Object execute(ProceedingJoinPoint joinPoint){
// 어드바이스
}
}
포인트컷의 종류
💡 필터란?
자바 서블릿의 기능 중 하나로, 디스패쳐 서블릿에 요청이 전달되기 전과 후에 URL 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능이다.
즉, 클라이언트의 요청과 서버의 응답을 거른 뒤 정제하는 역할이다.
💡 필터의 메소드
public interface Filter {
public default void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException;
public default void destroy() {}
}
💡 인터셉터란?
필터와는 달리, 스프링이 제공하는 기술로써 디스패쳐 서블릿이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능이다.
💡 인터셉터의 메소드
| AOP | Filter | Interceptor | |
|---|---|---|---|
| 동작 위치 | 스프링 컨테이너 | 스프링 밖 웹 컨테이너 | 스프링 컨테이너 |
| 대상 지정 | 주소, 어노테이션 등 | 주소 | 주소 |
| 역할 | 컨트롤러 처리 이후 실행 | 애플리케이션 전반에 영향 | 컨트롤러에 대한 요청과 응답에 영향 |