무한 리프레시 현상
2025년 6월 26일
위리브 프로젝트 - 무한 리프레시 현상
위리브 프로젝트를 진행하면서 JWT 인증 로직을 구현하던 중
무한 리프레시 현상을 경험
- 문제 상황
- 사용자가 보호된 페이지에 접근
- 엑세스 토큰 만료로 인해 요청이 401 Unauthorized 발생
- 인터셉터에서 리프레시 토큰으로 새로운 액세스 토큰을 요청
- 이 리프레시 요청 조차 401 응답으로 받음 (문제 발생)
- 인터셉터는 다시 리프레시 요청 시도 → 또 401 (무한 반복)
- 원인
- 리프레시 요청에도 인증이 필요하도록 잘못 구성
- 인터셉터 안에서 또 리프레시 요청을 보내게 되는 무한 루프가 시작
- 해결 방법
- 리프레시 요청에는 인증 헤더를 제거
axios.post('/auth/refresh', {}, { headers: { Authorization: '', }, });
- 혹은 별도의 Axios 인스턴스를 만들어 리프레시 요청만 분리
const refreshAxios = axios.create(); refreshAxios.post('/auth/refresh');
- 혹은 별도의 Axios 인스턴스를 만들어 리프레시 요청만 분리
- 리프레시 실패 시 루프를 막는 로직 추가
if (error.config.url.includes('/auth/refresh')) { // 리프레시 자체가 실패했다면 로그인 페이지로 보내기 logout(); router.push('/login'); return Promise.reject(error); }
- 리프레시 요청에는 인증 헤더를 제거
처음에 해당 이슈를 겪었을때 멘붕이 말이 아니였음.
페이지는 계속 새로고침되고 서버는 요청을 미친듯이 보내고…
인터셉터 설계는 신중하게 !