Supabase 마이그레이션하기
supabase 마이그레이션 하기
Supabase

Supabase는 오픈 소스 백엔드 서비스로, 개발자가 손쉽게 전체 백엔드를 구축할 수 있도록 도와주는 BaaS 입니다.. 기본적으로 Supabase는 PostgreSQL 데이터베이스를 기반으로 하며, 실시간 데이터베이스, 인증, 스토리지, 그리고 RESTful API를 자동으로 생성해 주는 기능을 제공합니다.
주요 기능은 다음과 같습니다.
- 데이터베이스: PostgreSQL을 기반으로 한 확장 가능한 관계형 데이터베이스.
- 실시간 기능: 데이터베이스에서 실시간으로 데이터를 동기화하고 업데이트할 수 있는 기능.
- 인증: 사용자 인증 및 권한 관리 시스템 제공(GitHub, Google, Facebook 등의 외부 로그인 서비스 통합 가능).
- 스토리지: 이미지, 비디오 등의 파일을 저장하고 관리할 수 있는 기능.
- 자동 생성 API: PostgreSQL 스키마를 기반으로 자동으로 RESTful API 및 GraphQL을 생성.
Supabase는 Firebase와 비슷한 기능을 제공해주며, 특히 PostgreSQL과의 통합을 필요로 하는 경우 많은 개발자들이 사용하고 있습니다.
왜 셀프 호스팅을 하게 되었나
현재는 본격적인 백엔드 어플리케이션이 필요하지 않고 단순한 CRUD 기능이 필요할 때 supabase를 활용하고 있습니다.
블로그의 조회수 처리에도 supabase를 활용하였는데요, 간단하게 백엔드를 구성하기에 정말 좋지만 몇 가지 단점이 있습니다.
- 프로젝트 2개까지만 무료입니다.
- 1주 동안 대시보드를 방문하지 않으면 (관리하지 않으면) 프로젝트가 일시중지 됩니다.
모든 프로젝트들을 일주일마다 관리하기도 힘들 뿐더러 혹시나 까먹게 되면 프로젝트가 일시중지되어 다시 풀어주어야 하는등 귀찮음이 있습니다.
따라서 도커를 통해 셀프 호스팅을 하기로 마음먹게 되었습니다.
셀프 호스팅
공식문서에 도커를 통한 셀프 호스팅 방법에 대해 설명되어 있습니다.
이번 포스트에서는 해당 과정에 대해 자세히 다루지 않겠습니다. (단순히 도커 컴포즈 파일을 통해 env만 수정하고 실행하면 되는 간단한 과정입니다.)
Postgresql 마이그레이션 하기
pg_dump로 백업하기
기본적인 셀프 호스팅 supabase가 준비가 되었다면, 이제 내용물을 교체할 시간입니다.
supabase는 내부적으로 postgresql 을 사용하기 때문에 pg_dump와 psql을 사용하여 마이그레이션을 진행할 수 있습니다.

현재 블로그 조회수 테이블은 다음과 같습니다.
해당 데이터를 기존의 supabase 데이터로부터 백업하기 위해서 pg_dump 를 사용하겠습니다.
여기서 사용되는 postgresql의 정보는 supabase의 project settings > database 에서 확인할 수 있습니다.
sudo apt-get install postgresql-15
pg_dump postgresql://[YOUR_USER]:[YOUR-PASSWORD]@[YOUR_HOST]:[YOUR_PORT]/postgres > database-dump.sql정상적으로 된다면 다음으로 넘어가시면 되지만 만약 Ubuntu 버전이 20.04여서 postgresql 15를 설치할 수 없을 경우, 다음과 같은 과정을 통해 설치하신 후 진행하면 됩니다.
- PostgreSQL 공식 저장소 추가
PostgreSQL의 최신 버전은 Ubuntu의 기본 저장소에는 포함되지 않기 때문에 PostgreSQL 공식 저장소를 추가해야 합니다.
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'- PostgreSQL 저장소의 GPG 키 추가
PostgreSQL 패키지의 무결성을 확인하기 위해 GPG 키를 추가합니다.
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -- 패키지 목록 업데이트
PostgreSQL 공식 저장소를 추가한 후, 패키지 목록을 업데이트합니다.
sudo apt-get update- PostgreSQL 15 설치
이제 PostgreSQL 15을 설치할 수 있습니다.
sudo apt-get install postgresql-15psql로 백업 적용하기
정상적으로 백업 데이터가 생성되었다면 database-dump.sql 라는 파일이 생성되었을 것입니다.
이제 이 파일을 통해 백업을 적용하기 위해서는 셀프 호스팅된 postgresql의 도커 컨테이너 내부에서 psql을 실행해야합니다.
docker ps 와 같은 명령어를 통해 해당 컨테이너의 ID를 알아낸 후 백업 파일을 도커 컨테이너로 전송해줍니다.
docker cp /path/to/database-dump.sql [컨테이너ID]:/path/in/container/이후 해당 컨테이너로 접속하여 줍니다.
docker exec -it [컨테이너ID] bash이제 전송된 백업 파일의 위치에서 psql 명령어를 실행해주면 됩니다.
psql -U [YOUR_USER] -d postgres -f database-dump.sql정상적으로 처리되었는지 셀프 호스팅된 supabase의 gui로 접속해보면 다음과 같이 잘 적용된 것을 볼 수 있습니다.

결론
앞서 말한 두 가지 단점 때문에 셀프 호스팅을 하였지만, 셀프 호스팅에도 여러 프로젝트를 관리할 수 없다는 단점이 존재합니다. (orgnization이 없습니다.)
만약 단순히 db를 사용하기 위해서라면 postgresql만 호스팅하고 prisma와 같은 orm을 사용하는게 더 나을 수도 있습니다.
하지만 supabase가 제공하는 다른 강력한 기능들과 내장된 gui는 셀프 호스팅에서도 여전히 제공되기 때문에 편리함을 위해서 앞으로도 사용할 것 같습니다.
레퍼런스
https://supabase.com/docs/guides/self-hosting/docker
https://ironeko.com/posts/creating-a-local-backup-of-a-supabase-database