# ZELLYY 서비스 데이터베이스 통합 계획 ## 개요 이 문서는 ZELLYY Core와 각 서비스(적자 탈출 가계부, Subscription Manager, ZELLYY Card)의 데이터베이스 통합 방안을 설명합니다. ## 통합 원칙 1. **단일 Supabase 인스턴스** - 모든 서비스는 하나의 Supabase 인스턴스를 공유 2. **스키마 분리** - 서비스별로 독립된 스키마 사용 3. **공통 테이블 공유** - 사용자 정보 등 공통 데이터는 Core 스키마에서 관리 4. **Row-Level Security (RLS)** - 서비스별 데이터 접근 제어 ## 스키마 구조 ``` supabase ├── core # ZELLYY Core 스키마 │ ├── users # 사용자 정보 │ ├── services # 서비스 정보 │ └── service_access # 사용자-서비스 접근 권한 │ ├── budget # 적자 탈출 가계부 스키마 │ ├── accounts # 계좌 정보 │ ├── categories # 지출/수입 카테고리 │ ├── transactions # 거래 내역 │ └── budgets # 예산 계획 │ ├── subscription # Subscription Manager 스키마 │ ├── subscriptions # 구독 정보 │ ├── payment_history # 결제 내역 │ └── reminders # 구독 알림 설정 │ └── card # ZELLYY Card 스키마 ├── cards # 카드 정보 ├── benefits # 카드 혜택 └── usages # 카드 사용 내역 ``` ## 데이터 관계 관리 ### 외래 키 전략 각 서비스의 데이터는 `core.users` 테이블의 사용자 ID를 외래 키로 참조합니다: ```sql -- 예: 적자 탈출 가계부의 계좌 테이블 CREATE TABLE budget.accounts ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), user_id UUID REFERENCES core.users(id) ON DELETE CASCADE, name TEXT NOT NULL, -- 기타 필드 ); ``` ### Row-Level Security (RLS) 정책 각 테이블에는 사용자별 접근 제어를 위한 RLS 정책을 적용합니다: ```sql -- 예: 계좌 테이블의 RLS 정책 CREATE POLICY "사용자 본인의 계좌만 접근 가능" ON budget.accounts FOR ALL USING (auth.uid() = user_id); ``` ## 데이터 마이그레이션 계획 기존 '적자 탈출 가계부'의 데이터베이스를 통합 스키마로 마이그레이션하는 단계: 1. **스키마 생성**: `budget` 스키마 생성 2. **테이블 이동**: 기존 테이블을 새 스키마로 이동 3. **외래 키 업데이트**: `core.users` 테이블을 참조하도록 외래 키 수정 4. **RLS 정책 적용**: 모든 테이블에 적절한 RLS 정책 설정 5. **데이터 검증**: 마이그레이션 후 데이터 무결성 확인 ## 서비스별 데이터 접근 각 서비스는 자신의 스키마와 `core` 스키마에만 접근할 수 있도록 설계: 1. **서비스별 데이터베이스 역할 생성** ```sql CREATE ROLE budget_service; GRANT USAGE ON SCHEMA core TO budget_service; GRANT USAGE ON SCHEMA budget TO budget_service; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA budget TO budget_service; GRANT SELECT ON core.users TO budget_service; ``` 2. **API 접근 제어** - 각 서비스별 API 키를 생성하여 적절한 권한 범위 설정 - Core API를 통한 인증 및 권한 검증 ## 성능 최적화 1. **인덱스 전략** - 사용자 ID 기반 인덱스 추가 - 자주 조회되는 필드에 적절한 인덱스 설정 2. **캐싱 전략** - 사용자 세션 및 자주 사용되는 데이터 캐싱 - 서비스별 캐시 무효화 정책 수립 ## 다음 단계 1. 기존 '적자 탈출 가계부' 데이터베이스 스키마 상세 분석 2. 'Subscription Manager'와 'ZELLYY Card'의 요구사항 수집 및 스키마 설계 3. 공통 필드 및 관계 정의 4. 테스트 데이터베이스에서 통합 스키마 검증 5. 마이그레이션 스크립트 작성 및 테스트 ```