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

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