Access Token(하나의 Jwt Token이라 생각하면 된다.)이 만약에 제 3자에게 탈취를 당했다고 가정해보자. Access Token은 Http Stateless 특성을 지키기 위해 사용하는 방식임으로, 서버에서의 해당 토큰에 대한 정보가 없다. 즉, 탈취를 당해도 만료기간 동안 유저에 대한 정보가 없기 때문에 제 3자가 해당 유저인지 확인하는 방법이 없다. 이러한 방법을 해결하기 위해 Refresh Token이 필요하다.
Refresh Token은 Access Token과 같은 하나의 토큰이지만 기능의 차이가 있다. Access Token은 접근에 관여하는 토큰이고, Refresh Token은 Access Token의 재발급에 관여하는 토큰이다.
위의 상황을 막기 위해 Access Token의 만료기간을 짧게 만들고, Refresh Token을 통해 재발급을 하게 만든다.
처음으로 로그인과 같은 인증 이후, Access Token과 Refresh Token을 클라이언트에 동시에 발급한다. 발급한 토큰들을 클라이언트는 로컬 스토리지나 쿠키 방식으로 저장하고, 서버는 DB에 Refresh Token만 저장한다. 이 후 클라이언트는 요청을 할 때, 헤더에 이 둘을 담아 보낸다.
Access Token의 만료기간이 끝났을 경우, 같이 전달한 Refresh Token과 서버의 Refresh Token을 비교해 일치하면, 재발급을 해준다.
Refresh Token은 이러한 역할을 하기 때문에 만료기간을 길게 준다.
로그아웃 시, 서버의 Refresh Token을 삭제하고, 다시 로그인 시 재발급 한다.

9~11 과정은 상황에 따라 선택한다. 프론트엔드에서 Access Token의 Payload를 통해 유효기간을 알 수 있기 때문에 프론트 엔드 쪽에서 API 요청 전에 토큰이 만료됐다면 곧바로 재발급 요청을 할 수도 있다.