앞에 포스팅에서는 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는 다음과 같은 방식으로 동작한다고 되어있습니다.

간단히 말하면 다음과 같은 방식으로 동작합니다.
- 이용자와의 상호 작용으로 인해 데이터 갱신 or 수정 이벤트 발생
- Repository에서 해당 이벤트를 받아서 적절한 처리 실시
- User preferene(Proto DataStore)
- Room
- Remote
- 원격으로 데이터를 받아오거나 하는 경우에는 Local 저장소에 저장
- UI Layer에서 해당 데이터를 Stream으로 받고 있는 상태라서 값이 저장되면 바로 UI에 표시한다.
- 즉, 많이 사용되는 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를 넣어서 데이터를 검색하여 가져올 수 있다.
- Room을 사용하여 데이터를 관리
- 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에서 데이터 동기화는 다음과 같은 과정으로 이루어집니다.
- WorkManager(SyncWorker)를 사용해서 (비동기)작업 시작
- DataSource에서 데이터 가져오기 - stream 형태로 가져온다.
- Remote API를 사용하여 데이터 가져오기
- 3번에서 가져온 데이터를 DataSource에 다시 저장하기
- stream 형태로 subscribe 하고 있기 때문에 저장되면 자동으로 다시 UI에 출력하기
위 과정에서 에러가 발생하면 다음과 같이 동작합니다.
WorkManager를 통해 데이터를 Sync하기 때문에 에러 발생 시에도 WorkManager를 통해 재실시를 하게 된다.
SyncWorker.doWork 부분에서 해당 내용을 찾을 수 있으며
topicRepository, newsRepository 둘 다 작업이 끝나야만 처리가 완료된 것으로 간주한다.
위와 같이 Now in Android의 Data Layer에 대한 동작을 알아봤습니다.
다음 포스팅에서는 Now in Android 프로젝트가 어떤 구조로 되어있는지 살펴보겠습니다.
'안드로이드(kotlin)' 카테고리의 다른 글
mockK에서 mockStatic과 mockObject 차이 (0) | 2025.03.09 |
---|---|
안드로이드에서 API 데이터를 mock 데이터로 받기 - node.js (0) | 2025.03.04 |
Now in Android 샘플 분석하기 -1 (0) | 2025.02.25 |
안드로이드 XML로 된 프로젝트를 Compose로 변환하기 (6) | 2024.10.21 |
안드로이드 특정 Cookie 값을 얻고 setCookie로 삭제하는 방법 (0) | 2024.10.10 |
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
댓글