괴발개발 공부하는 블로그

filter, interceptor, argument resolver 의 역할과 차이 본문

프로젝트

filter, interceptor, argument resolver 의 역할과 차이

ompeom 2023. 3. 6. 12:30

로그인 처리를 하면서 servlet filter, spring interceptor, spring argument resolver 에 대해서 공부했다.

모두 공통의 관심사를 처리할 때 사용한다는 특징이 있다.

 

어떠한 상황에 어떤 것을 사용해야 하는지 정확히 구분하기 위해 정리해보기로 했다.

 

servlet filter

디스패처 서블릿에 요청이 전달되기 전 처리를 할 수 있다.

url 패턴에 맞는 모든 요청에 대해서 처리가 가능하다.

필터는 J2EE 표준 스펙 기능으로서 spring 과 분리된 기능을 처리해야할 때 사용한다. 웹 컨테이너에서 동작하기 때문에 올바르지 않은 요청일 경우 사전에 차단 가능하여 스프링 컨테이너까지의 진입이 차단되어 안정성을 높일 수 있다.

 

spring interceptor

컨트롤러를 호출하기 전과 후의 처리를 할 수 있다.

디스패처 서블릿은 핸들러 매핑을 통해 컨트롤러를 찾는데, 그 결과로 실행체인(HandlerExecutionChain)을 돌려준다. 이 실행 체인은 1개 이상의 인터셉터가 등록이 되어 있다면, 인터셉터를 거쳐 컨트롤러를 실행하게 한다. 인터셉터가 없다면 바로 컨트롤러를 실행한다.

로그인 된 사용자만이 마이페이지에 접속할 수 있다면, 인터셉터에서 검증이 필요하다.

 

spring argument resolver

컨트롤러에 어떠한 요청이 들어왔을 때, 요청에 들어온 값을 이용해 원하는 객체를 만들 수 있다.

메서드 파라미터를 인자값들에 주입해주는 전략적 인터페이스이다.

jwt 토큰과 함께 요청이 들어온다면 이 토큰이 유효한 토큰인지 확인 후, 토큰에 저장된 id 를 꺼내서 로그인 유저 객체를 생성해야 한다. 만약 이것을 컨트롤러마다 구현하게 된다면 중복된 코드가 생기고 컨트롤러의 책임이 증가한다.

 

동작 순서

  1. client request
  2. filter
  3. dispatcher servlet
  4. client request 에 대한 handler mapping 처리
    • (1) request mapping 
    • (2) interceptor
    • (3) argument resolver
  5. controller

 

filter vs interceptor vs argument resolver

- 필터는 스프링과 무관한 전역적으로 처리하는 작업(보안 등) 과 같은 것을 처리할 때 사용한다.

- 필터는 서블릿 컨테이너, 인터셉터는 스프링 컨테이너에서 관리한다.

- 인터셉터는 스프링에 들어온 요청을 전역적으로 처리하는 작업(로그인 인가)

- 인터셉터는 컨트롤러가 실행되기 전에 요청을 가로채며, 특정 객체를 반환할 수 없다. 오직 boolean 또는 void 만 반환이 가능하다.

- 리졸버는 인터셉터 이후에 동작하며, 요청이 컨트롤러로 들어왔을 때 값으로 원하는 객체를 생성할 수 있다.

 

interceptor 로 로그인 상태인지 확인 후,

argument resolver 로 받아온 요청을 통해 authUser 객체를 생성하는 방식을 사용하였다.

'프로젝트' 카테고리의 다른 글

웹 소켓과 tcp/ip 소켓의 차이점  (0) 2023.06.07
cognito와 oauth2.0  (0) 2023.05.24
프로젝트 인프라 구성  (0) 2023.04.04
세션 방식을 선택한 이유  (0) 2023.02.28
jwt 토큰 방식을 선택한 이유  (0) 2022.10.13
Comments