스프링 프레임워크는 웹 애플리케이션 개발을 간편하고 효율적으로 만들기 위한 자바 기반 오픈 소스 프레임워크입니다. 이 글에서는 스프링MVC에서 사용되는 필터(Filter)와 인터셉터(Interceptor)의 개념 및 활용 방법에 대해 보다 상세하게 설명하겠습니다.
1. 스프링 필터와 인터셉터 개요
웹 애플리케이션 개발 시 종종 전역적인 처리를 적용해야 할 필요가 있습니다. 예를 들어, 인증 및 권한 확인, 요청 및 응답 로깅, 성능 모니터링, 텍스트 인코딩 등과 같은 공통 처리를 구현할 때 필터와 인터셉터를 활용합니다. 필터는 서블릿 컨테이너 구성 요소로, 인터셉터는 스프링 어플리케이션 컨텍스트 내부에서 작동합니다. 두 개념 모두 요청-응답 사이클에 대한 전처리와 후처리 로직을 추가할 수 있게 도와줍니다.
2. 스프링 필터
필터는 서블릿 컨테이너 레벨에서 미들웨어 형태로 작동하여 요청과 응답을 처리합니다. 필터는 주로 아래와 같은 상황에서 사용됩니다.
- 인코딩 설정
웹 요청 및 응답에 대한 인코딩을 처리하여 텍스트 데이터 표현이 깨지지 않도록 합니다. - 보안 처리
요청에 대한 인증 및 권한 확인을 수행합니다. - 내부 라우팅
요청 경로를 수정하여 다른 주소로 리다이렉트합니다.
필터는 서블릿 컨테이너의 일련의 필터 체인 내에서 작동하며, 필터는 순서대로 실행됩니다. 이러한 필터 체인을 통한 실행 과정에서 다음 필터 또는 실행 대상 컨트롤러로 요청이 전달됩니다.
필터를 사용하는 방법은 다음과 같습니다.
1) 필터 클래스를 작성하여 javax.servlet.Filter 인터페이스를 구현합니다.
public class LoggingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 필터 초기화 작업을 수행합니다.
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 요청 처리 전에 수행할 작업들을 구현합니다.
chain.doFilter(request, response); // 다음 필터 또는 컨트롤러로 요청을 전달합니다.
// 요청 처리 후에 수행할 작업들을 구현합니다.
}
@Override
public void destroy() {
// 필터의 자원을 해제할때 수행할 작업을 구현합니다.
}
}
2) 필터를 웹 애플리케이션에 등록합니다. 스프링 부트의 경우 다음처럼 구현할 수 있습니다.
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<LoggingFilter> loggingFilter() {
FilterRegistrationBean<LoggingFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new LoggingFilter());
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
}
이렇게 구현한 필터는 웹 애플리케이션 전체에 적용되어 요청 및 응답에 대한 로깅 처리를 수행합니다.
3. 스프링 인터셉터
스프링 인터셉터는 웹 애플리케이션 내에서 특정 처리를 수행하기 위해 추가되는 컴포넌트로, 컨트롤러 메소드의 실행 전과 실행 후에 로직을 추가할 수 있습니다.
스프링 인터셉터는 주로 다음과 같은 상황에서 사용됩니다.
- 인증 및 권한 확인
사용자 인증이나 역할에 따른 권한 확인을 수행하여 요청을 진행할지 결정합니다. - 세션 관리
사용자 세션을 검사하거나 개별 사용자의 세션 상태에 따라 특정 작업을 수행합니다. - 로깅 및 모니터링
요청 및 응답에 대한 세부 정보를 로깅하거나 모니터링 작업을 수행합니다.
인터셉터를 사용하는 방법은 다음과 같습니다.
1) 인터셉터 클래스를 작성하여 org.springframework.web.servlet.HandlerInterceptor 인터페이스를 구현합니다.
public class LoggingInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 요청 처리 전에 수행할 작업들을 구현합니다.
return true; // 요청 처리 계속 진행 여부를 결정합니다.
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
// 요청 처리 후에 수행할 작업들을 구현합니다.
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// 응답이 클라이언트에 전송된 후에 수행할 작업들을 구현합니다.
}
}
2) 인터셉터를 웹 애플리케이션에 등록합니다.
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private LoggingInterceptor loggingInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loggingInterceptor).addPathPatterns("/**");
}
}
필터와 인터셉터는 웹 애플리케이션 전체에 걸쳐 공통적으로 처리할 수 있는 공통 로직을 구현하는데 유용합니다. 이를 활용하여 웹 애플리케이션을 보다 효율적으로 구현할 수 있습니다.
4. 요약
이 글에서는 스프링MVC를 사용하여 웹 애플리케이션 개발 시 필터와 인터셉터의 활용 방법을 자세하게 살펴보았습니다. 필터와 인터셉터는 요청에 대한 전처리와 후처리 과정에서 공통 작업을 적용하거나 특정 기능들을 구현할 수 있습니다. 이러한 기능들은 웹 애플리케이션의 보안, 성능, 사용자 경험 등의 측면에서 중요한 역할을 수행합니다.
실제 프로젝트에서 필터와 인터셉터를 활용해보면서 감을 익히고, 필요한 경우에 적절한 사용법을 적용하여 웹 애플리케이션 개발에 더욱 효율적인 결과를 얻으시길 바랍니다.
'Programming > Spring' 카테고리의 다른 글
스프링 프레임워크 기초: Lombok (0) | 2023.08.06 |
---|---|
스프링 프레임워크 기초: 스프링MVC 예외 처리 (0) | 2023.08.05 |
스프링 프레임워크 기초: 스프링MVC_HTTP요청응답 (0) | 2023.08.03 |
스프링 프레임워크 기초: 스프링MVC 구조 (0) | 2023.08.02 |
스프링 프레임워크 기초: SpEL (스프링 표현 언어) (0) | 2023.08.01 |