EP14. Supabase Database Schema 관리
보다 복잡한 API를 생성하고 더 많은 데이터를 처리하기 위해 데이터베이스를 다룰 수 있어야 합니다.
푸시 알림을 구현할 예정이며, 그 전에 FCM 토큰을 저장할 DB 테이블과 API를 추가합니다. 이번 EP6에서는 데이터베이스 테이블을 다루는 방법을 학습합니다.
1. Supabase에서 Database Schema를 관리하는 방법
•
서비스 개발/운영에서 중요한 것은 Database의 변경사항 관리입니다.
•
Supabase에서는(사실 다른 많은 프레임워크들에서도) DB 변경사항을 파일(migration 파일)로 관리합니다.
•
이 접근 방식은 데이터베이스 스키마 변경 사항을 체계적으로 관리하고, 개발 및 배포 환경에서 일관성을 유지하며, 팀 협업과 자동화된 배포에 큰 도움이 됩니다
개발 환경에서 DB 마이그레이션 작업 및 테스트 ⇒ 마이그레이션 파일을 운영환경으로 배포
2. Supabase CLI DB 명령어
•
dump: Dumps data or schemas from the remote database
◦
연결된 Public Supabase DB로부터 Schema와 저장된 Data를 모두 가져옴
◦
로컬 개발 환경에서 테스트 데이터를 가져올때 종종 사용
•
pull: Pull schema from the remote database
◦
연결된 Public Supabase DB로부터 Schema를 가져옴
◦
주로 Public Supabase에서 UI로 Schema 변경 후 로컬로 Schema 변경사항을 가져올 때 이용
•
push: Push new migrations to the remote database
◦
로컬의 Schema 변경사항을 public supabase로 전달하여 적용하는 과정
3. Table 생성
푸시 알림을 발송하기 위해 필요한 FCM Token을 저장할 테이블을 생성하겠습니다.
1.
Table Editor > New table
2.
Create a new table
•
id: Primary Key, Auto Increment
•
fcm_token: 유저의 FCM Token
•
user_id: token을 보유한 user_id
•
created_at: row 등록 시점
3.
user의 id와 fcm_tokens의 user_id와 foreign key 설정
•
auth.users 테이블에서 유저가 삭제되면 삭제된 유저의 ID를 기준으로 fcm_tokens 테이블에서 해당 user_id의 토큰을 모두 삭제합니다.
4. 로컬 개발환경으로 Schema 가져오기
Public Supabase에서 UI로 편하게 Schema 작업을 진행했습니다. 작업 내용을 로컬로 가져오겠습니다.
1.
Supabase 로컬 개발 환경에서 아래 명령어를 실행합니다.
supabase db pull
Bash
복사
2.
remote의 변경사항을 가져올 수 있도록 합니다.
3.
migration 파일 확인
supabase 디렉토리 하위에 migrations디렉토리가 추가되며 Schema 변경사항이 sql 파일로 추가됩니다.
앞으로 Schema 변경사항이 생길때마다 sql파일로 히스토리가 관리됩니다.