Files
zellyy-finance/docs/02_기술_문서/데이터베이스_스키마_요약.md
2025-03-21 16:08:43 +09:00

5.3 KiB

적자 탈출 가계부 - 데이터베이스 스키마 요약

개요

이 문서는 적자 탈출 가계부 애플리케이션의 데이터베이스 스키마를 요약합니다. 모든 테이블은 PostgreSQL 기반으로 설계되었으며, Supabase 환경에 최적화되어 있습니다.

기술적 특징

  • UUID 기반 기본 키: 모든 테이블은 UUID 타입의 기본 키를 사용합니다.
  • 타임존 지원: 날짜/시간 데이터는 TIMESTAMP WITH TIME ZONE 타입을 사용하여 국제적 사용을 지원합니다.
  • 정확한 금액 계산: 모든 금액은 DECIMAL(12, 2) 타입을 사용하여 정확한 계산을 보장합니다.
  • Row Level Security (RLS): 모든 테이블에 RLS 정책이 적용되어 사용자는 자신의 데이터만 접근할 수 있습니다.
  • 자동 생성 시간: 모든 테이블은 created_atupdated_at 필드를 포함하여 데이터 생성 및 수정 시간을 자동으로 기록합니다.
  • 계층적 카테고리: 카테고리는 계층 구조를 지원하여 상위/하위 카테고리 관계를 표현할 수 있습니다.
  • 인덱스 최적화: 자주 조회되는 필드에 인덱스를 적용하여 성능을 최적화했습니다.

테이블 구조

1. users (01_users.sql)

사용자 정보를 관리하는 테이블입니다.

  • 주요 필드: id, email, name, created_at, updated_at
  • 관련 함수: 사용자 프로필 자동 생성 트리거
  • 보안: RLS 정책으로 사용자는 자신의 정보만 접근 가능

2. categories (02_categories.sql)

지출/수입 카테고리를 관리하는 테이블입니다.

  • 주요 필드: id, user_id, name, parent_id, type, icon, color, is_system
  • 계층 구조: parent_id를 통해 상위/하위 카테고리 관계 표현
  • 기본 데이터: 15개 이상의 기본 카테고리와 하위 카테고리 제공
  • 관련 함수: 카테고리 계층 조회 함수

3. expenses (03_expenses.sql)

지출/수입 내역을 관리하는 테이블입니다.

  • 주요 필드: id, user_id, amount, is_income, category_id, card_id, date, memo
  • 관련 함수: 월별 지출 합계, 카테고리별 지출 분석 함수
  • 인덱스: user_id, category_id, date에 인덱스 적용

4. budgets (04_budgets.sql)

월별/카테고리별 예산을 관리하는 테이블입니다.

  • 주요 필드: id, user_id, category_id, year, month, amount
  • 관련 함수: 예산 대비 지출 비율 조회 함수
  • 인덱스: user_id, category_id, year, month에 인덱스 적용

5. cards (05_cards.sql)

카드 정보를 관리하는 테이블입니다.

  • 주요 필드: id, user_id, name, card_number, payment_day, is_active
  • 관련 함수: 월별 카드 사용 현황 조회 함수
  • 보안: 카드 번호는 마스킹 처리

6. limits (06_limits.sql)

지출 한도를 관리하는 테이블입니다.

  • 주요 필드: id, user_id, card_id, category_id, amount, period, start_date, end_date
  • 관련 함수: 활성화된 한도 및 사용량 조회 함수, 한도 경고 알림 트리거
  • 제약 조건: 카드 또는 카테고리 중 하나는 반드시 지정되어야 함

7. templates (07_templates.sql)

자주 사용하는 지출/수입 템플릿을 관리하는 테이블입니다.

  • 주요 필드: id, user_id, name, amount, is_income, category_id, card_id, usage_count
  • 관련 함수: 템플릿 사용 카운터 증가, 템플릿으로 지출/수입 생성, 자주 사용하는 템플릿 조회

8. notifications (08_notifications.sql)

알림 시스템을 관리하는 테이블입니다.

  • 주요 필드: id, user_id, title, message, type, related_id, is_read, priority
  • 알림 타입: limit_warning, budget_warning, payment_reminder, system_message, custom
  • 관련 함수: 알림 읽음 표시, 사용자 알림 조회, 예산 초과 알림 생성, 카드 결제일 알림 생성

9. analysis_settings (09_analysis_settings.sql)

사용자별 분석 설정을 관리하는 테이블입니다.

  • 주요 필드: id, user_id, setting_key, setting_value (JSONB)
  • 설정 키: dashboard_widgets, report_preferences, analysis_period, chart_colors 등
  • 관련 함수: 분석 설정 가져오기/저장, 기본 분석 설정 생성, 지출 분석 함수(카테고리별 지출 비율, 기간별 지출 추이)

마이그레이션 실행 방법

  1. run_migrations.sh 스크립트를 사용하여 모든 마이그레이션 파일을 순서대로 실행합니다.
  2. 환경 변수를 통해 데이터베이스 연결 정보를 설정할 수 있습니다.
    DB_HOST=localhost DB_PORT=5432 DB_NAME=mydb DB_USER=user DB_PASSWORD=pass ./run_migrations.sh
    

확장 계획

  • 데이터 동기화: 여러 기기 간 데이터 동기화 메커니즘 구현
  • 분석 기능 확장: 고급 재무 분석 및 예측 기능 추가
  • 성능 최적화: 대량의 트랜잭션 데이터 처리를 위한 파티셔닝 및 인덱싱 최적화
  • API 엔드포인트: RESTful API 및 GraphQL 엔드포인트 개발

참고 사항

  • 모든 SQL 파일은 migrations 디렉토리에 순서대로 번호가 매겨져 있습니다.
  • 각 테이블은 자체 SQL 파일에 정의되어 있어 관리가 용이합니다.
  • 트리거와 함수는 관련 테이블과 동일한 파일에 정의되어 있습니다.