-
Notifications
You must be signed in to change notification settings - Fork 1
Spring에서 JWT 인증 인가 위치 제안(Filter와 Interceptor)
나경호(Na Gyeongho) edited this page May 27, 2025
·
1 revision
- 현재
Filter
에서sendError
를 통해 응답 바디를 일관된 형태로 변환하고 있음. - 하지만 코드가 복잡해지고 유지보수성이 떨어지는 문제가 발생함.
-
Filter
대신Interceptor
를 활용하면 응답 바디를 더 쉽게 통일할 수 있지 않을까?
- 요청을 가장 앞단에서 막을 수 있다는 점이 장점.
- 일반적으로 인증/인가는 Filter에서 처리하는 것이 일반적이므로, 자연스럽게 Filter를 선택.
-
Filter
는 보안 및 성능상 이점이 있음.- 요청이 DispatcherServlet까지 가지 않고 차단 가능 → 불필요한 리소스 낭비 방지.
- 클라이언트에서 잘못된 요청을 보낸 경우, 빠르게 차단할 수 있음.
-
Interceptor
는 SpringContainer의 DispatcherServlet 이후에 동작하므로, 요청에 대해 더 상세한 정보를 확인할 수 있음 (특히 다른 비즈니스 로직과 같이 GlobalExceptionHandler 활용이 가능하다는 점) -
Filter
에서sendError
를 호출하는 방식보다, Interceptor를 활용하여 공통된 응답 바디를 처리하는 것이 더 일관적일 수 있음. - 필터와 인터셉터 사이에 인증 관련 로직이 존재하는 경우, 반드시 필터에서 처리해야 하지만, 그렇지 않다면 인터셉터에서도 충분히 가능.
Filter | Interceptor | |
---|---|---|
동작 시점 | DispatcherServlet 실행 전 | DispatcherServlet 실행 후 |
동작 영역 | Servlet 레벨 (HttpServletRequest, HttpServletResponse) | Spring 레벨 (HandlerMethod 정보 접근 가능) |
주요 역할 | 인증, 인가, 보안, 로깅, 요청/응답 변조 | 컨트롤러 접근 전후 처리, 추가적인 로깅 및 비즈니스 로직 수행 가능 |
응답 처리 | sendError()로 차단 가능 | 응답 조작 용이, 예외 핸들링 가능 |
예외 처리 | 예외 발생 시 직접 응답 처리 | @ControllerAdvice와 연계 가능 |
-
Filter 유지가 적절한 경우
- 인증/인가 같은 보안 관련 로직이 포함되어 있는 경우.
- 요청을 가장 빠르게 차단해야 하는 경우 (불필요한 컨트롤러 접근 방지).
- DispatcherServlet까지 가기 전에 로직을 수행하는 것이 성능적으로 더 유리한 경우.
-
Interceptor로 변경이 유리한 경우
- 요청/응답 데이터를 조작할 필요가 있는 경우.
- 예외 처리를 통합해서 관리하고 싶은 경우.
- 필터와 인터셉터 사이에서 인증을 처리하는 별도의 로직이 존재하지 않는 경우.
- 백엔드 컨벤션
- TestContainer 적용 이유
- DB Read replica 구성 (AWS RDS)
- RDS 프라이빗 설정 후 로컬 터널링
- 공통 성공/에러 응답 정의
- 테스트 환경 통합 작업
- 소셜 로그인 설계(Spring Security 없이 OAuth2.0)
- 클라우드 환경변수 관리 AWS SSM Parameter Store
- 코드단 제안 사항 (카카오톡 내용 요약)
- Spring에서 JWT 인증/인가 위치 제안(Filter와 Interceptor)
- 알림 아키텍처 정리
- 외부 API Call 및 무거운 작업 Serverless Lambda 로 분리
- Redis GEO (유저 위치 저장 및 검색)
- 푸시알림 권한 받는 시점
- TestConfig 및 (이전) Fixture 활용 방법
- 테스트 코드 개선 제안: Mock과 Fixture 패턴
- 테스트 객체 자동 생성
- 푸시알림 설계
- Fixture 및 Factory 활용 방법
- 로그 모니터링 시스템 구축
- 성능테스트 케이스