3.8 KiB
3.8 KiB
ZELLYY 서비스 데이터베이스 통합 계획
개요
이 문서는 ZELLYY Core와 각 서비스(적자 탈출 가계부, Subscription Manager, ZELLYY Card)의 데이터베이스 통합 방안을 설명합니다.
통합 원칙
- 단일 Supabase 인스턴스 - 모든 서비스는 하나의 Supabase 인스턴스를 공유
- 스키마 분리 - 서비스별로 독립된 스키마 사용
- 공통 테이블 공유 - 사용자 정보 등 공통 데이터는 Core 스키마에서 관리
- 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를 외래 키로 참조합니다:
-- 예: 적자 탈출 가계부의 계좌 테이블
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 정책을 적용합니다:
-- 예: 계좌 테이블의 RLS 정책
CREATE POLICY "사용자 본인의 계좌만 접근 가능"
ON budget.accounts
FOR ALL
USING (auth.uid() = user_id);
데이터 마이그레이션 계획
기존 '적자 탈출 가계부'의 데이터베이스를 통합 스키마로 마이그레이션하는 단계:
- 스키마 생성:
budget스키마 생성 - 테이블 이동: 기존 테이블을 새 스키마로 이동
- 외래 키 업데이트:
core.users테이블을 참조하도록 외래 키 수정 - RLS 정책 적용: 모든 테이블에 적절한 RLS 정책 설정
- 데이터 검증: 마이그레이션 후 데이터 무결성 확인
서비스별 데이터 접근
각 서비스는 자신의 스키마와 core 스키마에만 접근할 수 있도록 설계:
- 서비스별 데이터베이스 역할 생성
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;
- API 접근 제어
- 각 서비스별 API 키를 생성하여 적절한 권한 범위 설정
- Core API를 통한 인증 및 권한 검증
성능 최적화
-
인덱스 전략
- 사용자 ID 기반 인덱스 추가
- 자주 조회되는 필드에 적절한 인덱스 설정
-
캐싱 전략
- 사용자 세션 및 자주 사용되는 데이터 캐싱
- 서비스별 캐시 무효화 정책 수립
다음 단계
- 기존 '적자 탈출 가계부' 데이터베이스 스키마 상세 분석
- 'Subscription Manager'와 'ZELLYY Card'의 요구사항 수집 및 스키마 설계
- 공통 필드 및 관계 정의
- 테스트 데이터베이스에서 통합 스키마 검증
- 마이그레이션 스크립트 작성 및 테스트