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