[Next.js + Prisma] 빌드 오류: Timed out fetching a new connection from the connection pool.

마리 Mari·2024년 8월 26일

문제

포트폴리오 사이트의 8월 정기배포를 하던 중에 빌드 오류가 발생했다.
prisma 부분에서 timeout 오류가 발생하길래 일시적인 오류라 생각하여 redeploy를 2번 정도 더 해보았다. 그러나 여전히 동일한 오류가 발생했다.

Timed out fetching a new connection from the connection pool. More info: http://pris.ly/d/connection-pool (Current connection pool timeout: 10, connection limit: 3)

로컬에서 npm run build를 돌렸을 때는 잘 빌드되었는데, vercel 환경에서 배포할 때만 저 에러가 나서 당황스러웠다.



결론

pool_timeout 증가 or 비활성화

  • pool timeout 증가시키기
// prisma/schema.prisma
datasource db {
  provider  = "postgresql"
  url       = "postgresql://myurlblahblah?pool_timeout=40"
}
  • pool timeout 비활성화 시키기
// prisma/schema.prisma
datasource db {
  provider  = "postgresql"
  url       = "postgresql://myurlblahblah?pool_timeout=0"
}


해결 과정

1. 에러 메세지 확인

우선 첫번째로 에러 메세지에서 알려준 prisma document 웹사이트를 확인했다.
https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool

에러 해결에 관한 내용보다는 connection_pool 자체에 대한 설명만 있어 직접적인 도움은 되지 않았다.

그래도 connection_pool의 크기를 세팅하는 방법이 나와있어서, 문서에 나온 방법으로 connection_limit의 크기를 키워봤다.

// prisma/schema.prisma
datasource db {
  provider  = "postgresql"
  url       = env("POSTGRES_PRISMA_URL")
  directUrl = env("POSTGRES_URL_NON_POOLING")
}

// .env
POSTGRES_PRISMA_URL="postgresql://myurlblahblah?connection_limit=5"

에러 메세지에서 connection_limit에 관한 이야기가 나왔기에, limit을 키우면 정상적으로 빌드 되지 않을까하는 생각에 변경해보았다.

하지만 슬프게도 에러는 해결되지 않았다.



2. Github Issue 확인

8월 정기 배포에 중요한 업데이트가 많았기 때문에, 여기서 포기할 수 없었다. 분명 나와 동일한 오류를 마주한 사람이 있을 것이다... 그런 확신을 갖고 prisma의 github repository에 들어가 issue 게시판을 살펴보았다.

운 좋게도 나와 동일한 오류의 issue를 찾을 수 있었다.

크리스 씨의 조언에 따라 POSTGRES_URL에 pool_timeout=0을 추가하여 pool timeout 기능을 비활성화 해보았다.
(그나저나, 크리스씨가 올린 이슈인데 크리스씨가 해결하셨다..)

pool timeout을 비활성화 하니 정상적으로 빌드가 되었다. 야호 o(^.^o)(o^.^)o
가능하면 비활성화 말고 크기를 키우고 싶었는데, '배포만 하고 자야지...' 하다가 벌써 새벽 2시인 상황이어서, 마음이 급해 그냥 비활성화 하였다.

다음 번에 수정해야지...

profile
우리 블로그 정상영업합니다.

0개의 댓글