programming study/B-Spring

filter, interceptor, aop

gu9gu 2023. 4. 16. 23:15

[10분 테코톡] 조시, 쿤의 서블릿 필터 & 스프링 인터셉터 - YouTube>

 

filter, intercepter, aop는

보안처리, 인증, 권한 처리, 로깅과 같은  공통 관심사항을 따로 처리하는 데 사용되는 기술입니다.

filter와 intercepter의 경우에는 파라미터로 ServletRequest와 ServeltResponse를 제공해주기 때문에 HTTP 헤더에 직접 접근이 가능하기 때문에 웹과 관련되 기능을 구현하는데 적합합니다.

 

 

filter

filter는 부가작업을 처리하기 위해 자바 표준 스펙이고 톰캣과 같은 웹 컨테이너에서 제공하는 기술입니다.

Dispetcher Servlet가 실행하기 전이나 종료된 후에 동작합니다.

요청을 보낼 때는 Dispetcher Servlet 실행 전에 동작하고 응답을 보낼 떄는 Dispetcher Servlet 종료 후에 동작합니다.

filter인터페이스를 구현할 때 dofilter() 메서드에서 chain.doFilter(request, response)를 호출해야지만 다음 필터나 다음 단계로 넘어갈 수 있습니다.

chain.dofilterI() 메서드를 호출하면 ApplicationFilterChain이 실행이 돼서 다음 필터를 동작시킵니다. 모든 필터를 동작시켰으면 다음 단계로 넘어갑니다.

@ControllerAdvcie는 Dispetcher Servlet 범위 내에서만 적용됩니다.

filter는 Dispetcher Servlet 영역에서 실행되지 않기 때문에 예외가 발생한다면 @ControllerAdvcie 어노테이션으로 예외를 처리할 수 없습니다.

보통 모든 요청에 대한 로깅, 문자열 인코딩, 이미지나 데이터에 대한 압축에 사용됩니다.

 

사용 예시 ( ooofilter, addFilterBefore)

public class OOOFilter implements Filter {
 @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
	}
}
    @Bean
    SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        return http.exceptionHandling()
                 // iframe: HeadersConfigurer 설정
                .headers().frameOptions().disable()
                // HTTPS 만 가능하도록 설정
                .and().requiresChannel().anyRequest().requiresSecure()
                // stateless 설정
                .and().sessionManagement().sessionCreationPolicy(STATELESS)
                // CSRF 비활성화 설정
                .and().csrf().disable()
                // 로그인 엔드포인트 설정
                .authenticationEntryPoint(.......)
                .and()
 				// beforeFilter 전에 실행되는 filter 설정
                .addFilterBefore(
                        new oooFilter(),
                        FilterSecurityInterceptor.class)
                // --
                .addFilterAfter(
                        new oooFilter(),
                        LogoutFilter.class)
                .build();
   }

 

 

 

interceptor

interceptor는 부자작업을 처리하기 위해  Spring에서 제공하는 기술입니다.

디스페처 서블릿이 컨트롤러를 호출하기 전/ 후 에 동작합니다.

interceptor에서 예외가 발생한다면 @ControllerAdvcie 어노테이션으로 에외를 처리할 수 있습니다.

HandlerInterceptor를 구현하여 처리합니다.

보통 인증/인가, 컨트롤러로 넘겨주는 정보의 가공, api 호출에 대한 로깅에 사용됩니다.

 

aop

[10분 테코톡] 봄의 AOP와 SPRING AOP - YouTube

Spring AOP, Aspect 개념 특징, AOP 용어 정리 :: effortDev (tistory.com)

 

AOP는 관점 지향 프로그래밍으로 핵심적인 비지니스 로직과 공통적으로 실행해야 하는 부가적인 로직을 각각 나눠서 프로그래밍 하는 것을 말합니다.

스프링에서 제공하는 aop는 메서드 실행 전 후에 동작합니다.

로깅 처리, 성능분석에 사용합니다.

 

 

 

AOP는 관점 지향 프로그래밍으로 핵심적인 비지니스 로직과 공통적으로 실행해야 하는 부가적인 로직을 각각 나눠서 프로그래밍 하는 것을 말합니다.

로깅 처리, 성능분석 과 같이 공통적으로 적용되는 기능을 따로 구현해서 비지니스 로직에서 사용할 수 있게 함으로써 코드의 중복을 줄이고 비지니스 로직의 수정을 피하면서 부가적을 기능을 따로 개발할 수 있다는 장점이 있습니다.

 

AOP 동작 원리

스프링에서 AOP는 프록시 기반으로 동작합니다.

프록시란 클라이언트의 요청 대상으로 위장해서 클라이언트의 요청을 대신 받아주는 것입니다.

참고로 프록시는 사용목적에 따라 2가지 패턴으로 구분됩니다.

클라이언트가 타깃에 접근하는 방법을 제어하기 위한 프록시 패턴

타깃에 부가적인 기능을 부여해주기 위한 데코레이터 패턴

 

그리고 스프링 aop는 메서드 조인 포인트만 지원합니다. 

AspectJ를 사용하면 객체의 생성, 필드값 조회 등 다양한 작업에 부가기능을 사용할 수 있습니다.

 

 

 

 

 

 

 

 

 

[기술면접] java 기술면접 | 기술 면접 에서 탈락하는 이유 및 실수1편 - YouTube

[기술면접] java 기술면접 | 기술면접에서 사소한 실수및 개선 포인트 2편 - YouTube