Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sagehabitus/googlearch_bloc_remotemediator


https://github.com/sagehabitus/googlearch_bloc_remotemediator

android bloc clean-architecture flutter remotemediator riverpod sqlite

Last synced: 1 day ago
JSON representation

Awesome Lists containing this project

README

        

### πŸ“š GitHub μ‚¬μš©μž 검색 및 μ €μž₯μ†Œ 리슀트 μ•± (Flutter with Clean Architecture and BLoC)

λ³Έ ν”„λ‘œμ νŠΈλŠ” μ΅œμ‹  Flutter ν”„λ ˆμž„μ›Œν¬μ™€ **Google Architecture** νŒ¨ν„΄μ„ 기반으둜 개발된 **GitHub μ‚¬μš©μž 검색 및 μ €μž₯μ†Œ 리슀트** μ• ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€. **BLoC** 및 **Riverpod** μƒνƒœ 관리 νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€μ™€ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λΆ„λ¦¬ν•˜λ©°, 둜컬 데이터 캐싱, νŽ˜μ΄μ§• 처리, κ΄‘κ³  λ°°λ„ˆ ν‘œμ‹œ λ“± λ‹€μ–‘ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

---

### **μ£Όμš” κΈ°λŠ₯ ✨**

1. **GitHub μ‚¬μš©μž λͺ©λ‘ 검색 및 ν‘œμ‹œ 🌐**
- GitHub APIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹€μ‹œκ°„μœΌλ‘œ μ‚¬μš©μž 데이터λ₯Ό κ²€μƒ‰ν•˜κ³ , 아바타와 μ‚¬μš©μžλͺ…을 리슀트둜 λ³΄μ—¬μ€λ‹ˆλ‹€.
- μ‚¬μš©μž λ¦¬μŠ€νŠΈλŠ” **λ¬΄ν•œ 슀크둀**을 톡해 λ™μ μœΌλ‘œ λ‘œλ“œλ˜λ©°, GitHub API의 νŽ˜μ΄μ§€λ„€μ΄μ…˜μ„ ν™œμš©ν•˜μ—¬ μ„±λŠ₯ μ΅œμ ν™”λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.
- **κ΄‘κ³  λ°°λ„ˆ**λŠ” 10번째, 20번째, 30번째 ν•­λͺ©λ§ˆλ‹€ ν‘œμ‹œλ˜λ©°, 클릭 μ‹œ νŠΉμ • URL둜 μ΄λ™λ©λ‹ˆλ‹€.

2. **μ‚¬μš©μž μ €μž₯μ†Œ λͺ©λ‘ πŸ”**
- νŠΉμ • μ‚¬μš©μžμ˜ GitHub μ €μž₯μ†Œ λͺ©λ‘μ„ κ²€μƒ‰ν•˜μ—¬ 이름, μ„€λͺ…, 별 수, μ‚¬μš© μ–Έμ–΄ λ“±μ˜ 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

3. **νŽ˜μ΄μ§• 처리 πŸ”„**
- 원격 APIμ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜¬ λ•Œ, νŽ˜μ΄μ§€ λ‹¨μœ„λ‘œ 데이터λ₯Ό λ‘œλ“œν•˜λ©°, **λ¬΄ν•œ 슀크둀**을 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 둜컬 캐싱과 ν•¨κ»˜ μ‚¬μš©λ˜μ–΄ API 호좜 μ΅œμ ν™” 및 μ„±λŠ₯ ν–₯상을 λ‹¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

4. **둜컬 데이터 캐싱 🏠**
- **SQLite**λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž 정보와 κ΄‘κ³  데이터λ₯Ό λ‘œμ»¬μ— μΊμ‹±ν•©λ‹ˆλ‹€. λ„€νŠΈμ›Œν¬ 연결이 λŠκΈ°λ”λΌλ„, λ‘œμ»¬μ— μ €μž₯된 데이터λ₯Ό μ΄μš©ν•΄ μ‚¬μš©μž κ²½ν—˜μ„ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. **μƒνƒœ 관리 🧠**
- **BLoC** νŒ¨ν„΄κ³Ό **Riverpod**λ₯Ό μ‘°ν•©ν•˜μ—¬ λ³΅μž‘ν•œ μƒνƒœ 관리 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μž 이벀트 기반 데이터 흐름 관리와 μ „μ—­ μƒνƒœ 관리λ₯Ό λ™μ‹œμ— μ²˜λ¦¬ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

6. **ν…ŒμŠ€νŠΈ πŸ§ͺ**
- **JUnit**, **Mockito**λ₯Ό μ‚¬μš©ν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, 둜컬 및 원격 데이터 μ†ŒμŠ€μ— λŒ€ν•œ μœ λ‹› ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€. μ£Όμš” κΈ°λŠ₯에 λŒ€ν•œ ν…ŒμŠ€νŠΈλ₯Ό ν¬ν•¨ν•˜μ—¬ 높은 μ•ˆμ •μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€.

---

### **기술 μŠ€νƒ πŸ› οΈ**

