# 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와 연동하여 자동 데이터 수집 ## 성능 최적화 - 데이터베이스 인덱싱 전략 - 이미지 캐싱 및 최적화 - 지연 로딩 및 페이지네이션 적용 - 메모리 사용량 모니터링 및 최적화