# 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 - 기타 인기 구독 서비스 ## 데이터 관계 - 하나의 구독은 하나의 카테고리에 속합니다. - 하나의 구독은 여러 결제 내역을 가질 수 있습니다. - 하나의 구독은 여러 사용량 기록을 가질 수 있습니다. ## 데이터 마이그레이션 앱 업데이트 시 데이터베이스 스키마 변경이 필요한 경우, 마이그레이션 스크립트를 통해 기존 데이터를 보존하면서 스키마를 업데이트합니다. ## 데이터 백업 사용자가 앱을 재설치하거나 기기를 변경할 때 데이터 손실을 방지하기 위해, 로컬 백업 기능을 제공합니다. 향후 클라우드 동기화 기능이 추가될 예정입니다. ## 데이터 보안 - 민감한 결제 정보는 기기의 보안 저장소에 암호화하여 저장합니다. - 앱 잠금 기능을 통해 무단 접근을 방지합니다. - 백업 파일은 암호화됩니다.