상세 컨텐츠

본문 제목

[CS] 필터, 인터셉터, AOP: Java 웹 애플리케이션에서의 요청 처리 및 공통 관심사 관리

CS 과제 정리

by thisnorm 2025. 2. 2. 17:55

본문

📌필터 개요

필터는 서블릿이나 정적 콘텐츠에 대한 요청 또는 응답을 필터링하는 객체이다. 필터는 doFilter 메서드에서 필터링 작업을 수행하며, 초기화 매개변수를 얻을 수 있는 FilterConfig 객체와 ServletContext에 대한 참조를 통해 필요한 리소스를 로드할 수 있다. 필터는 웹 애플리케이션의 배포 설명자에서 구성된다.

https://javaee.github.io/javaee-spec/javadocs/javax/servlet/Filter.html

 

Filter (Java(TM) EE 8 Specification APIs)

A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both. Filters perform filtering in the doFilter method. Every Filter has access to a FilterConfig

javaee.github.io

 

필터의 주요 기능

  • 인증 필터: 사용자 인증을 처리한다.
  • 로깅 및 감사 필터: 요청 및 응답을 기록한다.
  • 이미지 변환 필터: 이미지 형식을 변환한다.
  • 데이터 압축 필터: 응답 데이터를 압축한다.
  • 암호화 필터: 데이터를 암호화한다.
  • 토큰화 필터: 요청 데이터를 토큰화한다.
  • 리소스 액세스 이벤트를 트리거하는 필터: 특정 이벤트를 발생시킨다.
  • XSL/T 필터: XML 데이터를 변환한다.
  • Mime 유형 체인 필터: MIME 유형을 처리한다.

 

 

필터의 메서드

  1. init(FilterConfig filterConfig): 필터가 서비스에 제공되고 있음을 알리기 위해 웹 컨테이너에서 호출된다. 필터는 인스턴스화된 후 한 번만 호출되며, 이 메서드가 성공적으로 완료되어야 필터가 요청을 처리할 수 있다.
  2. doFilter(ServletRequest request, ServletResponse response, FilterChain chain): 클라이언트 요청으로 인해 요청/응답 쌍이 체인을 통해 전달될 때마다 호출된다. 이 메서드는 요청을 검토하고, 필요에 따라 요청 및 응답 객체를 래핑하여 필터링 작업을 수행한다. chain.doFilter()를 호출하여 다음 필터 또는 리소스를 호출하거나 요청 처리를 차단할 수 있다.
  3. destroy(): 필터에 서비스 중단을 알리기 위해 웹 컨테이너가 호출된다. 이 메서드는 필터의 모든 스레드가 종료된 후 호출되며, 필터가 보관 중인 리소스를 정리하는 데 사용된다.

 

 

결론

필터는 웹 애플리케이션에서 요청과 응답을 처리하는 중요한 구성 요소로, 다양한 기능을 수행하며, 초기화 및 종료 메서드를 통해 생명주기를 관리한다. 필터를 통해 인증, 로깅, 데이터 변환 등 다양한 작업을 수행할 수 있다.

 


 

📌인터셉터(interceptor)란

인터셉터는 사용자 정의 핸들러 실행 체인을 허용하는 워크플로 인터페이스이다. 애플리케이션은 특정 핸들러 그룹에 대해 기존 또는 사용자 정의 인터셉터를 원하는 수만큼 등록하여 각 핸들러 구현을 수정하지 않고도 공통적인 전처리 동작을 추가할 수 있다.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerInterceptor.html

 

HandlerInterceptor (Spring Framework 6.2.2 API)

postHandle Interception point after successful execution of a handler. Called after HandlerAdapter actually invoked the handler, but before the DispatcherServlet renders the view. Can expose additional model objects to the view via the given ModelAndView.

docs.spring.io

 

주요 기능

  • 전처리 및 후처리: 인터셉터는 핸들러 실행 전(preHandle)과 후(postHandle), 그리고 요청 처리 완료 후(afterCompletion)에 호출된다. 이를 통해 요청 처리의 각 단계에서 추가적인 작업을 수행할 수 있다.
  • 비동기 처리 지원: 비동기 처리 시나리오에서 핸들러는 메인 스레드가 종료되는 동안 별도의 스레드에서 실행될 수 있으며, 이 경우에도 인터셉터의 메서드가 호출된다.

 

 