- **μ–Έμ–΄**: Dart
- **ν”„λ ˆμž„μ›Œν¬**: Flutter
- **μƒνƒœ 관리**: Riverpod, BLoC
- **둜컬 λ°μ΄ν„°λ² μ΄μŠ€**: SQLite
- **λ„€νŠΈμ›Œν¬ 톡신**: Dio
- **ν…ŒμŠ€νŠΈ**: JUnit, Mockito

---

### **Google Architecture 적용 πŸš€**

이 ν”„λ‘œμ νŠΈλŠ” **Clean Architecture** νŒ¨ν„΄μ„ μ μš©ν•˜μ—¬ 각각의 μ±…μž„ μ˜μ—­μ„ λΆ„λ¦¬ν•˜κ³ , μœ μ§€λ³΄μˆ˜μ™€ ν™•μž₯성을 κ·ΉλŒ€ν™”ν–ˆμŠ΅λ‹ˆλ‹€.

- **Data Layer**:
- **GithubLocalDataSource**: SQLiteλ₯Ό 톡해 둜컬 데이터λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.
- **GithubRemoteDataSource**: GitHub APIμ—μ„œ 데이터λ₯Ό λΆˆλŸ¬μ˜΅λ‹ˆλ‹€.

- **Domain Layer**:
- **GithubRepositoryImpl**: 데이터λ₯Ό κ΄€λ¦¬ν•˜κ³  Presentation Layer에 μ œκ³΅ν•©λ‹ˆλ‹€. 원격 데이터 μ†ŒμŠ€μ™€ 둜컬 데이터 μ†ŒμŠ€ κ°„μ˜ 동기화λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

- **Presentation Layer**:
- BLoC νŒ¨ν„΄κ³Ό ν•¨κ»˜ μƒνƒœ 관리λ₯Ό μˆ˜ν–‰ν•˜λ©°, Flutter UIμ—μ„œ 데이터λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

---

### **ν”„λ‘œμ νŠΈ ꡬ쑰 πŸ—‚οΈ**

```
lib/
β”œβ”€β”€ data/
β”‚ β”œβ”€β”€ constants/
β”‚ β”œβ”€β”€ model/ # 데이터 λͺ¨λΈ μ •μ˜
β”‚ β”œβ”€β”€ repository/ # λ ˆν¬μ§€ν† λ¦¬ κ΅¬ν˜„
β”‚ β”œβ”€β”€ source/
β”‚ β”‚ β”œβ”€β”€ local/ # 둜컬 데이터 μ†ŒμŠ€ (SQLite)
β”‚ β”‚ └── remote/ # 원격 데이터 μ†ŒμŠ€ (GitHub API)
β”œβ”€β”€ presentation/
β”‚ β”œβ”€β”€ bloc/
β”‚ β”œβ”€β”€ screens/
β”‚ └── widgets/
└── main.dart # μ•± μ§„μž…μ 
```

---

### **μƒνƒœ 관리 νŒ¨ν„΄ 선택 이유 🎯**

1. **BLoC νŒ¨ν„΄**: 이벀트 기반 데이터 흐름과 μƒνƒœ 변경을 μ²˜λ¦¬ν•˜κΈ°μ— μ ν•©ν•œ νŒ¨ν„΄μœΌλ‘œ, μ‚¬μš©μž μ΄λ²€νŠΈμ— λ”°λ₯Έ λͺ…ν™•ν•œ μƒνƒœ 변경을 보μž₯ν•©λ‹ˆλ‹€.

2. **Riverpod**: μ „μ—­ μƒνƒœ κ΄€λ¦¬μ˜ νŽΈλ¦¬ν•¨μ„ μ œκ³΅ν•˜μ—¬ λ³΅μž‘ν•œ μƒνƒœ 관리 문제λ₯Ό κ°„λ‹¨ν•˜κ²Œ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

---

### **Mediator νŒ¨ν„΄ 및 νŽ˜μ΄μ§• 처리 κ°•μ‘° πŸ”„**

이 ν”„λ‘œμ νŠΈλŠ” **Paging Mediator νŒ¨ν„΄**을 μ μš©ν•˜μ—¬ λŒ€λŸ‰μ˜ 데이터λ₯Ό 효율적으둜 κ΄€λ¦¬ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 원격 API와 둜컬 데이터 μ†ŒμŠ€ κ°„μ˜ 동기화λ₯Ό μœ μ§€ν•˜κ³ , λ„€νŠΈμ›Œν¬ μž₯μ•  μ‹œμ—λ„ μ‚¬μš©μžκ°€ 앱을 μ›ν™œν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. νŽ˜μ΄μ§• μ²˜λ¦¬μ™€ ν•¨κ»˜ 데이터λ₯Ό μΊμ‹±ν•˜μ—¬ μ„±λŠ₯을 μ΅œμ ν™”ν•˜κ³ , μ‚¬μš©μž κ²½ν—˜μ„ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€.

---

### **ν…ŒμŠ€νŠΈ μ „λž΅ πŸ§ͺ**

- **JUnit**κ³Ό **Mockito**λ₯Ό μ‚¬μš©ν•˜μ—¬ μœ λ‹› ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.
- 둜컬 및 원격 데이터 μ†ŒμŠ€, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 ν…ŒμŠ€νŠΈλ₯Ό 톡해 μ•±μ˜ μ•ˆμ •μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€.