배경
백엔드 프론트엔드 각자 열심히 개발을 진행하면서 드디어 프론트쪽 UI작업이 어느정도 끝나고 API 연동 시점에서 계속해서 403 에러가 터지기 시작했다..
분명 로컬에서 잘 작동을 했고 이미 모든 권한에 관련된 것들은 처리를 해둔 상태인데 도데체 왜???
문제
에러가 발생한 이유는 되게 간단했다
develop
환경에서 JPA.ddl-auto 설정 값을 none으로 설정을 해뒀더니 개발을 진행하면서 변경된 엔티티 반영이 되지 않아서 SQLSyntaxErrorException
이 발생하게 되었다
그럼 여기서 이해가 되지 않는 점은 예외가 발생하면 아래와 같이 500에러가 터지기를 기대했는데 왠걸? 403????!?
무한 403에러가 나는 것은 바로 시큐리티에서 찾을 수 있었다
AuthorizationFilter
Security를 사용을 하면서 403
에러는 별다른 설정이 없다면 주로 AuthorizationFilter
에서 터지게 되는데 여기서 문제점을 찾을 수 있었다
위 사진에서 requestDispatcherPath
는 요청 들어온 URI를 나타내는데 내가 요청한 URI는 /api/v1/~~
임에도 불구하고 /error
로 요청이 들어간 것을 확인 할 수 있다
이로 인해 /error
에 대해서는 권한 설정을 해두지 않았고 계속해서 403 에러가 발생하였다
원인
/error
로 요청이 변경 된 이유는 아래에서 확인 할 수 있는데
기본적으로 처리되지 않은 에러에 대해서 Spring boot는 내부적으로 /error
경로로 포워딩을 시키는 것을 알 수 있다
해결 방법
이를 해결하기 위해서 필터 가장 앞단에 ExceptionHandlerFilter를 새로 하나 만들어 두었고 처리되지 않은 에러들에 대해서 모두 500에러로 그리고 프론트와 약속한 구조로 응답값을 보내도록 설정을 해두었다
또한 서버쪽에서 로그를 남겨 주기적으로 해당 예외들에 대해서 처리가 필요할 경우 Filter나 ControllerAdvice에서 예외 반환 값들을 업데이트를 하도록 결정을 했다
단순히 Database 테이블 구조가 맞지않아서 생긴 문제로 인해 이렇게 많은 부분이 연관되서 정말 오랫동안 삽질을 한 것 같다…ㅜ
참고
Exception Handling in Spring MVC
'공부기록 > 기술공유' 카테고리의 다른 글
RequestBody Runtime시 동적 주입 (0) | 2023.11.15 |
---|---|
??? : 어딜 보시는 거죠 그건 제 잔상입니다만?!? (0) | 2023.11.13 |
Redis 사용기 (2) | 2023.11.12 |
이력서 저장 테이블 구조 재구성 (0) | 2023.11.10 |
Git Branch Linear (0) | 2023.11.06 |