Skip to content

콘텐츠(이미지, 동영상)를 검색하고 북마크할 수 있는 Android 애플리케이션

Notifications You must be signed in to change notification settings

jtm0609/MediaBox

Repository files navigation

📝 프로젝트 개요

MediaBox는 콘텐츠(이미지, 동영상)를 검색하고 북마크할 수 있는 앱입니다. 원하는 콘텐츠를 빠르게 찾고 저장할 수 있도록 제공하며, 모듈화된 클린 아키텍처를 적용하여 코드의 유지보수성과 확장성을 높였습니다.

🛠 기술 스택

  • Kotlin
  • MVI, Clean Architecture
  • Jetpack Compose
  • Coroutine & Flow
  • Hilt
  • Retrofit, OkHttp
  • DataStore
  • Paging 3

📂 프로젝트 구조

이 프로젝트는 클린 아키텍처에 따라 다음과 같은 모듈로 구성되어 있습니다:

모듈별 세부 설명

  • app: 애플리케이션의 진입점, Hilt를 사용한 DI 설정, 기본 애플리케이션 설정
  • core-ui: 재사용 가능한 UI 컴포넌트, 테마, 색상
  • feature: 기능별로 분리된 모듈로, 각 기능에 필요한 화면, ViewModel 및 관련 로직 포함
    • main: 앱의 메인 화면 구현, 내비게이션 처리
    • search: 검색 기능 구현, 검색 결과 표시
    • bookmark: 북마크 기능 구현, 저장된 콘텐츠 관리
  • domain: UseCase, 도메인 모델, Repository 인터페이스
  • data: Repository 구현체, 데이터 소스, 페이징
  • data-local: 로컬 데이터 관리, DataStore를 통한 영속성
  • data-remote: 원격 API 통신, 네트워크 처리

🔍 주요 기능

  • 검색 기능: API를 통한 데이터 검색 및 결과 표시, 동일한 검색어 입력 시 5분간 결과 캐싱으로 빠른 응답 제공, 사진과 동영상을 내림차순으로 정렬하여 최신 콘텐츠 우선 표시
  • 북마크 기능: 관심 항목 저장 및 관리

🏗️ 아키텍처 다이어그램

아래 화살표는 의존성 방향을 나타냅니다 (A → B는 "A가 B에 의존한다"는 의미).

┌─────────────────────────────┐       ┌─────────────────────────────┐
│         Feature             │       │         Core-UI             │
│                             │       │                             │
│    ┌─────────────────┐      │       │    ┌─────────────────┐      │
│    │      Views      │      │       │    │  UI Components  │      │
│    │    (Compose)    │      │       │    │    (Compose)    │      │
│    └────────┬────────┘      │──────►│    └─────────────────┘      │
│             │               │       │                             │
│             │               │       │                             │
│             ▼               │       │    ┌─────────────────┐      │
│    ┌─────────────────┐      │       │    │      theme      │      │
│    │    ViewModel    │      │       │    └─────────────────┘      │
│    └────────┬────────┘      │       │                             │
└─────────────┼───────────────┘       └─────────────────────────────┘
              │                                    
              ▼                                    
┌─────────────────────────────┐                    
│          Domain             │                    
│                             │                    
│    ┌─────────────────┐      │                    
│    │    Use Cases    │      │                    
│    └────────┬────────┘      │                    
│             │               │    
│             ▼               │    
│    ┌─────────────────┐      │    
│    │   Repositories  │      │    
│    │   (Interface)   │      │    
│    └─────────────────┘      │    
└─────────────┬───────────────┘    
              ▲                    
              │                    
┌─────────────┼───────────────┐    
│          Data               │    
│                             │    
│    ┌─────────────────┐      │    
│    │   Repositories  │      │    
│    │ (Implementation)│      │    
│    └────────┬────────┘      │    
│             │               │    
│             ▼               │    
│    ┌─────────────────┐      │    
│    │   Data Sources  │      │    
│    └─────────────────┘      │    
└─────────────┬───────────────┘    
              ▲                    
         ┌────┴────┐               
         │         │               
┌────────┴───┐ ┌───┴────────┐      
│  Local     │ │  Remote    │      
│  Data      │ │  Data      │
└────────────┘ └────────────┘

📷 스크린 샷

About

콘텐츠(이미지, 동영상)를 검색하고 북마크할 수 있는 Android 애플리케이션

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages