Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- builderPattern
- android designsystem
- 디자인패턴
- 안드로이드 디자인시스템
- Singleton
- PrototypePattern
- 옵저버 패턴
- 프로토타입 패턴
- 함수형프로그래밍
- Design Pattern
- Functional Programming
- 빌터패턴
- ㅋㅁ
- 디자인패턴 #
- designPattern
- El
- 추상팩토리패턴
- 추상 팩토리
- F
- ㅓ
- r
- compose
- 팩토리 메소드
- 코틀린
- factory method
- Observer Pattern
- material3
- 싱글톤
- Abstract Factory
- Kotlin
Archives
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Now In Android를 분석하자 (Core 모듈의 구조3) 본문
core:data
비유: "데이터 계층의 총괄 지휘자" 또는 "앱의 최고 데이터 책임자(Chief Data Officer)"
역할: 이 모듈은 앱의 데이터에 관한 모든 정책을 결정하고 실행하는 심장부입니다.
'단일 진실 공급원(Single Source of Truth, SSOT)' 원칙을 구현하는 책임을 지며, 상위 계층(도메인, 기능)에 깨끗하고 일관된 데이터 API(Repository)를 제공합니다.
어떻게 지휘하는가?
- 데이터 동기화: core:network(레벨 1)를 호출하여 서버로부터 최신 데이터를 가져옵니다.
- 데이터 캐싱: core:network에서 받아온 데이터를 core:database(레벨 1)를 사용하여 로컬 DB에 저장(Upsert)합니다.
- 데이터 제공: 상위 계층에서 데이터를 요청하면, 네트워크가 아닌 **로컬 DB(core:database)**에서 데이터를 읽어 제공합니다. 이를 통해 오프라인 지원과 일관성을 보장합니다.
- 데이터 필터링: core:datastore(레벨 1)에서 사용자 설정(예: 팔로우한 주제)을 읽어와, DB에서 데이터를 조회할 때 필터링 조건을 적용합니다.
주요 내용물
- TopicsRepository.kt, NewsRepository.kt: 데이터 접근을 위한 인터페이스(계약서).
- DefaultTopicsRepository.kt, DefaultNewsRepository.kt: 위 인터페이스의 구현체. 모든 지휘 로직이 여기에 담겨 있습니다.
주요 의존성
- core:network (레벨 1): 원격 데이터 소스로 사용.
- core:database (레벨 1): 로컬 데이터 소스(SSOT)로 사용.
- core:datastore (레벨 1): 사용자 데이터 참조용.
- core:model (레벨 0): 데이터 구조를 알기 위해.
- core:common (레벨 0): Coroutine Dispatcher 등을 사용.
- core:analytics (레벨 0): 데이터 동기화 상태를 로깅하기 위해.
core:sync
비유: "성실한 백그라운드 작업자" 또는 "야간 순찰대"
역할: WorkManager를 사용하여, 앱이 실행 중이지 않을 때에도 주기적으로 백그라운드에서 데이터를 동기화하는 작업을 책임집니다.
어떻게 동작하는가?
- 안드로이드 OS에 의해 WorkManager가 SyncWorker를 실행시킵니다.
- SyncWorker는 core:data 모듈이 제공하는 SyncManager 또는 Repository의 sync() 메서드를 호출합니다. (중요: sync 모듈은 데이터 동기화 '방법'을 직접 구현하지 않고, core:data에게 '위임'합니다.)
- core:data로부터 동기화가 성공적으로 완료되었다는 신호를 받으면,
- core:notifications(레벨 1)를 호출하여 사용자에게 "새로운 소식이 업데이트되었습니다"와 같은 알림을 보낼 수 있습니다.
주요 내용물
- SyncWorker.kt: WorkManager가 실행하는 실제 작업 로직.
- SyncManager.kt: 동기화 작업을 초기화하고 관리하는 인터페이스 및 구현체.
주요 의존성
- core:data (레벨 2): 실제 동기화 로직을 수행하도록 위임하기 위해.
- core:notifications (레벨 1): 동기화 완료 후 알림을 보내기 위해.
- core:datastore (레벨 1): 동기화 관련 설정을 읽기 위해.
- core:common (레벨 0)
레벨 2 모듈의 중요성
- 복잡성 캡슐화: 상위 계층(도메인, 기능)은 데이터가 네트워크와 DB 사이에서 어떻게 오고 가는지 전혀 알 필요가 없습니다. core:data가 이 모든 복잡성을 숨겨주기 때문입니다.
- 중앙 집중화된 정책: 데이터 캐싱 전략(예: 1시간마다 동기화)이나 오프라인 처리 정책이 변경되면, 오직 core:data 모듈만 수정하면 됩니다. 앱의 다른 부분은 영향을 받지 않습니다.
- 역할의 명확한 분리: core:data는 **'데이터 정책'**을, sync는 **'백그라운드 실행 정책'**을 담당하며 역할이 명확하게 나뉩니다.