Files
Obsidian/ZELLYY/zellyy subscription/architecture.md
2025-03-26 18:16:46 +09:00

7.5 KiB

Subscription Manager - 아키텍처 설계

개요

이 문서는 Subscription Manager 앱의 전체 아키텍처와 주요 컴포넌트 간의 관계를 설명합니다. Flutter 기반의 모바일 앱으로, 로컬 데이터베이스를 활용한 구독 서비스 관리 기능을 제공합니다.

아키텍처 원칙

  • 관심사 분리: UI, 비즈니스 로직, 데이터 액세스 계층을 명확히 분리
  • 단방향 데이터 흐름: 상태 관리의 예측 가능성 보장
  • 모듈화: 기능별 모듈 분리로 유지보수성 향상
  • 확장성: 향후 클라우드 연동 등을 고려한 설계

아키텍처 다이어그램

┌─────────────────────────────────────────────────────────────┐
│                        Presentation Layer                    │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐         │
│  │  Screens│  │  Widgets│  │  Themes │  │  Routes │         │
│  └─────────┘  └─────────┘  └─────────┘  └─────────┘         │
└───────────────────────────┬─────────────────────────────────┘
                            │
┌───────────────────────────▼─────────────────────────────────┐
│                        Business Logic Layer                  │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐         │
│  │ Providers│ │ Services│  │ Helpers │  │ Models  │         │
│  └─────────┘  └─────────┘  └─────────┘  └─────────┘         │
└───────────────────────────┬─────────────────────────────────┘
                            │
┌───────────────────────────▼─────────────────────────────────┐
│                        Data Layer                            │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐         │
│  │Repository│ │ Database│  │ Storage │  │ API     │         │
│  └─────────┘  └─────────┘  └─────────┘  └─────────┘         │
└─────────────────────────────────────────────────────────────┘

주요 컴포넌트 설명

1. Presentation Layer (프레젠테이션 계층)

  • Screens: 사용자에게 표시되는 화면 (홈, 구독 목록, 상세 정보 등)
  • Widgets: 재사용 가능한 UI 컴포넌트 (구독 카드, 차트, 입력 폼 등)
  • Themes: 앱 전체 테마 및 스타일 정의
  • Routes: 화면 간 네비게이션 관리

2. Business Logic Layer (비즈니스 로직 계층)

  • Providers: 상태 관리 및 UI와 데이터 계층 연결 (Provider 패턴 활용)
  • Services: 비즈니스 로직 처리 (구독 관리, 알림, 분석 등)
  • Helpers: 유틸리티 함수 (날짜 계산, 통화 변환 등)
  • Models: 데이터 모델 클래스 (구독, 카테고리, 결제 등)

3. Data Layer (데이터 계층)

  • Repository: 데이터 액세스 추상화 계층
  • Database: SQLite 데이터베이스 관리 (sqflite)
  • Storage: 로컬 저장소 관리 (shared_preferences, secure_storage)
  • API: 향후 클라우드 연동을 위한 API 클라이언트 (MVP 이후)

디렉토리 구조

lib/
├── main.dart                 # 앱 진입점
├── app.dart                  # 앱 설정 및 테마
├── screens/                  # 화면 컴포넌트
│   ├── home/                 # 홈 화면 관련 파일
│   ├── subscriptions/        # 구독 관리 화면 관련 파일
│   ├── analytics/            # 분석 화면 관련 파일
│   └── settings/             # 설정 화면 관련 파일
├── widgets/                  # 공통 위젯
│   ├── subscription_card.dart
│   ├── charts/
│   └── forms/
├── providers/                # 상태 관리
│   ├── subscription_provider.dart
│   ├── settings_provider.dart
│   └── analytics_provider.dart
├── services/                 # 비즈니스 로직
│   ├── subscription_service.dart
│   ├── notification_service.dart
│   └── analytics_service.dart
├── models/                   # 데이터 모델
│   ├── subscription.dart
│   ├── category.dart
│   └── payment.dart
├── repositories/             # 데이터 액세스
│   ├── subscription_repository.dart
│   └── settings_repository.dart
├── database/                 # 데이터베이스 관리
│   ├── database_helper.dart
│   └── migrations/
├── utils/                    # 유틸리티
│   ├── date_utils.dart
│   ├── currency_utils.dart
│   └── constants.dart
└── localization/             # 다국어 지원
    ├── app_localizations.dart
    ├── en.dart
    └── ko.dart

데이터 흐름

  1. 사용자 입력: UI 이벤트 발생 (버튼 클릭, 폼 제출 등)
  2. Provider 호출: 상태 관리 계층에서 이벤트 처리
  3. Service 호출: 비즈니스 로직 실행
  4. Repository 호출: 데이터 액세스 추상화 계층 통해 데이터 요청
  5. Database 접근: 로컬 데이터베이스에서 데이터 읽기/쓰기
  6. 결과 반환: 데이터베이스 → Repository → Service → Provider → UI

상태 관리 전략

  • Provider 패턴: Flutter의 Provider 패키지를 활용한 상태 관리
  • 단방향 데이터 흐름: 상태 변경은 Provider를 통해서만 이루어짐
  • 반응형 UI: 상태 변경 시 자동으로 UI 업데이트
  • 상태 격리: 기능별로 별도의 Provider를 사용하여 상태 관리 복잡성 감소

오프라인 지원

  • 모든 데이터는 로컬 데이터베이스에 저장되어 오프라인에서도 앱 사용 가능
  • 향후 클라우드 동기화 기능 추가 시에도 오프라인 우선 전략 유지

보안 전략

  • 민감한 결제 정보는 flutter_secure_storage를 사용하여 암호화 저장
  • 앱 잠금 기능 제공 (PIN, 생체 인증 등)
  • 데이터 백업 파일 암호화

확장성 계획

  • 클라우드 동기화: 향후 Firebase 또는 자체 백엔드 서버와 연동
  • 웹 버전: 동일한 비즈니스 로직을 공유하는 웹 클라이언트 개발
  • API 연동: 구독 서비스 제공업체의 API와 연동하여 자동 데이터 수집

성능 최적화

  • 데이터베이스 인덱싱 전략
  • 이미지 캐싱 및 최적화
  • 지연 로딩 및 페이지네이션 적용
  • 메모리 사용량 모니터링 및 최적화