우리 프로젝트의 모든 API 요청은 최종적으로 serverFetch라는 하나의 함수를 거치도록 설계되어 있다. 이 함수에서 액세스 토큰을 헤더에 담아 요청을 보내고, 서버 응답에 따른 처리를 수행한다.
토큰 인증 방식은 다음과 같다.
accessToken 만료 시간: 15분refreshToken 만료 시간: 7일401 Unauthorized를 반환한다serverFetch는 401을 감지하면 refreshToken()을 호출해 새 액세스 토큰을 발급받고, 원래 요청을 재시도한다accessToken과 refreshToken을 발급받으며, 기존 리프레시 토큰은 즉시 무효화된다Race Condition 이란 ?
공유 자원에 여러 요청이 동시에 접근해 예측 불가능한 결과를 만들어내는 문제. 우리 프로젝트에서는 토큰 갱신 과정에서 이 현상이 발생했다.
Access Token이 만료된 상황에서 4개의 요청을 동시에 보내면, 각 요청마다 401 에러를 받게 된다. 이 때 토큰 재발급 요청도 4번 발생하게 되어 불필요한 낭비가 생긴다.

더 심각한 문제는 Refresh Token Rotation(RTR) 정책이 적용된 우리 프로젝트의 특성상, Access Token 만료 시점에 여러 요청이 동시에 갱신을 시도할 경우, 가장 먼저 도달한 요청만 성공하고 나머지 요청은 이미 무효화된 토큰을 사용하게 되어 연쇄적인 인증 실패를 초래한다.