
Filter 로그를 보는데 항상 같은 요청이 두번 연속으로 와 Filter가 두번 돌고 있음을 깨닫게 되었다.

이를 두고 프론트에서 요청을 두번하는 것인가 VS Filter가 두번 돌게 설정되어있는 것인가로 프론트분과 논쟁하다가 🤣
// JWT 필터
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
// 로그 기록 : 요청 uri
log.info("doFilter JWTFilter, uri : {}", ((HttpServletRequest) request).getRequestURI());
System.out.println(request.getMethod());
.. 코드 생략

요청 메소드를 출력해보고 OPTIONS라는 것을 알게되었다. 어쩐지 첫번째 요청에는 응답이 없더라,, 😭
Preflight Request(권한 및 안전 확인용 사전 요청)에 사용되는 메소드이다.
네트워크 요청 시 실제 요청 전에 Preflight인 OPTIONS 요청이 발생하는 경우를 종종 볼 수 있는데 이러한 OPTIONS 요청은 서버와 브라우저와 통신하기 위한 통신 옵션을 확인하기 위해 사용한다. 이는 서버가 어떤 method, header, content-type을 지원하는지를 미리 알아내어 거부 당할 통신 옵션의 로직들을 불필요하게 실행시키지 않을 수 있어 더 효율적인 통신이 가능하다고한다.
위의 Preflight요청이 발생하는 상황은 CORS와 관련이 있으나 모든 CORS 상황에서 발생하는 것은 아니다.
GET, HEAD, POST 요청이 아닌 경우Content-Type이 application/x-www-form-urlencoded, multipart/form-data, text/plain 이 아닌 경우우선 preflight은 보안을 위한 절차이지만, 경우에 따라 응답속도가 중요하다면 발생하지 않도록 하는 것이 좋다.
이번 프로젝트는 프론트와 웹서버가 동일한 오리진을 사용하고 있지 않으며, JWT를 헤더에 추가하여 실기 때문에 OPTIONS가 발생할 수 밖에 없다고 판단하였다. 또한 모두 응답속도를 엄청 중요하게 생각하는 기능들이 있지는 않아서 그냥 진행하기로 하였다! 역시 협업,, 혼자 공부하는 것보다 팀 프로젝트를 통해서 정말 많이 알게되는 것 같아 너무 좋다 🤓
Ref.
NUKEGUYS BLOG
멋진홍홍
Wonit