Prisma + Supabase 조합

혜연·2025년 6월 19일
0

Next.js

목록 보기
20/20
post-thumbnail

사이드 프로젝트 하면서 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 연결

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에서 소셜 로그인도 지원한다고 하니까, 그 기능도 다음에 써봐야지 :)

0개의 댓글