npx prisma migrate dev
명령어를 입력했는데
이 화면에서 멈추는 오류 해결방법입니다.
DATABASE_URL="postgresql://postgres.{//}.pooler.supabase.com:6543/postgres"
DIRECT_URL = "postgresql://postgres.{//}.pooler.supabase.com:5432/postgres"
기존에는 DATABASE_URL만 등록을 해놓으셨을텐데요.
포트 번호만 5432로 변경해서 DIRECT_URL 을 하나 더 추가해주세요.
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}
prisma/schema.ts 파일에 다음과같이 directUrl
을 추가해줍니다.
DATABASE_URL
: Prisma CLI와 Prisma Client가 기본적으로 사용하는 데이터베이스 연결 문자열.
DIRECT_URL
: Prisma Client가 데이터베이스에 직접 연결할 때 사용하는 URL. 주로 로드 밸런서를 우회하거나 특정 포트를 지정해야 할 때 유용.
Prisma는 DATABASE_URL
을 통해 CLI에서 마이그레이션, 스키마 업데이트 등을 수행하고, DIRECT_URL
을 통해 클라이언트 애플리케이션이 데이터베이스에 더 효율적으로 연결하도록 돕는 방식으로 동작합니다.
Supabase나 로드 밸런서를 사용하는 경우, 기본 연결 설정(DATABASE_URL)에서 제공되는 포트가 로드 밸런서의 포트로 설정되어 있을 가능성이 높습니다. 이 포트는 주로 다음과 같은 제약을 가집니다.
- 로드 밸런서의 비효율성: Prisma CLI가 마이그레이션을 수행할 때 연결이 오래 걸리거나, 중간에 멈추는 문제가 발생할 수 있다.
- 특정 포트 문제: Supabase는 기본적으로 데이터베이스에 6543 포트를 할당하지만, 클라이언트는 5432 포트를 사용해야 할 때가 있다.
directUrl
을 통해 Prisma CLI와 Prisma Client가 데이터베이스에 바로 연결할 수 있는 올바른 포트를 지정할 수 있습니다.
이 경우 CLI 와 클라이언트를 분리하고, 데이터베이스의 기본 포트를 지정해주면
결과적으로 Prisma가 Supabase 로드 밸런서를 우회하고, 직접 데이터베이스에 연결할 수 있게 돼서 마이그레이션이 멈추는 문제가 해결됩니다.