본문 바로가기

안드로이드/Compose Paging3

[안드로이드 Jetpack Compose Paging3 시리즈] Paging3 라이브러리 소개 #1


1. Paging3 라이브러리 소개

안녕하세요. 오늘은 안드로이드 Jetpack Compose Paging3 라이브러리에 대해 소개하고 이론을 정리하겠습니다. 최근에는 리스트 형태로 많은 정보를 보여주고 상호작용을 하고 있습니다. 특히 모바일에서는 메모리나 공간 절약을 위해 무한 스크롤 방식으로 많이 구현하게 됩니다. 그래서 많은 데이터를 쪼개서 보여주는 Paging 형태로 개발되고 있습니다. Paging3 라이브러리는 이러한 작업을 효율적으로 할 수 있게 해 주며 안드로이드 권장 아키텍처와 함께 사용될 수 있도록 설계된 라이브러리입니다. 직접 써본 결과, Jetpack Compose와 함께 활용될 때 더 강력했던 것 같습니다.

Paging3 라이브러리의 아키텍처
Paging3 라이브러리의 아키텍처

2. Paging3 라이브러리 필요성

대용량 데이터를 가진 애플리케이션에서 모든 데이터를 한 번에 로드하려고 하면 메모리 사용량이 급증하고, 애플리케이션의 반응성이 떨어지며 이는 좋지 않은 경험을 제공하게 됩니다. 그래서 Paging 처리를 하는 것이 일반적입니다. 이때 Paging3 라이브러리를 사용했을 때 얻는 장점은 아래와 같습니다.

  • Paging 된 데이터를 메모리에 캐싱하는 작업을 도와줍니다. 같은 데이터를 API 호출로 불러오지 않고 캐시 된 데이터를 보여줌으로써 리소스를 효율적으로 사용하고 좋은 사용자 경험을 제공하게 됩니다.
  • 요청 중복 삭제 기능이 기본 제공되므로 앱에서 네트워크 대역폭과 시스템 리소스를 효율적으로 사용할 수 있습니다.
  • xml의 경우에는 RecyclerVIew와 Adapter를 사용하는데 Adapter와 호환이 잘돼서 스크롤을 했을 때 자동으로 데이터를 불러옵니다.
  • Kotlin 코루틴과 LiveData, RxJava와도 호환이 잘 됩니다.
  • Paging3 라이브러리를 사용하지 않는다면 새로고침이나 재시도가 필요할 때 직접 기능을 구현해야 하지만 Paging3 라이브러리는 이런 기능을 제공해 줍니다.
  • Jetpack Compose와 함께 사용하면 Adapter 없이도 편하게 무한 스크롤을 구현할 수 있습니다.

3. Paging3 라이브러리 아키텍처

Paging3 라이브러리는 구글에서 제안하는 안드로이드 아키텍처와 호환이 잘 되도록 설계되어 있습니다. 예를 들어 클린 아키텍처에서는 Data Layer에 Repository가 있고 UI Layer에 ViewModel이 있는데, Paging3 라이브러리의 아키텍처를 구현할 때도 클린 아키텍처의 계층에 맞춰서 구현하면 되기 때문입니다.

Paging3 라이브러리를 사용할 때는 PagingConfig, PagingSource, RemoteMediator 클래스를 사용해서 Pager 인스턴스를 생성하게 됩니다.

4. 상황별 Paging3 라이브러리 구현 방법

Paging3 라이브러리를 사용해서 Paging을 구현할 때는 크게 3가지 방법으로 나뉩니다. 아래의 3가지 중 어떤 방법을 선택할 건지는 여러분의 선택입니다.

  1. 로컬 DB (Room) 등 내부 데이터를 가져오는 경우
  2. API 등 외부 데이터를 가져오는 경우
  3. 로컬 DB와 API를 모두 사용해서 캐싱 작업도 포함하는 경우

위에서 Paging3 라이브러리를 사용할 때는 PagingConfig, PagingSource, RemoteMediator 클래스를 구현해야 한다고 설명했었습니다. 정확히는 PagingConfig와 PagingSource는 어떤 경우에도 구현을 해야 하고, RemoteMediator는 3번 상황에서만 구현하면 됩니다.

5. Paging3 라이브러리 정리

이번 시간에는 안드로이드 Jetpack Compose에서 페이징 처리를 하기 위해서 Paging3 라이브러리를 사용했을 때 어떤 장점이 있는지 알아보았고 Paging3 라이브러리의 아키텍처 구조와 각 상황에 맞는 사용 방법에 대해 포스팅했습니다.

대용량의 데이터를 효과적으로 관리하고 사용자에게 부드러운 스크롤링 경험을 제공하는 것은 모던 애플리케이션 개발에서 매우 중요한 요소가 되었습니다. 이런 맥락에서 Paging3 라이브러리는 많은 장점을 제공해 준다고 생각합니다.

특히, 메모리 효율성을 극대화하고, 데이터 로딩을 최적화하는 동시에, 복잡한 데이터 동기화 문제를 해결해 줍니다. 또한, Jetpack Compose 및 RecyclerView(Adpater)와도 높은 호환성을 보여줍니다.

이런 장점들을 Paging3 라이브러리를 사용하는 것만으로 제공받을 수 있어서 Pager 처리를 할 때 Paging3 라이브러리를 선택하는 것도 좋을 것 같습니다.

다음 시간에는 PagingConfig, PagingSource, RemoteMediator에 대해 설명하고, '2. API 등 외부 데이터를 가져오는 경우'를 구현하겠습니다.