| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- Android ProgressBar
- 안드로이드
- 안드로이드 카카오 로그인
- Android Navigation
- Android WebView
- Kotlin
- 알고리즘 자바
- 프로그래머스 알고리즘
- 영어독립365
- android recyclerview
- Android ViewPager2
- Kotlin FCM
- 66챌린지
- Android 12
- 코틀린 코루틴
- OkHttp Interceptor
- Android 12 대응
- Android
- WebView
- scope function
- coroutine
- 안드로이드 갤러리 접근
- 영어공부
- 카카오 알고리즘
- Android Jetpack
- Android Interceptor
- DataBinding
- Java
- 습관만들기
- MVP Architecture
Archives
- Today
- Total
나미래 Android 개발자
[Android NIA] Now In Android 아키텍쳐 학습 - 아키텍쳐 개요 본문
안드로이드/Now In Android
[Android NIA] Now In Android 아키텍쳐 학습 - 아키텍쳐 개요
Moimeme Futur 2025. 11. 18. 23:39아키텍쳐 개요
NIA 앱의 아키텍쳐는 3가지 레이어(data layer, domain layer, UI layer)를 갖는다.

참고
공식적인 안드로이드 아키텍쳐는 "Clean Architecture"와 같은 다른 아키텍쳐들과 다르다.
다른 아키텍쳐에 대한 개념이 적용되지 않을 수 있고, 다른 방법으로 적용되기도 한다.
ref). 관련 논의 내용
NIA 아키텍쳐는 UDF(Unidirectional Data Flow) 반응형 프로그래밍 모델을 따른다.
data layer가 가장 아래에 위치하며, 핵심 개념은 다음과 같다.
- 상위 레이어는 하위 레이어의 변화에 반응한다.
- 이벤트(Event)는 상위 -> 하위 레이어로 내려간다.
- 데이터(Data)는 하위 -> 상위 레이어로 올라간다.
이러한 데이터 흐름은 Kotlin Flows 기반의 스트림 구조로 구현된다.
Example: Displaying news on the For You screen
NIA 앱이 처음 실행되면 원격 서버에서 뉴스 정보 목록을 읽어온다. 데이터가 로드되면, 유저가 선택한 관심사를 기반으로 뉴스가 노출된다.
아래 다이어그램은 이벤트와 데이터가 어떻게 발생하고 흐르는지 보여준다.

아래는 다이어그램에서의 각 동작 순서에 대해 구체적으로 이루어지는 동작을 설명한 표다.
| Step | Description |
|---|---|
| 1 | 앱이 실행되면, WorkManager를 통해 모든 Repository의 Sync 작업이 예약되어 백그라운드에서 실행되도록 한다. |
| 2 | ForeYouViewModel은 사용자 정보와 뉴스 데이터를 모두 받아서 하나의 스트림으로 결합한다. 두 데이터가 모두 준비되기 전까지는 스트림에서 어떤 항목도 방출되지 앟기 때문에, ViewModel은 이 준비 과정 동안 화면 상태를 Loading으로 유지한다. |
| 3 | UserDataRepository는 Proto DataStore에 저장된 사용자 데이터를 Flow 형태로 지속적으로 감시하며, 변경될 때마다 최신 UserData를 스트림으로 ViewModel 등에 전달한다. |
| 4 | WorkManager가 실행되면, OfflineFirstNewsReposity를 호출해 원격 서버와 로컬 DB를 동기화하는 과정이 시작된다. |
| 5 | OfflineFirstNewsRepository는 필요할 때, RetrofitNiaNetwork를 호출해 Retrofit 기반의 실제 API 요청을 보낸다. |
| 6 | RetrofitNiaNetwork가 원격 서버의 REST API를 호출한다. |
| 7 | RetrofitNiaNetwork는 원격 서버로부터 네트워크 응답을 받아온다. |
| 8 | OfflineFirstNewsRepositoy는 원격에서 가져온 데이터를 로컬 Room 데이터베이스의 NewsResourceDao와 동기화하며, 이 과정에서 데이터를 삽입·업데이트·삭제한다. |
| 9 | NewsResourceDao의 데이터가 변경되면, 그 변경 사항이 Flow로 구성된 뉴스 리소스 데이터 스트림에 즉시 반영되어 emit된다. |
| 10 | OfflineFirstNewsRepository는 이 스트림 중간 연산자 역할을 하며, data layer 내부에서 사용되는 DB 모델인 PopulatedNewsResource를 상위 레이어에서 사용하는 public한 모델 NewsResource로 변환한다. |
| 11 | GetUserNewsResourcesUseCase는 뉴스 리소스 목록과 사용자 데이터를 결합해 UserNewsResource 리스트를 방출한다. |
| 12 | ForYouViewModel이 저장 가능한 뉴스 리소스를 받으면 피드 상태를 Success로 업데이트한다. 그 뒤 ForYouScreen은 이 상태 안에 있는 뉴스 리소스를 사용해 화면을 그린다. |
'안드로이드 > Now In Android' 카테고리의 다른 글
| [Now In Android] 왜 Application에서 ImageLoaderFactory를 구현할까? (0) | 2025.11.22 |
|---|
Comments