인터셉터의 동작

  1. preHandle: 핸들러 실행 전의 인터셉션 지점으로, HandlerMapping이 적절한 핸들러 객체를 결정한 후, HandlerAdapter가 핸들러를 호출하기 전에 호출된다. 이 메서드는 실행 체인을 중단할 수 있으며, 일반적으로 HTTP 오류를 보내거나 사용자 지정 응답을 작성하는 데 사용된다.
  2. postHandle: 핸들러를 성공적으로 실행한 후의 인터셉션 지점이다. HandlerAdapter가 실제로 핸들러를 호출한 후, DispatcherServlet이 뷰를 렌더링하기 전에 호출된다. 이 메서드를 통해 추가 모델 객체를 뷰에 노출할 수 있다.
  3. afterCompletion: 요청 처리 완료 후, 즉 뷰를 렌더링한 후 호출되는 콜백이다. 핸들러 실행의 모든 결과에 대해 호출되므로 적절한 리소스 정리가 가능하다.

 

 

인터셉터와 필터의 차이

인터셉터는 기본적으로 Servlet Filter와 비슷하지만, 핸들러 자체의 실행을 금지하는 옵션과 사용자 정의 사후 처리가 있는 사용자 정의 사전 처리만 허용한다. 반면, 필터는 더 강력하며 요청 및 응답 객체를 교환할 수 있다. 필터는 web.xml에서 구성되고, 애플리케이션 컨텍스트의 HandlerInterceptor에 구성된다.

 

 

 

사용 권장 사항

인터셉터는 주석이 달린 컨트롤러 경로 매칭과 불일치할 가능성이 있기 때문에 보안 계층으로 적합하지 않다. 일반적으로 Spring Security를 사용하거나 Servlet 필터 체인과 통합된 유사한 접근 방식을 사용하고 가능한 한 일찍 적용하는 것이 좋다.

이와 같이 인터셉터는 요청 처리 과정에서 전처리 및 후처리 작업을 수행할 수 있는 유용한 도구이다.

 


 

📌AOP에 대해서

AOP는 프로그램의 핵심 비즈니스 로직과는 별개로 공통적인 관심사를 모듈화하는 프로그래밍 패러다임이다. 이를 통해 코드의 재사용성을 높이고, 유지보수를 용이하게 하며, 코드의 가독성을 향상시킬 수 있다.

Aspect Oriented Programming with Spring :: Spring Framework

 

Aspect Oriented Programming with Spring :: Spring Framework

Aspect-oriented Programming (AOP) complements Object-oriented Programming (OOP) by providing another way of thinking about program structure. The key unit of modularity in OOP is the class, whereas in AOP the unit of modularity is the aspect. Aspects enabl

docs.spring.io

 

AOP의 주요 개념

  1. 관심사(Concern): 프로그램에서 처리해야 할 기능이나 동작을 의미한다. 핵심 관심사와 공통 관심사로 나눌 수 있다.
    • 핵심 관심사: 비즈니스 로직과 관련된 기능이다.
    • 공통 관심사: 로깅, 보안, 트랜잭션 관리 등 여러 모듈에서 공통적으로 필요한 기능이다.
  2. 어드바이스(Advice): 특정 지점에서 실행되는 코드 조각이다. 어드바이스는 다음과 같은 종류가 있다.
    • Before Advice: 타겟 메서드 실행 전에 실행된다.
    • After Advice: 타겟 메서드 실행 후에 실행된다.
    • Around Advice: 타겟 메서드 실행 전후에 실행되며, 메서드 실행을 제어할 수 있다.
  3. 포인트컷(Pointcut): 어드바이스가 적용될 지점을 정의하는 표현식이다. 특정 메서드나 클래스에 어드바이스를 적용할 수 있도록 설정한다.
  4. 조인포인트(Joinpoint): 어드바이스가 적용될 수 있는 프로그램의 특정 지점이다. 메서드 호출, 예외 발생 등이 조인포인트가 될 수 있다.
  5. 어스팩트(Aspect): 공통 관심사와 관련된 어드바이스와 포인트컷을 묶은 모듈이다. AOP의 핵심 구성 요소로, 특정 기능을 모듈화하여 재사용할 수 있게 한다.

 

 

 

AOP의 장점

  • 코드의 재사용성 향상: 공통 관심사를 별도의 모듈로 분리하여 여러 곳에서 재사용할 수 있다.
  • 유지보수 용이: 공통 기능을 한 곳에서 관리하므로, 변경 시 코드의 일관성을 유지할 수 있다.
  • 가독성 향상: 비즈니스 로직과 공통 관심사를 분리하여 코드의 가독성을 높인다.

 

 

결론

AOP는 공통 관심사를 모듈화하여 코드의 재사용성과 유지보수성을 높이는 프로그래밍 패러다임이다. 이를 통해 개발자는 비즈니스 로직에 집중할 수 있으며, 공통 기능은 별도로 관리할 수 있다. AOP는 특히 로깅, 보안, 트랜잭션 관리와 같은 기능을 구현하는 데 유용하다.

관련글 더보기