사이드 프로젝트 하면서 Prisma + MySQL 조합으로 구현하다가, 배포 이슈 때문에 Supabase로 넘어와서 PostgreSQL 사용해봤다.
지금 시작한 사이드 프로젝트에서도 이 조합으로 개발중
간단히 로그인 → 프로젝트 생성 가능
(무료 버전이면 2개까지만 만들 수 있고, 3개부터는 기존 프로젝트를 삭제하거나 중지해야 함)
나는 안 쓰는 거 중지시키고 새 프로젝트 생성해서 쓰는 중 👇
npm install @prisma/client
npx prisma init
위 명령어로 Prisma를 초기화하면 schema.prisma
파일이 생성되고, DB 종류도 PostgreSQL로 자동 세팅된다.
Supabase 라이브러리도 설치해주자
npm install @supabase/supabase-js
Supabase 연결을 위해 .env
파일에 URL을 설정해야 한다.
URL은 Supabase 페이지 상단의 Connect에서 찾을 수 있다.
Transaction pooler (pgbouncer) 와 Session pooler를 사용
DATABASE_URL="postgresql://postgres.<project-id>:<password>@<host>.supabase.com:6543/postgres?pgbouncer=true"
DIRECT_URL="postgresql://postgres.<project-id>:<password>@<host>.supabase.com:5432/postgres"
📌 DATABASE_URL
은 트랜잭션 풀링(pgbouncer)용,
📌 DIRECT_URL
은 직접 연결용 (migrate 등 내부 작업에 필요)
처음엔 DATABASE_URL
에 Direct connection만 지정했는데 오류 발생
그래서 Transaction pooler로 바꾸니까 오류는 안 나는데 아무 반응이 없음 ㅠ
여기저기 구글링하다가 이 블로그에서 해결방법을 찾았다!!
(역시 구글링최고)
GPT한테 물어보니까 요렇게 정리해줌:
- Supabase는 기본적으로 트랜잭션 풀링(
pgbouncer
)을 사용해서 확장성 있게 운영함- 근데 Prisma는
pgbouncer
모드에서 DDL 작업이 안됨- 그래서 직접 연결용으로
directUrl
도 같이 써야 함
그래서 schema.prisma
도 아래와 같이 지정해야 한다 👇
datasource db {
provider = "postgresql"
url = env("DATABASE_URL") // pgbouncer (운영용)
directUrl = env("DIRECT_URL") // 직접 연결 (migrate 등 내부 사용)
}
npx prisma migrate dev --name init
위 명령어로 정상 연결 여부 확인 가능하고,
npx prisma studio
로 테이블 구조와 데이터도 바로 확인 가능하다.
Supabase에서도 확인 가능!
여기까지 정리 완료!
Supabase에서 소셜 로그인도 지원한다고 하니까, 그 기능도 다음에 써봐야지 :)