앱 처음 화면에서 Login시 AccessToken과 Refresh Token을 서버에서 받아옴
⇒ 1. Access Token과 Refresh Token을 DataStore에 저장한다.
⇒ 2. 모든 요청에 Access Token을 Header에 Authorization: Bearer ${access_token}
형식으로 달아준다.
⇒ 3. 모든 요청을 보낼 때, 401 응답이 오면
⇒ 3.1 message가 "Refresh token expired. Please log in again.” 라면 Refresh Token이 만료된 것 ⇒ 로그인 화면으로 돌아간다.
⇒ 3.2 그게 아니라면 Access Token이 만료된 것 ⇒ Refresh Token을 이용해 Access Token을 다시 받아오게 한 후, 원래의 요청을 다시 보낸다.
Preferences DataStore
Proto DataStore
⇒ Token을 저장하기 위해서는 Preference DataStore가 조금 더 적합
공식문서에서는 SharedPreference 대신 DataStore Preference를 사용하기를 권장하고 있다. 그 이유가 뭘까
SharedPreference는 비동기 처리를 지원해주지 않는다.
DataStore는 코루틴, Flow, Rx를 통해 비동기 처리가 가능하다!
SharedPreference는 strong consistency가 보장되는 api가 없어 다중 스레드 환경에서 다른 결과값이 생길 수 있다.
DataStore는 strong consistency가 보장된다.
SharedPreference는 Type safety가 보장되지 않는다.
DataStore는 Runtime exception에서 안전하다.