본문 바로가기
안드로이드(kotlin)

Now in Android 샘플 분석하기 -2

by 기계공학 주인장 2025. 3. 9.
반응형

앞에 포스팅에서는 Now in Android의 아키텍처를 분석했습니다.

 

https://android-developer.tistory.com/113

 

Now in Android 샘플 분석하기 -1

구글 안드로이드이에서는 이상적인 아키텍쳐와 앱 제작 가이드를 위해 몇 개의 샘플 프로젝트를 공개하고 있습니다. 그 중에 하나가 바로Now in Android입니다. https://github.com/android/nowinandroid GitHu

android-developer.tistory.com

 

이번 포스팅에서는 Now in Android의 각 종 Layer가 어떻게 되어있는지 살펴보겠습니다.


Now in Android의 Data Layer

Now in Android의 설명서에서 Data Layer는 다음과 같은 방식으로 동작한다고 되어있습니다.

 

now in android에서 Data Layer가 동작하는 방식

 

간단히 말하면 다음과 같은 방식으로 동작합니다.

 

  1. 이용자와의 상호 작용으로 인해 데이터 갱신 or 수정 이벤트 발생
  2. Repository에서 해당 이벤트를 받아서 적절한 처리 실시
    1. User preferene(Proto DataStore)
    2. Room
    3. Remote
      1. 원격으로 데이터를 받아오거나 하는 경우에는 Local 저장소에 저장
  3. UI Layer에서 해당 데이터를 Stream으로 받고 있는 상태라서 값이 저장되면 바로 UI에 표시한다.
    1. 즉, 많이 사용되는 getxxxModel() 같은 방식이 아니라 Subscribe 같은 형태로 변화를 감지해서 표시하는 방식을 사용한다.

각각의 Repository의 특징

 

Now in Android에서 각각의 Repository는 다음과 같은 특징을 갖고 있습니다.

 

  • 각 Repository에 대응되는 Model을 하나 이상 가지고 있다.
  • 하나의 Repository는 작은 Repository 몇개로 나뉘어져서 구성되어져 있다.
    • 나뉘어진 Repository는 서로 종속되어 있으며 이는 core-data 모듈의 di 폴더를 보면 알 수 있다.
  • 출력 직전에 데이터만 특정 Repository에 정리해서 최종적으로 ViewModel에서 사용된다.
    • 예: CompositeUserNewsResourceRepository

DataSource의 특징

OfflineFirst{xxxx}Repository를 기준으로 보면 다음과 같은 3개의 DataSource에 의존하고 있다는 것을 알 수 있습니다.

 

  • Dao
    • Room을 사용하여 데이터를 관리
      • SQLite를 사용하며 query를 넣어서 데이터를 검색하여 가져올 수 있다.
  • NetworkDataSource
    • Remote API를 통해 데이터를 가져온다
  • DataSource
    • Proto DataStore를 사용해서 Local에 있는 데이터를 가져온다.

데이터 동기화

이전 포스팅에서 데이터 동기화에 대해 조금 언급한바 있습니다.

 

https://android-developer.tistory.com/113

 

Now in Android 샘플 분석하기 -1

구글 안드로이드이에서는 이상적인 아키텍쳐와 앱 제작 가이드를 위해 몇 개의 샘플 프로젝트를 공개하고 있습니다. 그 중에 하나가 바로Now in Android입니다. https://github.com/android/nowinandroid GitHu

android-developer.tistory.com

 

 

다시 한 번 설명하자면

 

now in android에서 데이터 동기화는 다음과 같은 과정으로 이루어집니다.

 

  1. WorkManager(SyncWorker)를 사용해서 (비동기)작업 시작
  2. DataSource에서 데이터 가져오기 - stream 형태로 가져온다.
  3. Remote API를 사용하여 데이터 가져오기
  4. 3번에서 가져온 데이터를 DataSource에 다시 저장하기
  5. stream 형태로 subscribe 하고 있기 때문에 저장되면 자동으로 다시 UI에 출력하기

위 과정에서 에러가 발생하면 다음과 같이 동작합니다.

 

WorkManager를 통해 데이터를 Sync하기 때문에 에러 발생 시에도 WorkManager를 통해 재실시를 하게 된다.

 

SyncWorker.doWork 부분에서 해당 내용을 찾을 수 있으며

 

topicRepository, newsRepository 둘 다 작업이 끝나야만 처리가 완료된 것으로 간주한다.


 

위와 같이 Now in Android의 Data Layer에 대한 동작을 알아봤습니다.

 

다음 포스팅에서는 Now in Android 프로젝트가 어떤 구조로 되어있는지 살펴보겠습니다.

반응형


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


댓글