Prisma migrate dev 안되는 오류

낭만감자·2024년 11월 16일
0

TIL

목록 보기
3/5
post-thumbnail

참고: stackoverflow

1. 문제

npx prisma migrate dev 명령어를 입력했는데

이 화면에서 멈추는 오류 해결방법입니다.

2. env 파일에 directUrl 추가

DATABASE_URL="postgresql://postgres.{//}.pooler.supabase.com:6543/postgres"
DIRECT_URL = "postgresql://postgres.{//}.pooler.supabase.com:5432/postgres"

기존에는 DATABASE_URL만 등록을 해놓으셨을텐데요.

포트 번호만 5432로 변경해서 DIRECT_URL 을 하나 더 추가해주세요.

3. Schema 파일 수정

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
  directUrl = env("DIRECT_URL")
}

prisma/schema.ts 파일에 다음과같이 directUrl 을 추가해줍니다.

4. 문제의 원인

4-1. database url 과 direct url의 차이

DATABASE_URL: Prisma CLI와 Prisma Client가 기본적으로 사용하는 데이터베이스 연결 문자열.
DIRECT_URL: Prisma Client가 데이터베이스에 직접 연결할 때 사용하는 URL. 주로 로드 밸런서를 우회하거나 특정 포트를 지정해야 할 때 유용.

Prisma는 DATABASE_URL을 통해 CLI에서 마이그레이션, 스키마 업데이트 등을 수행하고, DIRECT_URL을 통해 클라이언트 애플리케이션이 데이터베이스에 더 효율적으로 연결하도록 돕는 방식으로 동작합니다.

4-2. 6543 포트의 제약

Supabase나 로드 밸런서를 사용하는 경우, 기본 연결 설정(DATABASE_URL)에서 제공되는 포트가 로드 밸런서의 포트로 설정되어 있을 가능성이 높습니다. 이 포트는 주로 다음과 같은 제약을 가집니다.

  1. 로드 밸런서의 비효율성: Prisma CLI가 마이그레이션을 수행할 때 연결이 오래 걸리거나, 중간에 멈추는 문제가 발생할 수 있다.
  2. 특정 포트 문제: Supabase는 기본적으로 데이터베이스에 6543 포트를 할당하지만, 클라이언트는 5432 포트를 사용해야 할 때가 있다.

4-3. DIRECT_URL 을 추가했을 때 해결되는 이유

directUrl을 통해 Prisma CLI와 Prisma Client가 데이터베이스에 바로 연결할 수 있는 올바른 포트를 지정할 수 있습니다.

이 경우 CLI 와 클라이언트를 분리하고, 데이터베이스의 기본 포트를 지정해주면
결과적으로 Prisma가 Supabase 로드 밸런서를 우회하고, 직접 데이터베이스에 연결할 수 있게 돼서 마이그레이션이 멈추는 문제가 해결됩니다.

profile
웹 프론트엔드 취준생 🥔

0개의 댓글

관련 채용 정보