soosue
끄적끄적
soosue
전체 방문자
오늘
어제
  • 분류 전체보기 (31)
    • TIL (6)
    • 살짝 정리 (10)
    • note (1)
    • 내가필요해서만든 (1)
    • 막쓰기 (3)
    • spring (4)
    • java (2)
    • git (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • live templates
  • intellij logger template
  • logger template
  • Logger 구현체
  • Rebase
  • git alias 설정
  • slf4j Logger
  • git config파일
  • 로거 작성
  • git
  • Logger만들기
  • branch
  • git alias 하는법
  • remote
  • git config alias
  • git 명령어 alias
  • Logger 구현체 선택
  • switch -t
  • 로거 템플릿
  • .gitconfig 파일

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
soosue

끄적끄적

[Spring] Filter란,
TIL

[Spring] Filter란,

2021. 7. 30. 22:39

1. 필터란,

2. 필터는 그럼 언제 사용하는가?

3. 필터는 어떻게 실행되는가?

 

필터란,

이름의 의미만 보면, '요청에 대해서 거름망 같은 역할 수행하나?' 하는 생각을 할 수 있다.

실제로 로그인 여부를 확인한다거나, 들어온 요청에 대해서 character encoding 등의 일을 한다.

 

하지만 그 외에 인터셉터와 같이 컨트롤러로 가기 전, 하고 싶은 작업들을 행할 수 있다.

 

 

클라이언트가 요청을 하면,

WAS -> Filter -> Servlet -> Interceptor -> Controller 의 순으로 거치게 되는데

 

필터가 서블릿쪽 기술이고, 인터셉터는 스프링쪽 기술이어서

서블릿 필터, 스프링 인터셉터로 불리기도 한다.

 

 

필터는 그럼 언제 사용하는가?

필터와 인터셉터는 공통관심사를 처리할 때 사용한다.

로그인 되었는지 확인을 한다거나, 모든 요청 로그를 남기기, 요청 응답시간 계산하기 등에 사용될 수 있다.

(스프링 시큐리티도 필터를 이용하여 만들어졌다.)

 

AOP와 하는 일은 비슷하지만,

필터와 인터셉터는 ServletRequest와 ServletResponse를 제공해주기 때문에

웹과 관련된 공통 관심사를 처리할 때, 사용하면 좋다.

Filter interface, doFilter메소드의 파라미터로 ServletRequest와 ServletResponse가 있다.

 

필터는 어떻게 실행되는가?

먼저 간단히 설명하자면, 필터는 여러 개가 존재할 수 있고, 순서를 가지고 순차적으로 실행된다.

마지막 필터는 서블릿을 실행시켜준다.

 

시작점은 StandardWrapperValve 객체에서 찾아볼 수 있는데,

 

filter는 chain형식으로 이루어져있다.

filter1 -> filter2 -> filter3 -> ... -> filter10과 같이 여러 filter들이 chain처럼 연결되어 있고, 순서대로 실행이 된다.

OrderedCharacterEncodingFilter부터 WsFilter까지 순서대로 실행이 된다.

filterChain.doFilter(...)로 시작을 하며,

내부적으로는 internalDoFilter메소드에서 위의 filters배열을 인덱스를 가지고 doFilter메소드를 실행한다.

 

다음은 모든 요청의 시작과 끝에 log를 남기는 필터의 예다.

doFilter메소드가 실행되면 해당 필터의 메소드가 실행되고, 해당 필터에서 하고자 했던 로직인 진행된다.

여기서 제일 중요한 것은 chain.doFilter(request, response)이다.

이 메소드는 아까 맨처음의 chainFilter.doFilter와 같으며, 다음 filter를 실행시켜준다.

 

위에서 말했듯이 마지막 필터가 서블릿을 실행시켜주기 때문에, 다음 필터가 실행되지 않으면,

요청이 서블릿에 도달하지 못하여 컨트롤러에서 로직을 처리할 수가 없게되므로, 빼먹지 않도록 주의해야 한다.

 

 

참고) 인프런 강의 - 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

'TIL' 카테고리의 다른 글

[Git] git remote, 원격 저장소 확인, 추가, 수정, 삭제  (0) 2021.10.20
SQL 쿼리 실행 원리  (0) 2021.09.05
[Java] 동시성, 스레드 조심해야할 사항1  (0) 2021.08.07
[Git] Fork, Pull Request, Clone, Push  (0) 2021.08.01
[Git] fork, pull request, rebase  (0) 2021.07.26
    'TIL' 카테고리의 다른 글
    • SQL 쿼리 실행 원리
    • [Java] 동시성, 스레드 조심해야할 사항1
    • [Git] Fork, Pull Request, Clone, Push
    • [Git] fork, pull request, rebase
    soosue
    soosue

    티스토리툴바