배경
현재 JWT 인증 경로에서 access token 검증과 Spring Security authentication 저장 과정이 각각 User를 조회합니다.
JwtTokenProvider.isAccessTokenValid(...)에서 token signature/claim 검증 후 User를 조회하고, 저장된 access token과 비교합니다.
- 이후
JwtAuthenticationFilter.checkAccessTokenAndAuthentication(...)에서 access token에서 userId를 다시 추출하고 User를 다시 조회해 authentication을 저장합니다.
이 구조는 인증된 API 요청마다 DB 조회가 중복되어, 트래픽 증가 시 요청 latency와 DB 부하에 직접 영향을 줄 수 있습니다.
측정 지표
- 인증 요청 1건당 DB query 수
- 인증 요청 p50/p95 latency
JwtAuthenticationFilter 처리 시간
- 동일 access token 요청 반복 시 DB read QPS
개선 방향
- access token 검증과 authentication 저장에서
User 조회를 한 번만 수행하도록 인증 흐름을 정리한다.
- Active Session 검증 책임을 한 module/seam에 모은다.
JwtTokenProvider가 HTTP/Spring Security authentication 저장까지 알지 않도록 역할을 줄인다.
- 컨트롤러에서
HttpServletRequest를 통해 userId를 재파싱하는 흐름을 점진적으로 줄일 수 있는지 검토한다.
- 기존 단일 Active Session 정책은 유지한다.
완료 조건
참고 코드
ontime-back/src/main/java/devkor/ontime_back/global/jwt/JwtAuthenticationFilter.java
ontime-back/src/main/java/devkor/ontime_back/global/jwt/JwtTokenProvider.java
ontime-back/src/main/java/devkor/ontime_back/service/AuthTokenService.java
배경
현재 JWT 인증 경로에서 access token 검증과 Spring Security authentication 저장 과정이 각각
User를 조회합니다.JwtTokenProvider.isAccessTokenValid(...)에서 token signature/claim 검증 후User를 조회하고, 저장된 access token과 비교합니다.JwtAuthenticationFilter.checkAccessTokenAndAuthentication(...)에서 access token에서 userId를 다시 추출하고User를 다시 조회해 authentication을 저장합니다.이 구조는 인증된 API 요청마다 DB 조회가 중복되어, 트래픽 증가 시 요청 latency와 DB 부하에 직접 영향을 줄 수 있습니다.
측정 지표
JwtAuthenticationFilter처리 시간개선 방향
User조회를 한 번만 수행하도록 인증 흐름을 정리한다.JwtTokenProvider가 HTTP/Spring Security authentication 저장까지 알지 않도록 역할을 줄인다.HttpServletRequest를 통해 userId를 재파싱하는 흐름을 점진적으로 줄일 수 있는지 검토한다.완료 조건
User조회가 2회에서 1회로 줄었음을 테스트 또는 계측으로 확인한다../gradlew check가 통과한다.참고 코드
ontime-back/src/main/java/devkor/ontime_back/global/jwt/JwtAuthenticationFilter.javaontime-back/src/main/java/devkor/ontime_back/global/jwt/JwtTokenProvider.javaontime-back/src/main/java/devkor/ontime_back/service/AuthTokenService.java