## 💡 Issue - 데이터 레이어가 다른 레이어를 참조하지 않도록 변경해 개선합니다 ### AS - IS `TokenAuthenticator` - 액세스 토큰 만료 시, 리프레시 토큰을 통해 재발급 받아야 함 - 이때 getRefreshToken - 성공시 - 발급된 액세스, 리프레시 prefrenceManager에 저장 - 실패시 (리프레시도 만료라는 것 → 자동로그인 풀리고 로그인으로 넘어가야 함) - 이때, data 레이어의 authenticator에 로그인액티비티. 즉 **presentation 레이어를 참조**하고있음 ### TO - BE `AuthInterceptor` - 인터셉터, prefrenceManager 로 토큰 관리 로직 또한 한번에 해결 - 리프레시 또한 만료이면 preference의 AccessToken 값에 빈 문자열 저장 - 로그인 시 AccessToken이 빈 값이면 토스트 띄우고 재로그인 시키도록 해 data 레이어의 presentation 참조 제거 ## 📝 todo <!-- 상세한 작업으로 구분하여 나누어주세요. --> - [x] Authenticator가 refresh Token 만료시 presentation 레이어를 참조하는 코드를 제거 - [x] AuthInterceptor에서 다음과 같은 것들을 관리 할 수 있도록 - [x] 헤더 부착 - [x] 액세스 토큰, 리프레시 토큰 관리 - [x] 액세스 토큰 만료 시 처리 - [x] 리프레시 토큰 만료 시 처리 - [x] presentation 레이어에서 만료 시 화면 이동을 수행할 수 있도록 구현 - [x] 토큰 만료 - [x] 탈퇴, 로그아웃, 방문자 모드까지 기존 플로우대로 정상적인지 확인
Activity
[FEAT] #339 Interceptor에서 액세스, 리프레시 토큰 관리 작업 구현
[FEAT] #339 액세스 토큰 재발급 성공시, preference에 해당 값 저장
[FEAT] #339 리프레시 토큰 또한 만료 / 통신 실패 시 빈 값 preference에 저장
[CHORE] #339 주석 추가 및 코드 정리
[DEL] #339 Authenticator 제거
[MOD] #339 레트로핏 모듈에 Interceptor 반영
[FEAT] #339 accessToken 빈 문자열이면 토스트메시지와 함께 재로그인 요청
[REFACTOR] #339 non null 단언 연산자 제거
[REFACTOR] #339 named argument 적용
[REFACTOR] #339 interceptor return if로 response처리
[REFACTOR] #339 리뷰 간단사항 반영
[ADD] #339 LoginStatus Enum Class 만들어 적용해 토큰 값 따른 로그인 상태 관리
[REFACTOR] #339 토큰preferenceManager AuthUtil로 빼서 관리
[MOD] #339 applicationContext 주입
[MOD] #339 runBlocking제거
[REFACTOR] #339 applicationContext -> context로 변경하고, null 안전하게 체크
[MERGE] #339 충돌 해결