본문 바로가기

안드로이드/클린 아키텍처

[안드로이드 클린 아키텍처 시리즈] Data Layer 설명 #2


Data Layer는 어떤 역할을 수행하고 있을까?

Data Layer는 애플리케이션의 데이터 관리와 관련된 모든 책임을 지는 핵심적인 구성 요소입니다. 이 계층의 목적은 애플리케이션 내부와 외부의 데이터 소스로부터 데이터를 효율적으로 요청, 처리, 저장 및 제공하는 것입니다. 즉, 애플리케이션에서 사용하는 모든 데이터 소스(예: 로컬 데이터베이스, 웹 서비스, 캐시)와의 상호작용을 처리하게 됩니다. Data Layer의 설계와 구현은 애플리케이션의 성능, 확장성, 유지보수성에 직접적인 영향을 미치므로, 이를 자세히 이해하는 것이 중요합니다.

Data Layer와 UI Layer의 데이터 흐름

Data Layer의 주요 구성 요소

Data Layer는 다음과 같은 주요 구성 요소로 이루어집니다.

  • 데이터 소스 (Data Sources)
    로컬 데이터베이스(예: Room), 원격 API(예: Retrofit), 파일 시스템, 캐시 등 다양한 데이터 소스와의 상호작용을 담당합니다.
  • 레포지토리 (Repository)
    데이터 소스로부터 데이터를 요청하고, 데이터를 처리한 후 이를 애플리케이션의 다른 부분에 제공하는 역할을 레포지토리 패턴을 사용해서 구현합니다.
  • 데이터 모델 (Data Models)
    네트워크에서 받은 데이터 또는 데이터베이스의 데이터를 애플리케이션 내부에서 사용하기 위한 형식으로 변환하는 데 사용되는 구조체입니다.

Data Layer의 구조

1. 데이터 소스(Data Sources)의 역할

데이터 소스는 애플리케이션의 데이터를 저장하고 제공하는 기능을 담당합니다. 데이터 소스는 크게 로컬 데이터 소스와 원격 데이터 소스로 나눌 수 있으며, 각각의 특성과 사용 목적에 따라 선택하여 사용합니다.

로컬 데이터 소스 (Local Data Source)

로컬 데이터 소스는 디바이스 내부에 데이터를 저장하며, 주로 오프라인 상태에서도 애플리케이션을 사용할 수 있도록 지원합니다. 안드로이드에서 사용되는 주요 로컬 데이터 소스는 Room 데이터베이스를 사용합니다.

  • 로컬 데이터베이스
    애플리케이션의 오프라인 지원 및 빠른 데이터 접근을 위해 사용됩니다. Room 데이터베이스는 SQL 데이터베이스 위에 추상화 레이어를 제공하여, 안드로이드 개발자가 로컬 데이터베이스 작업을 수행할 수 있게 합니다.
  • 캐시
    자주 사용되는 데이터 또는 비용이 많이 드는 데이터 요청 결과를 임시 저장하여 Room 데이터베이스에서 데이터를 불러옵니다. 애플리케이션의 반응 속도가 빨라지게 됩니다.

원격 데이터 소스 (Remote Data Source)

원격 데이터 소스는 인터넷을 통해 데이터를 제공하는 서버와 통신합니다. 클라우드 데이터베이스, 웹 API 등이 이에 해당하며, 주로 실시간 데이터나 대량의 데이터를 처리할 때 사용됩니다. Retrofit과 같은 HTTP 클라이언트를 사용하여 서버로부터 데이터를 요청하고 받아옵니다. 이 과정에서 데이터는 JSON로 전달되며, 애플리케이션에서 사용하기 위해 데이터 모델로 변환됩니다.

2. 레포지토리(Repository)의 역할

레포지토리는 다양한 데이터 소스(로컬 데이터베이스, 원격 서버, 메모리 캐시 등)와 애플리케이션의 비즈니스 로직 사이에서 데이터를 중개합니다. 이러한 방식으로, 레포지토리는 데이터 관리의 복잡성을 캡슐화하고 애플리케이션 나머지 부분이 데이터 소스의 구체적인 구현에 의존하지 않도록 합니다.

레포지토리의 핵심 기능

1. 데이터 소스 추상

레포지토리는 애플리케이션에서 데이터를 요청할 때, 해당 데이터가 로컬 데이터베이스에서 온 것인지, 원격 서버에서 온 것인지, 아니면 캐시에서 온 것인지 알 필요가 없게 합니다. 이렇게 함으로써, 데이터 소스의 변경이 애플리케이션의 다른 부분에 영향을 미치지 않도록 보장합니다.

2. 데이터 일관성 유

레포지토리는 다양한 데이터 소스 간의 데이터 동기화를 관리합니다. 예를 들어, 원격 서버에서 새로운 데이터를 가져온 후 로컬 데이터베이스에 저장하면, 이후의 데이터 요청은 로컬 데이터베이스에서 처리할 수 있어 애플리케이션의 반응 속도를 향상할 수 있습니다.

3. 데이터 액세스 인터페이스 정의

레포지토리는 데이터를 요청하고 처리하는 일관된 인터페이스를 제공하여, 애플리케이션의 나머지 부분이 어떻게 데이터에 접근하고 사용할 수 있는지 명확하게 정의합니다.

3. 데이터 모델(Data Model)의 역할

외부 API나 로컬 데이터베이스에서 전달되는 DTO를 정의하고, 이를 어플리케이션에서 사용할 수 있도록 변환해 주는 매퍼를 제공합니다. 매퍼는 Data Layer와 Domain Layer 사이에서 모델 간의 변환을 위해 사용됩니다. 원격 API로부터 받은 JSON 객체를 어플리케이션 내부에서 사용하는 도메인 모델로 변환할 수 있도록 합니다.

4. Data Layer 정

Data Layer는 Repository, Data Source, Data Model, Mapper를 담당하는 역할을 합니다. Repository는 다양한 데이터 소스 (로컬, 원격 등)로부터 데이터를 가져오고, 필요한 데이터 형식으로 변환하는 역할을 합니다. 변환된 데이터는 ViewModel로 전달되기 때문에 UI Layer에서 데이터를 사용할 수 있게 됩니다.

다음 포스팅에서는 Domain Layer에 대해 설명하겠습니다.

반응형