5.3 KiB
5.3 KiB
적자 탈출 가계부 - 데이터베이스 스키마 요약
개요
이 문서는 적자 탈출 가계부 애플리케이션의 데이터베이스 스키마를 요약합니다. 모든 테이블은 PostgreSQL 기반으로 설계되었으며, Supabase 환경에 최적화되어 있습니다.
기술적 특징
- UUID 기반 기본 키: 모든 테이블은 UUID 타입의 기본 키를 사용합니다.
- 타임존 지원: 날짜/시간 데이터는
TIMESTAMP WITH TIME ZONE타입을 사용하여 국제적 사용을 지원합니다. - 정확한 금액 계산: 모든 금액은
DECIMAL(12, 2)타입을 사용하여 정확한 계산을 보장합니다. - Row Level Security (RLS): 모든 테이블에 RLS 정책이 적용되어 사용자는 자신의 데이터만 접근할 수 있습니다.
- 자동 생성 시간: 모든 테이블은
created_at과updated_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 등
- 관련 함수: 분석 설정 가져오기/저장, 기본 분석 설정 생성, 지출 분석 함수(카테고리별 지출 비율, 기간별 지출 추이)
마이그레이션 실행 방법
run_migrations.sh스크립트를 사용하여 모든 마이그레이션 파일을 순서대로 실행합니다.- 환경 변수를 통해 데이터베이스 연결 정보를 설정할 수 있습니다.
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 파일에 정의되어 있어 관리가 용이합니다.
- 트리거와 함수는 관련 테이블과 동일한 파일에 정의되어 있습니다.