240527
오늘의 학습
● 1. Filter
● 2. 스프링 숙련 5주차 까지 수강 완료
Fiter
필터란 Web 애플리케이션에서 관리되는 영역으로 클라이언트로 부터 오는 요청과 응답에 대해 최초/최종 단계의
위치이며 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있다.
주로 범용적으로 처리해야 하는 작업들, 예를들면 로깅 및 보안 처리에 활용한다.
또한 인증, 인가와 관련된 로직들을 처리할 수도 있다.
필터를 사용하면 인증, 인가와 관련된 로직을 비즈니스 로직과 분리하여 관리할 수 있다는 장점이 있다.
필터는 한 개만 존재하는 것이 아닌 여러 개가 Chain 형식으로 묶여서 처리가 될 수도 있다.
Filter 사용 방법
Filter로 사용할 클래스에 Filter interface를 implements하게 되면 doFilter 메서드를 구현 할 수 있게 된다.
doFilter 메서드를 재정의 하여 사용할 수 있는데 해당 메서드 블록이 요청을 제일 먼저 받게 되고 수행을 하게 되면
DispatcherServlet으로 그제서야 넘기게 된다.
@Order(1)
public class TestFilter implements Filter {
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
}
1. ServletRequest request
해당 매개변수로는 request 요청으로부터 넘어온 값을 받아서 이용할 수 있고,
2. ServletResponse response
해당 매개변수로는 응답에 대한 값을 담아서 사용자에게 넘겨줄 수 있다.
3. FilterChain chain
해당 매개변수로는 FilterChain 클래스 내부의 doFilter() 메서드를 이용하여 다음 필터로 넘겨줄 수 있다.
Filter Chain
위의 예시 코드를 살펴보면 "chain.doFilter(request, response)" 한 줄을 볼 수 있는데 이 한 줄은 chain을 통해 다음 필터로
값을 넘겨 줄 수 있는 코드이다.
필터는 여러개가 존재할 수 있으며 필터를 통해 여러개의 선처리 작업을 진행하고 후처리 작업을 진행할 수 있게 된다.
( 참고로 주로 하는 작업은 JWT 인증 과정 등등이 있다. )
@Order(1)
public class TestFilter implements Filter {
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
}
@Order(2)
public class TestFilter2 implements Filter {
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
}
해당 코드를 보면 @Order(1) 이 존재하는데 이건 스프링 애플리케이션에서 빈의 순서를 지정하기 위해서 사용한다.
여기선 Filter의 순서를 나타내기 위해서 사용하였다.
@Order(1) 번이 먼저 수행이되고 chain.doFilter() 메서드를 통해 다음 필터로 넘겨질 때 @Order(2)번으로 넘겨진다.
# 오늘의 회고
Filter를 공부를 하면서 이해를 하기위해 자연스럽게 ServletContainer와 SpringContainer를 공부를 하게 되었고 ServletContainer와 SpringContainer에 대해 알게 되었고 서블릿과 스프링의 동작원리를 어느정도 파악을 하게 되었다.
JWT를 이용하면서 기본적인 Servlet Filter에 대해 알게 되어서 좋았다.
JPA에 대해서도 오늘은 학습을 하며 깨달은 부분이 있어서 좋았다. 오늘은 좀 뿌듯한 하루 였다.
'내일배움캠프 Spring 5기' 카테고리의 다른 글
내일배움캠프 30일차 TIL - JWT(Stateless) (0) | 2024.05.29 |
---|---|
내일배움캠프 29일차 TIL - ExceptionHandler (0) | 2024.05.28 |
내일배움캠프 27일차 TIL - JWT (0) | 2024.05.24 |
내일배움캠프 26일차 TIL - JPA핵심 및 관계, 3계층 분리 (0) | 2024.05.23 |
내일배움캠프 25일차 TIL - 외래키 (1) | 2024.05.22 |