728x90
1. Filter (javax.servlet.Filter)
- 어디서?
서블릿 이전, 가장 바깥단 (DispatcherServlet 도달 전) - 언제?
요청이 WAS(서버)에 도달하자마자 실행됨 (ServletContainer 수준) - 예시
인코딩 설정, XSS 방지, 인증 체크 등 - 설정 방법
web.xml 또는 @WebFilter - 단점
스프링 외부에서 동작, 스프링 빈 접근 어려움
public class MyFilter implements Filter {
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("Filter 실행됨");
chain.doFilter(request, response); // 다음 필터나 서블릿 호출
}
}
2. Interceptor (HandlerInterceptor)
- 어디서?
DispatcherServlet → Controller 사이 - 언제?
컨트롤러 호출 전/후에 동작 - 예시
로그인 인증, 요청 로그, 권한 체크 - 설정 방법
WebMvcConfigurer로 등록
public class MyInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) {
System.out.println("Interceptor preHandle 실행");
return true; // false면 컨트롤러로 안 넘어감
}
}
3. AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)
AOP는 OOP의 단점을 보완해주는 기술이다.
핵심 로직(주 업무)과 반복되는 공통 로직(로그, 성능측정 등)을 분리해서 중복을 줄이고 유지보수를 쉽게 만들어준다
실행 전, 실행 후, 혹은 예외 발생 시 공통적으로 반복되는 로직을 따로 분리해서 관리할 수 있다
- 어디서?
스프링 빈 내부에서 메서드 호출 전/후/예외 발생 시 - 언제?
메서드 실행 전후, 예외 등 포인트컷 지정 가능 - 예시
트랜잭션, 로깅, 성능 측정, 보안 등 - 장점
가장 유연하고 강력함. 스프링 빈 간 호출에도 적용됨.
@Aspect @Component
public class MyAspect {
@Before("execution(* com.example..*Service.*(..))")
public void before() { System.out.println("AOP @Before 실행됨"); }
}
공통 로직을 메서드로 따로 빼고, 필요할 때마다 호출하면 되는 거 아닌지?
필요할 때 마다 호출할 경우 당연하지만 매번 호출해주어야 한다.
휴먼에러 발생 가능성이 생기며, 메서드 호출로 인한 중복코드도 발생하게 된다.
🆚 OOP 메서드 분리 vs AOP
항목 | OOP | AOP |
호출 방식 | 개발자가 직접 호출해야 함(휴먼에러 발생 가능성 O) | 자동으로 감지하고 실행됨 |
코드 중복 | log();, startTx(); 등 메서드 호출을 위한 중복코드 발생 | 한 줄도 안 써도 됨 |
유연성 | 조건마다 if문을 사용하여야 함 | 조건 지정(Pointcut) 가능 |
'Springboot' 카테고리의 다른 글
[Spring] Spring AOP(Aspect-Oriented Programming) (1) | 2025.04.16 |
---|---|
[Security] Spring Security의 흐름 (0) | 2025.04.02 |
[Springboot] Client-Server 구조 정리 (0) | 2025.03.26 |
[Springboot] JWT 0.15.2 (0) | 2024.06.22 |
[Springboot] QueryDSL 2 (0) | 2023.08.09 |