엑세스 토큰을 이용한 세션유지 플로우 변경
기존 서비스는 아래와 같이 엑세스 토큰을 이용한 플로우가 진행되었다.
- 엑세스 토큰을 발급한다.
- 해당 토큰이 만료되면, 서버에서 특정응답을 보낸다.
- 특정응답을 받은 클라이언트는 서버의 토큰 재발급 api로 요청을 보낸다.
- 서버는 새로운 토큰을 클라이언트에게 발급해주고, 클라이언트는 새로받은 토큰을 첨부하여, 같은 요청을 서버에 전송한다.
이 방법은 아래와 같은 상황을 야기했다.
- 클라이언트가 서버의 특정응답을 인지하기 어렵다.
- 다시금 요청을 보내 발급을 받고, 또 다시 서버로 동일 요청을 보내는 일은 클라이언트에게 이전에 요청을 보낸 페이로드와 엔드포인트를 다시 알아와야하는 번거로움을 야기시킨다.
- 클라이언트 - 서버간 연결이 원활하지 않을경우 여러번 티키타카하는 것에 문제가 발생할 수 있다.
최종적으로 문제로 대두되었던 것은, 팀원들이 클라이언트와의 소통에 익숙하지 않으셨기때문에, 연결에 굉장한 애를 먹고 계셨고, 나또한 재발급을 위한 api를 따로 마련해두지 않았기 떄문에, 팀원들은 로그인이 풀릴때마다 다시 로그인을 해야하는 번거로움을 호소하셨다.
따라서, 이 과정을 단순화하기 위해 아래전략을 세웠다.
- 엑세스토큰을 발급한다.
- 토큰이 만료되면, 서버내부에서 새로운토큰을 발급받아 해당 토큰으로 일단 로직을 통과시킨다.
- 응답값과 함께 헤더에 새로 발급한 토큰을 실어 보내준다.
- 클라이언트는 헤더에 새로운 토큰이 있다면, 자신의 로컬저장소의 엑세스토큰을 재갱신한다.
이렇게 되니 세션이 끊기지도 않고, 서버에 로직이 조금 추가되었을 뿐, 좀 더 플로우가 심플해졌다.
극단적으로 엑세스토큰의 만료 시간을 1초로 뒀는데, 끊임없이 갱신되며 세션이 유지되었다.
의미있는 개선이었다. 하지만, 아직 리프레시토큰이 만료되었을 경우에 대한 대처가 미흡하고, TTL적용이 되어있지 않아서 더 개선이 필요하다. 다음주 유지보수 때 좀 개선해보아야겠다.