기술면접 준비

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

Albosa2lol 2024. 8. 27. 21:58

AOP, Interceptor, Filter의 차이점 및 실행 순서

Spring 기반 웹 애플리케이션에서 요청(Request)이 들어올 때 거치는 순서와 역할은 다음과 같습니다.

 

1. 개념 및 차이점

구분 Filter Interceptor AOP
위치 서블릿(Servlet) 실행 전후 컨트롤러(Controller) 실행 전후 모든 메서드(비즈니스 로직 포함) 실행 전후
적용 대상 HTTP 요청(Request), 응답(Response) Spring MVC 컨트롤러 서비스(Service) 및 비즈니스 로직
사용 목적 인증, 보안, CORS, 로깅, 캐싱 인증, 로깅, 사전/사후 처리 트랜잭션, 로깅, 예외 처리, 공통 기능 적용
주요 인터페이스 javax.servlet.Filter HandlerInterceptor @Aspect, @Around, @Before, @After
접근 가능 범위 요청/응답 객체 컨트롤러 실행 전후 모든 메서드 실행 전후

 

2. 요청(Request)이 들어올 때 거치는 순서

클라이언트 요청 → Filter → Interceptor → Controller → Service → Repository → DB ↓ (AOP 적용)

상세 순서

  1. Filter (필터)
    • DispatcherServlet 이전 단계에서 실행됨
    • 요청/응답을 조작할 수 있음 (예: CORS 설정, 인증, 로깅)
    • 여러 개의 필터가 존재할 경우 FilterChain을 통해 순차적으로 실행됨
  2. Interceptor (인터셉터)
    • DispatcherServlet 이후, Controller 실행 전후에 동작
    • 요청을 가로채고, 컨트롤러 접근 전/후에 추가적인 로직을 실행 가능
    • preHandle(), postHandle(), afterCompletion() 메서드 제공
  3. AOP (관점 지향 프로그래밍)
    • 서비스(Service) 계층의 메서드 실행 전후에 특정 로직을 추가하는 데 사용됨
    • @Aspect, @Before, @After, @Around 등을 활용해 트랜잭션, 로깅 등을 수행

3. Filter, Interceptor, AOP의 역할과 장점

(1) Filter (필터)

역할

  • HTTP 요청 및 응답을 변경할 수 있음
  • 보안 및 인증 처리 (ex: JWT 토큰 검증)
  • 로깅, GZIP 압축, 캐시 처리
  • CORS (Cross-Origin Resource Sharing) 설정 가능

장점

  • 요청이 컨트롤러에 도달하기 전 선처리 가능
  • 서블릿 단에서 한 번만 처리되므로 성능 최적화 가능

📌 예제

@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
        throws IOException, ServletException {
        System.out.println("Filter 실행");
        chain.doFilter(request, response); // 다음 필터 or 컨트롤러로 이동
    }
}

(2) Interceptor (인터셉터)

 

역할

  • 컨트롤러 실행 전후로 추가 작업을 수행
  • 사용자 인증 및 권한 검증
  • API 로깅 및 요청 데이터 검증

장점

  • Spring MVC 컨트롤러에서만 동작하여, 특정 URL 요청에만 적용 가능
  • preHandle()에서 요청을 차단하거나 변경 가능

📌 예제

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("Interceptor 실행");
        return true; // true: 계속 진행, false: 요청 차단
    }
}

 

(3) AOP (Aspect-Oriented Programming)

 

역할

  • 서비스(Service) 계층에서 반복적으로 사용되는 기능(로깅, 트랜잭션 등)을 추상화하여 적용
  • 비즈니스 로직과 공통 기능을 분리하여 코드의 재사용성을 높임

장점

  • 특정 메서드의 실행 전후로 일관된 처리가 가능
  • 트랜잭션 관리, 로깅, 예외 처리 등에 활용 가능

📌 예제

@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void beforeMethodExecution(JoinPoint joinPoint) {
        System.out.println("AOP Before 실행: " + joinPoint.getSignature());
    }
}

 

 

📌 정리

                                                                                        

구분 Filter Interceptor AOP
적용 위치 서블릿(DispatcherServlet 이전) 컨트롤러(DispatcherServlet 이후) 서비스, 비즈니스 로직 전체
주요 목적 요청/응답 필터링, 보안 컨트롤러 실행 전후 처리 공통 기능 적용(트랜잭션, 로깅)
실행 순서 가장 먼저 실행 컨트롤러 직전 실행 서비스/비즈니스 계층에서 실행
사용 예제 인증/보안, CORS, 로깅 인증/권한 체크 트랜잭션, 로깅, 예외 처리

 

💡 요청이 들어오면 실행 순서:
Filter → Interceptor → AOP → Controller → Service → Repository → DB

 

 

✅ 언제 사용해야 할까?

  • Filter → 요청을 미리 가로채고, 인증/보안, 로깅, 응답 데이터 가공이 필요할 때
  • Interceptor → 컨트롤러의 실행을 제어하거나, 요청/응답을 로깅하고 싶을 때
  • AOP → 트랜잭션, 로깅, 성능 모니터링 등 특정 메서드 실행 전후로 공통 작업이 필요할 때

즉, Filter는 서블릿 단에서 전역적으로 요청을 관리, Interceptor는 컨트롤러 요청을 제어, AOP는 비즈니스 로직을 대상으로 공통 기능을 적용하는 역할을 합니다. 🚀