Files
2025-03-26 18:16:46 +09:00

5.7 KiB

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
  • 기타 인기 구독 서비스

데이터 관계

  • 하나의 구독은 하나의 카테고리에 속합니다.
  • 하나의 구독은 여러 결제 내역을 가질 수 있습니다.
  • 하나의 구독은 여러 사용량 기록을 가질 수 있습니다.

데이터 마이그레이션

앱 업데이트 시 데이터베이스 스키마 변경이 필요한 경우, 마이그레이션 스크립트를 통해 기존 데이터를 보존하면서 스키마를 업데이트합니다.

데이터 백업

사용자가 앱을 재설치하거나 기기를 변경할 때 데이터 손실을 방지하기 위해, 로컬 백업 기능을 제공합니다. 향후 클라우드 동기화 기능이 추가될 예정입니다.

데이터 보안

  • 민감한 결제 정보는 기기의 보안 저장소에 암호화하여 저장합니다.
  • 앱 잠금 기능을 통해 무단 접근을 방지합니다.
  • 백업 파일은 암호화됩니다.