PawMate 앱(pmdart)의 Supabase 백엔드(DB 마이그레이션 + Edge Functions) 저장소.
앱 코드와 분리해 관리한다.
- 프로젝트 ref:
vyatppuxmpulqtxevfpk(region: ap-northeast-2) - 클라이언트(앱)에는 publishable 키만 사용.
service_role/ JWT Secret 은 절대 포함하지 않음 — Edge Function 시크릿으로만 사용.
supabase/
config.toml # 함수별 verify_jwt 고정 (배포 드리프트 방지)
migrations/ # DB 스키마/뷰/함수 변경 (적용 순서 = 파일명 타임스탬프)
functions/ # Edge Functions (Deno)
_shared/ # 공용 모듈 (CORS, Solapi SMS, JWT/refresh)
- docs/supabase-db.md — DB 전체 레퍼런스 (2026-07-02 라이브 DB 기준): ENUM/테이블 36개(public 33 + app 3)/제약/인덱스/pg_cron 잡, 뷰 6개, RPC 54개(+app 스키마 53개), 트리거 52개, RLS 정책 76개, 컬럼 권한, Storage, Realtime, 마이그레이션 이력 77건
- docs/supabase-api.md — API(Edge Functions) 레퍼런스: 함수 15개 전체의 요청/응답/내부 로직/시크릿/레이트리밋, 커스텀 JWT + refresh 토큰 수명주기, 배포 현황
- docs/refresh-token-flow-design.md — refresh 토큰 설계 문서
아래의 마이그레이션/함수 표는 초기(2026-06-08~10) 분량만 담고 있다. 전체 최신 목록은 위 문서를 볼 것.
| 버전 | 내용 |
|---|---|
| 20260608044442 | signup_user — 회원가입(bcrypt 해싱, service_role 전용) |
| 20260608051112 | login_user RPC + v_post_feed / v_comment_feed 커뮤니티 뷰 |
| 20260608071651 | v_chat_rooms 채팅방 목록 뷰 + chat_messages realtime 발행 |
| 20260608072435 | v_chat_rooms 재정의 (admin_inquiry → '고객센터' 라벨) |
| 20260608095600 | start_direct_chat RPC(1:1 방 find-or-create) + v_pawing / v_pawmate |
| 20260608150932 | media Storage 버킷(public) + 본인 폴더 업로드 RLS |
| 20260608151755 | v_post_feed 에 image_url 추가(게시글 사진) |
| 20260609051500 | 알림 자동 생성 트리거(댓글/지원/지원수락/평가 → notifications) |
| 20260610104641 | 펫 등록 시 user_type → pet_owner 자동 승격 (P0001 게시글 작성 차단 수정) |
| 20260610112605 | 지원 수락 시 나머지 지원자 자동 거절 (tg_applications_on_accept 보강) |
| 20260610120125 | 아이디(username) 비공개화(public_profiles·컬럼권한에서 제거) + login_user 가 username 반환 + 가입 아이디 중복확인 RPC check_username_available |
위 이전(
20260603*) 기반 스키마 마이그레이션은 Supabase 프로젝트에 이미 적용되어 있으며 본 저장소 범위 밖이다.
| 함수 | 설명 | verify_jwt |
|---|---|---|
send-phone-code |
전화 인증코드 발급(6자리·5분) + Solapi SMS | false |
verify-phone-code |
인증코드 검증 | false |
signup |
회원가입(인증 완료 번호만) → signup_user RPC |
false |
login |
아이디/비번 로그인 → 커스텀 HS256 JWT 발급 | false |
SOLAPI_API_KEY,SOLAPI_API_SECRET,SOLAPI_SENDER— SMS 발송JWT_SECRET— Supabase 프로젝트의 JWT Secret (login 토큰 서명/검증용)
핵심 불변식(업체 소식 강제·자기초대 차단·팔로우 얼굴 분리·채팅 삭제 권한·retention
파기 항목·공유 함수 재정의 회귀)을 pgTAP 으로 검증한다. 각 테스트는
begin … rollback 자급자족(시드 포함)이라 어느 DB 에 돌려도 데이터가 남지 않는다.
# 로컬(운영 DB 대상 — 전부 롤백이라 안전) : scripts/backup.env 의 연결문자열 사용
./scripts/run_db_tests.sh "$SUPABASE_DB_URL"- CI:
.github/workflows/db-tests.yml— supabase/postgres 컨테이너에 스키마 스냅샷(supabase/schema/schema.sql)을 복원해 실행. 베이스 스키마가 마이그레이션 밖에 있는 구조라 리플레이 대신 스냅샷을 쓴다. - 스냅샷 갱신: 스키마 변경 마이그레이션 적용 후
./scripts/dump_schema.sh실행해 함께 커밋(안 하면 CI 가 구스키마로 돈다).
# 마이그레이션
supabase db push
# 함수
supabase functions deploy send-phone-code --no-verify-jwt
supabase functions deploy verify-phone-code --no-verify-jwt
supabase functions deploy signup --no-verify-jwt
supabase functions deploy login --no-verify-jwtSupabase PostgreSQL 스키마 마이그레이션(0001~0016)을 각각 Markdown으로 정리한 문서입니다.
실제 실행 파일은 supabase/migrations/*.sql 에 있으며, 이 문서들은 각 마이그레이션의
목적·배경·핵심 변경·전체 SQL·주의사항을 담고 있어 팀 문서·산출물 제출 등에 활용할 수 있습니다.
0001 → 0002 → 0003 → 0004 → 0005 (초기 스키마 세트업)
↓
0006 → 0007 → 0008 (보안 린트 · 전화 인증 · N:M 보호자)
↓
0009 → 0010 → 0011 → 0012 → 0013 (정합성 보강 · 오류 수정 · 자동 승계 · 자유글 · 입양 이전)
↓
0014 → 0015 → 0016 (탈퇴자 표시 · 푸시 파이프라인 · 하트 리네임)
| 파일 | 제목 | 카테고리 |
|---|---|---|
| 0001 | 확장·헬퍼 함수 | 초기 세트업 |
| 0002 | 테이블·제약 (26 tables) | 초기 세트업 |
| 0003 | 인덱스 전략 | 초기 세트업 |
| 0004 | 트리거·함수 (37 triggers) | 초기 세트업 |
| 0005 | RLS 정책·뷰 | 초기 세트업 |
| 0006 | 보안 린트 보정 | 하드닝 |
| 0007 | 전화 인증 전환 | 기능 변경 |
| 0008 | 반려동물 N:M 보호자 | 기능 변경 |
| 0009 | 지원/약속 정합성 보강 | 정합성 |
| 0010 | applications.status CHECK 보정 | 버그 수정 |
| 0011 | owner 탈퇴 시 자동 승계 | 정책 |
| 0012 | 자유 게시글 지원 차단 | 정책 |
| 0013 | 입양 자동 이전 | 기능 |
| 0014 | 탈퇴자 표시 + unread 보정 | 하드닝 |
| 0015 | 푸시 알림 파이프라인 | 인프라 |
| 0016 | post_likes → post_hearts | 리네임 |
- 테이블 29개 (전 테이블 RLS on)
- 함수 53개 (헬퍼·트리거·RPC)
- 트리거 43개
- 인덱스 58개
- 정책 77개