본문 바로가기

Language/Spring

[공통처리] Filter, Interceptor, AOP 차이점 및 흐름과 역할

728x90
공통 처리
  • 개발을 하다보면 다음과 같이 공통적으로 적용되는 부분들이 존재
    • 로그인 세션 유지
    • 권한 체크(Spring Security 등)
    • XSS(roos site sprict)
    • 로깅
    • 페이지 인코딩 처리
  • 이러한 공통 기능들은 모든 페이지에 똑같은 코드를 넣게 되면 중복 코드를 초래하게 되는데 이는 가독성이 좋지 못할 뿐더러 유연성과 유지보수 측면에서도 매우 좋지 않음
  • 따라서 공통된 코드들은 따로 분리하여 관리하는 것이 매우 효율적인데 공통 코드를 처리하는 방법은 3가지가 존재하는데 각각 적용되는 위치가 다름
    • Filter
    • Intercepter
    • AOP

요청에 따른 흐름

  • Filter : Servlet Container(Tomcat) 영역 = 서블릿 레벨
  • Interceptor, AOP : Spring Container 영역 = 스프링 레벨
  • 동작 흐름
    1. 요청(Request)이 Servlet으로 들어옴
    2. Filter 실행 후 Spring Container로 Request 전달
    3. Dispatcher Servlet에서 preHandler로 Interceptor로 Request 전달
    4. Interceptor에서 Controller로 Request를 전달하기 전 AOP가 먼저 실행
    5. Controller에가 Request에 따른 비즈니스 로직 처리
    6. Controller에서 반환된 Response를 afterCompletion과 postHandler로 Dispatcher Servlet에 전달
    7. Response를 Filter에 전달
    8. Filter는 클라이언트에게 응답(Response)

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

 

  • 역할
    • Servlet Container(Tomcat) 단계에서 요청을 가로채어 전체 요청에 적용되는 전처리/후처리 작업 수행
  • 장점
    • Spring 의존 없이 서블릿 컨테이너 수준에서 실행되므로, 스프링과 무관한 기능에도 활용 가능
  • 사용 예
    • 인코딩 변환 처리
    • XSS 방어
    • CORS 설정
    • 인증 확인
Interceptor

 

  • 역할
    • Spring Container에서 DispatcherServlet 이후에 실행되어 컨트롤러 전후의 요청/응답을 처리
  • 장점
    • Spring MVC에 밀접하게 통합되어 컨트롤러 호출 전후에 특정 로직을 추가하기 적합
  • 사용 예
    • 로그인 여부 확인
    • 권한 체크
    • API 요청 로깅

 

AOP (Aspect-Oriented Programming)

 

  • 역할
    • 메서드 실행 전후 부가 기능을 삽입하는 방식으로 비즈니스 로직과 공통 관심사를 분리
  • 장점
    • Proxy 패턴을 활용하여 메서드 전후로직을 삽입하므로 코드 중복 없이 재사용 가능
  • 사용 예
    • 트랜잭션 관리
    • 성능 모니터링
    • 메서드 실행 시간 측정

 

 

728x90