앱 처음 화면에서 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을 다시 받아오게 한 후, 원래의 요청을 다시 보낸다.

DataStore Preference

DataStore Preferenc란

Preferences DataStore 및 Proto DataStore

⇒ Token을 저장하기 위해서는 Preference DataStore가 조금 더 적합

DataStore Preference vs SharedPreference

공식문서에서는 SharedPreference 대신 DataStore Preference를 사용하기를 권장하고 있다. 그 이유가 뭘까

  1. SharedPreference는 비동기 처리를 지원해주지 않는다.

    DataStore는 코루틴, Flow, Rx를 통해 비동기 처리가 가능하다!

  2. SharedPreference는 strong consistency가 보장되는 api가 없어 다중 스레드 환경에서 다른 결과값이 생길 수 있다.

    DataStore는 strong consistency가 보장된다.

  3. SharedPreference는 Type safety가 보장되지 않는다.

  4. DataStore는 Runtime exception에서 안전하다.