📌 Part4: Design Patterns and Architecture
4️⃣ Network
- 자체 네트워크 솔루션을 구축하려면 connection pooling, 응답 캐싱, HTTP(Hypertext Transfer Protocol)과 같은 저수준 기능, 예를들어 인터셉터 및 비동기 호출 지원 등을 직접 구현해야하는 방대한 리소스가 요구됨.
- 7~8년 전 Android 개발자들은 HttpURLConnection 또는 Apache의 HttpClient를 사용하여 HTTP 요청을 수행했으나, 이러한 라이브러리에는 많은 보일러 플레이트 코드가 필요하고 연결 기능, 보안 지원 및 DNS(Domain Name System) 해결책들이 Android 플랫폼과의 호환성을 지원하지 않았음.
🔴 OkHttp
- 내부적으로 Okio로 빌드된 JVM 및 Android용 HTTP 클라이언트로 Android, Java 및 Kotlin 멀티플랫폼용 최신 I/O 라이브러리
- 효율적으로 동작하며 HTTP 클라이언트를 빠르게 셋업함.
- 자체 복구 시스템이 있어 연결성 문제와 같이 네트워크에 문제가 발생했을 때 수동으로 처리할 필요가 없음
- 최신 TLS(Transport Layer Security) 기능, Android용 보안 지원, 캐싱 및 인터셉터를 제공
- OkHttp에서 가장 유능한 기능 중 하나는 호출 로그를 기록, 모니터링, 수정, 재작성 및 재시도할 수 있는 강력한 메커니즘인 interceptors임
- Bearer Authentication과 같은 액세스 토큰(access token)을 헤더에 추가하거나 요청 본문에 gzip 압축을 추가하는 등 필요에 따라 모든 네트워크 요청을 쉽게 변환가능
🟠 Retrofit
- OkHttp 위에 추상화 계층을 제공하므로 저수준 구현을 처리하지 않고도 쉽고 간결하게 요청 사양을 정의할 수 있음.
- Retrofit에서 제공하는 annotation을 활용하여 URL, 헤더 조작, method 및 body를 쉽게 요청할 수 있음
- 원하는 HTTP 요청 쉽게 빌드 가능
- Converter.Factory를 연결하면 보일러 플레이트 코드를 작성할 필요 없이 모든 JSON 응답을 쉽게 직렬화 가능
- 원시 응답을 처리하고 응답 유형을 원하는 유형으로 모델링할 수 있는 CallAdapter를 연결하여 네트워크 응답 조작 가능
5️⃣ Image Loading
🔴 Glide
- 타 이미지 로딩 라이브러리에 비해서 제공하는 기본적인 기능들이 압도적으로 다양
- Animated GIF 지원, placeholders, transformations, caching, 및 리소스 재사용과 같은 유용한 기능을 제공
🟠 Coil
- 100% Kotlin으로 작성되었으며 API들이 Kotlin 친화적
- Jetpack Compose를 지원
- Transformations, animated GIF 지원, SVG 지원 및 비디오 프레임 지원과 같은 유용한 기능을 제공
🟡 Fresco
- 다른 라이브러리와 달리 Fresco는 특히 Android 버전 4.x 이하를 대상으로 메모리를 효율적으로 사용하는 데 중점
- 저수준 OS를 타깃하면서 메모리에 민감한 애플리케이션을 구축하지 않는 한 Glide 또는 Coil을 사용하시는 것을 권장
🟢 Landscapist
- Glide, Coil 및 Fresco로 네트워크 또는 로컬 이미지를 가져와서 표시하는 Jetpack Compose 이미지 로딩 라이브러리
- Jetpack Compose에서는 UI 렌더링 메커니즘이 기존의 XML 기반에 비해서 완전히 변경됨. 때문에 Landscapist는 널리 사용되는 이미지 로드 라이브러리를 사용하여 Jetpack Compose에서 이미지 로딩을 쉽고 효율적으로 할 수 있도록 개발
- 이미지 상태 추적, 사용자 지정 Composable 구성, circular reveal 및 crossfade와 같은 애니메이션을 지원
최신 버전에서 ImagePlugin이라는 새로운 개념이 도입되어 이미지 로딩 동작을 더 쉽고 효율적으로 구현 가능
6️⃣ Local Storage
🔴 Room
- 복잡한 SQL 문 없이 데이터베이스 쿼리 및 액세스를 단순화 할 수 있도록 SQLite를 사용하여 추상화 계층을 제공하는 Google의 Android Jetpack 라이브러리
- 추상화 계층이 매우 간결하고 이해하기 쉽기 때문에 개발자가 CRUD에 대한 기본적인 이해만 바탕이 된다면, SQL 쿼리를 특별히 학습할 필요가 없음
- 코루틴, RxJava 호환성, 자동 마이그레이션 전략 및 Type converters와 같은 유용한 기능을 제공
🟠 DataStore
- 로컬 저장소에 키-값 쌍을 저장할 수 있는 데이터 저장소 솔루션
- SharedPreferences의 대체 솔루션
- Coroutines 및 Flow와 같은 다른 라이브러리와의 뛰어난 호환성을 지원하여 데이터를 비동기식으로 저장하고 RxJava도 지원
- protocol buffers를 사용하여 타입 객체의 저장도 지원
'Programming > Android' 카테고리의 다른 글
[Android Studio] Paging (1) | 2023.03.14 |
---|---|
[안드로이드 스튜디오] sdk 33에서는 xml 파일 자동 완성 안 됨 (0) | 2023.03.10 |
[Android Roadmap] Part4: Design Patterns and Architecture (1/2) (0) | 2023.02.21 |
[Android Roadmap] Part2: App Components (0) | 2023.01.31 |
[Android Roadmap] Part1: The Android Platform (0) | 2023.01.24 |