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

137 lines
5.7 KiB
Markdown

# Subscription Manager - 데이터 모델
## 개요
이 문서는 Subscription Manager 앱의 데이터 구조를 정의합니다. 앱은 로컬 저장소(SQLite)를 사용하여 사용자의 구독 정보와 설정을 저장합니다.
## 데이터베이스 스키마
### 1. Subscription (구독)
사용자가 등록한 구독 서비스 정보를 저장합니다.
```
Table: subscriptions
- id: INTEGER PRIMARY KEY AUTOINCREMENT
- name: TEXT NOT NULL // 서비스 이름
- description: TEXT // 서비스 설명
- amount: REAL NOT NULL // 구독 비용
- currency: TEXT NOT NULL // 통화 (USD, KRW 등)
- billing_cycle: TEXT NOT NULL // 결제 주기 (monthly, yearly, weekly, custom)
- cycle_days: INTEGER // custom 주기일 경우 일수
- start_date: TEXT NOT NULL // 구독 시작일 (ISO 8601 형식)
- next_billing_date: TEXT NOT NULL // 다음 결제일 (ISO 8601 형식)
- category_id: INTEGER // 카테고리 외래 키
- logo_path: TEXT // 로고 이미지 경로
- color: TEXT // 서비스 대표 색상 (HEX)
- reminder_days: INTEGER // 결제일 몇 일 전에 알림을 받을지
- notes: TEXT // 사용자 메모
- is_active: INTEGER NOT NULL DEFAULT 1 // 활성 상태 (1: 활성, 0: 비활성)
- created_at: TEXT NOT NULL // 생성일 (ISO 8601 형식)
- updated_at: TEXT NOT NULL // 수정일 (ISO 8601 형식)
- FOREIGN KEY (category_id) REFERENCES categories(id)
```
### 2. Category (카테고리)
구독 서비스의 카테고리 정보를 저장합니다.
```
Table: categories
- id: INTEGER PRIMARY KEY AUTOINCREMENT
- name: TEXT NOT NULL // 카테고리 이름
- icon: TEXT // 카테고리 아이콘 코드
- color: TEXT // 카테고리 색상 (HEX)
- created_at: TEXT NOT NULL // 생성일 (ISO 8601 형식)
- updated_at: TEXT NOT NULL // 수정일 (ISO 8601 형식)
```
### 3. Payment (결제 내역)
구독 서비스의 결제 내역을 저장합니다.
```
Table: payments
- id: INTEGER PRIMARY KEY AUTOINCREMENT
- subscription_id: INTEGER NOT NULL // 구독 외래 키
- amount: REAL NOT NULL // 결제 금액
- currency: TEXT NOT NULL // 통화
- payment_date: TEXT NOT NULL // 결제일 (ISO 8601 형식)
- status: TEXT NOT NULL // 상태 (paid, pending, failed)
- notes: TEXT // 메모
- created_at: TEXT NOT NULL // 생성일 (ISO 8601 형식)
- FOREIGN KEY (subscription_id) REFERENCES subscriptions(id)
```
### 4. Usage (사용량)
구독 서비스의 사용량 정보를 저장합니다.
```
Table: usages
- id: INTEGER PRIMARY KEY AUTOINCREMENT
- subscription_id: INTEGER NOT NULL // 구독 외래 키
- date: TEXT NOT NULL // 사용일 (ISO 8601 형식)
- amount: REAL // 사용량 (서비스에 따라 다름)
- unit: TEXT // 단위 (API 호출, 토큰, 시간 등)
- notes: TEXT // 메모
- created_at: TEXT NOT NULL // 생성일 (ISO 8601 형식)
- FOREIGN KEY (subscription_id) REFERENCES subscriptions(id)
```
### 5. Settings (설정)
앱 설정 정보를 저장합니다.
```
Table: settings
- id: INTEGER PRIMARY KEY AUTOINCREMENT
- key: TEXT NOT NULL UNIQUE // 설정 키
- value: TEXT NOT NULL // 설정 값
- updated_at: TEXT NOT NULL // 수정일 (ISO 8601 형식)
```
### 6. PredefinedService (미리 정의된 서비스)
앱에서 기본적으로 제공하는 서비스 정보를 저장합니다.
```
Table: predefined_services
- id: INTEGER PRIMARY KEY AUTOINCREMENT
- name: TEXT NOT NULL // 서비스 이름
- description: TEXT // 서비스 설명
- logo_path: TEXT // 로고 이미지 경로
- color: TEXT // 서비스 대표 색상 (HEX)
- category_id: INTEGER // 기본 카테고리
- website: TEXT // 서비스 웹사이트
- created_at: TEXT NOT NULL // 생성일 (ISO 8601 형식)
- updated_at: TEXT NOT NULL // 수정일 (ISO 8601 형식)
- FOREIGN KEY (category_id) REFERENCES categories(id)
```
## 초기 데이터
### 기본 카테고리
- AI 서비스
- 개발 도구
- 엔터테인먼트
- 생산성
- 클라우드 스토리지
- 기타
### 미리 정의된 서비스
- OpenAI (ChatGPT, DALL-E)
- Anthropic (Claude)
- GitHub (GitHub Copilot)
- Cursor
- Windsurf
- 기타 인기 구독 서비스
## 데이터 관계
- 하나의 구독은 하나의 카테고리에 속합니다.
- 하나의 구독은 여러 결제 내역을 가질 수 있습니다.
- 하나의 구독은 여러 사용량 기록을 가질 수 있습니다.
## 데이터 마이그레이션
앱 업데이트 시 데이터베이스 스키마 변경이 필요한 경우, 마이그레이션 스크립트를 통해 기존 데이터를 보존하면서 스키마를 업데이트합니다.
## 데이터 백업
사용자가 앱을 재설치하거나 기기를 변경할 때 데이터 손실을 방지하기 위해, 로컬 백업 기능을 제공합니다. 향후 클라우드 동기화 기능이 추가될 예정입니다.
## 데이터 보안
- 민감한 결제 정보는 기기의 보안 저장소에 암호화하여 저장합니다.
- 앱 잠금 기능을 통해 무단 접근을 방지합니다.
- 백업 파일은 암호화됩니다.