Spring Framework에서 필터는 주로 웹 애플리케이션의 요청과 응답을 가공하는 데 사용됩니다. 이것은 서블릿 필터(Servlet Filter)를 기반으로 하며, 일반적으로 보안, 로깅, 요청 및 응답의 변형과 같은 횡단 관심사(Cross-cutting Concerns)를 처리하는데 사용됩니다.
필터의 주요 특징과 사용 사례
- 요청 전처리
- 필터는 클라이언트로부터 온 요청을 서블릿이 처리하기 전에 가공할 수 있습니다. 예를 들어, 요청에 대한 로깅, 인증 및 권한 검사 등을 수행할 수 있습니다.
- 응답 후처리
- 서블릿에 의해 처리된 후의 응답을 클라이언트에게 전달하기 전에 수정하거나 추가 정보를 넣는 등의 작업을 할 수 있습니다.
- 체인 구성
- 필터는 체인으로 구성될 수 있으며, 여러 필터가 순서대로 요청과 응답을 처리할 수 있습니다.
- 재사용 가능
- 필터는 여러 웹 애플리케이션에서 재사용할 수 있어, 코드의 중복을 줄이고 관리를 용이하게 합니다.
필터 구현 방법
- 필터 클래스 구현
- `javax.servlet.Filter` 인터페이스를 구현하는 클래스를 만듭니다. 이 클래스에서는 `doFilter` 메소드를 오버라이딩하여 요청과 응답을 처리합니다.
- Spring Bean 등록
- 필터를 Spring Bean으로 등록합니다. 이를 통해 Spring의 기능, 예를 들어 의존성 주입(Dependency Injection)을 활용할 수 있습니다.
- URL 패턴 매핑
- 필터를 적용할 URL 패턴을 지정합니다. 이는 `web.xml`에서 설정하거나, Spring Boot를 사용하는 경우 `FilterRegistrationBean`을 통해 프로그래매틱하게 설정할 수 있습니다.
Spring Framework에서 필터를 사용하면 애플리케이션의 유연성과 재사용성을 높일 수 있으며, 다양한 요구 사항을 효과적으로 처리할 수 있습니다.
동작 원리
Spring Framework의 필터(Filter) 동작 원리를 이해하기 위해서는 먼저 서블릿 필터의 기본 개념과 웹 애플리케이션에서의 요청 처리 과정을 알아야 합니다. 필터는 서블릿 컨테이너에 의해 관리되며, HTTP 요청과 응답을 서블릿이 처리하기 전후에 가로채는 역할을 합니다.
필터의 동작 과정
- 요청 수신
- 클라이언트로부터 HTTP 요청이 서버에 도착하면, 서블릿 컨테이너는 이 요청을 가장 먼저 필터 체인에 전달합니다.
- 필터 체인 처리
- 필터 체인은 하나 이상의 필터로 구성될 수 있습니다. 각 필터는 체인의 다음 필터로 요청을 전달하기 전에 특정 작업(예: 인증 확인, 로깅, 요청 데이터 변환 등)을 수행할 수 있습니다.
- doFilter 메소드
- 각 필터는 `doFilter` 메소드를 구현합니다. 이 메소드는 세 가지 파라미터를 받습니다: `ServletRequest`, `ServletResponse`, 그리고 필터 체인 객체. 필터가 요청을 처리한 후에는, 필터 체인의 `doFilter` 메소드를 호출하여 요청을 체인의 다음 요소(또 다른 필터 또는 최종 목적지인 서블릿)로 전달합니다.
- 서블릿 처리
- 마지막 필터가 요청을 처리하고 체인을 통과시킨 후, 요청은 최종적으로 서블릿에 도달합니다. 서블릿은 비즈니스 로직을 처리하고 응답을 생성합니다.
- 응답의 역방향 전달
- 응답은 서블릿에서 생성되고 다시 필터 체인을 거쳐 클라이언트로 전송됩니다. 이때 필터는 응답에 대해 후처리 작업(예: 응답 데이터 암호화, 헤더 추가 등)을 수행할 수 있습니다.
- 응답 완료
- 모든 필터가 응답을 처리하면, 응답은 클라이언트에게 전송됩니다.
필터 구성
필터는 일반적으로 다음과 같이 구성됩니다:
- 필터 클래스
- `javax.servlet.Filter` 인터페이스를 구현하는 클래스. 이 클래스에서 `doFilter` 메소드를 오버라이드하여 요청과 응답을 처리합니다.
- 설정
- 필터는 `web.xml` 파일 또는 Spring Boot의 경우 Java 구성 클래스를 통해 설정될 수 있습니다. 이 설정에는 필터 이름, 필터 클래스, URL 패턴 매핑 등이 포함됩니다.
이렇게 필터를 사용함으로써, Spring Framework 기반의 웹 애플리케이션은 요청과 응답을 효과적으로 관리하고, 보안, 로깅, 요청/응답 변형 등의 횡단 관심사를 처리할 수 있습니다.
'[개발] 프레임워크 > Spring' 카테고리의 다른 글
Swagger (0) | 2023.12.26 |
---|---|
[MyBatis] TypeHandler (0) | 2023.12.12 |
[Spring FW] Interceptor (0) | 2023.12.09 |
Spring에서 ApplicationEvent 처리하기 (0) | 2023.11.29 |
스프링 트랜잭션 (0) | 2023.11.26 |