
백엔드
단지 권한 기능을 추가해달라고 했을 뿐인데(feat. 인증 기능 개선)
두줄요약
권한 기능 추가를 계기로 JWT 인증 방식을 개선하고 Refresh Token Rotation과 하위 호환 인증을 도입했습니다. 또한 Spring Security 권한 체크를 유연하게 바꾸며 기술 부채도 함께 정리했습니다.
문제 상황
- 매장 앱에 권한관리 기능을 추가하려 했지만 기존 JWT 인증은 상태를 저장하지 않아 권한 변경을 즉시 반영하기 어려운 구조
- Access Token만으로는 탈취 시 위험이 크고, 짧은 만료시간은 잦은 재로그인을 유발
- 모바일 환경의 네트워크 이슈와 앱 배포 지연까지 고려한 하위 호환성 문제도 존재
해결 방법
- Refresh Token 도입과 Rotation 적용으로 Access Token 재발급과 Refresh Token 탈취 위험을 함께 관리
- 네트워크 이슈 대응을 위해 Token Family 방식으로 과거 Refresh Token 재사용 허용
- 구버전과 신버전 JWT를 함께 수용하도록 TokenManager와 하위 호환 인증 로직 구성
선택 이유
- @Secured 대신 @PreAuthorize와 SpEL을 사용해 역할 나열을 줄이고 권한 변경에 유연하게 대응
- JJWT는 버전 업그레이드와 패키지 충돌을 고려해 JitPack 기반 fork 저장소로 분리
- 일시적인 하위 호환이 필요한 구간은 Composite 패턴보다 TokenManager로 응집도 확보
