개발자로 전향중

Vercel 배포시 This Serverless Function has timed out란? 본문

Vercel

Vercel 배포시 This Serverless Function has timed out란?

hovinee 2024. 7. 4. 17:30

배포를 했는데 이런 창을 만났다. 빌드는 잘됐지만 검색해보니 

원인

여러가지 많은 자료를 찾아본 결과, Vercel은 플랫폼을 사용할 때 몇 가지 제한을 적용하는 걸 알았고 Serverless Functions의 실행 시간이 hobby plan인 경우 5초로 pro plan은 15초로 줄었다고 한다.
그래서 시간이 초과가 되면 에러가 발생한거 였고, 해결하기 위해서는 vercel을 pro로 업그레이드 하고 Serverless Functions시간을 늘려야 했다.

참조:https://velog.io/@uuuuooii/Next.js-Vercel-504-GATEWAYTIMEOUT-%EC%97%90%EB%9F%AC%ED%95%B4%EA%B2%B0

 

[Next.js] Vercel 504: GATEWAY_TIMEOUT 에러해결

문제 발생 라는 사이드 프로젝트를 하고 있는데 사이트를 Vercel에서 배포한 후 openAI 통신을 할 때 간헐적으로 504 Gateway Timeout에러가 발생하는 문제가 발생했다. 원인 여러가지 많은 자료를 찾아

velog.io

 

로그를 찾아보니 런타임 시간이 초과된 것 같다.

 

 

Vercel의 Functions를 찾아보면 각 페이지를 서버에서 html을 그려줘야 하는데 그 시간이 소요되는 것이다.(짐작)

그래서 SSR 단점에 서버 부하 이런말이 있었는데 해당 이유인가 싶다.

페이지 소스를 가져와보면 SSG로 빌드가 되는 과정에서 task가 초과된 것이다. 가

 

vercel은 왜 무료로 빌드와 호스팅까지 해줄까? 라는 의문이 있었는데 프로젝트가 커지면서 이유를 찾을 수 있었다. 즉 무료 리소스 할당과정에서 시간이 걸렸음.. 요금제 pro는 15초라 했으니 업그레이드를 하면 해결이 될 것 같다. 아직은 개발단계이기 때문에 배포는 좀 고민해봐야겠다.

 

참고 GPT

  1. 네트워크 지연(Network Latency):
    • Serverless Function이 실행될 클라우드 서버까지의 네트워크 지연이 발생할 수 있습니다. 특히, 지리적으로 먼 위치에 클라우드 서버가 위치해 있는 경우에는 더 많은 시간이 소요될 수 있습니다.
  2. 함수의 복잡도와 작업량:
    • Serverless Function 내에서 수행되는 작업의 양과 복잡성이 많을 경우, 함수가 처리하는 데 시간이 오래 걸릴 수 있습니다. 예를 들어, 데이터베이스 쿼리 실행, 파일 처리, API 호출 등이 이에 해당합니다.
  3. 리소스 할당과 Cold Start:
    • 클라우드 서비스 제공업체는 Serverless Function을 실행할 때 필요한 리소스를 할당합니다. 처음 실행될 때(콜드 스타트)에는 초기화 시간이 추가로 소요될 수 있습니다. 이는 함수가 일시적으로 느려질 수 있는 주요 원인 중 하나입니다.
  4. 비용 계층과 리소스 부족:
    • 클라우드 서비스의 무료 계층이나 사용한 리소스의 한도를 초과할 경우, 함수 실행이 지연될 수 있습니다. 추가적인 리소스를 할당하기 전까지 기다려야 할 수 있습니다.
  5. 디버깅 및 로깅:
    • Serverless Function 내에서 오류가 발생하거나 예외가 발생할 경우, 디버깅 및 로깅을 통해 이를 파악하고 해결하는 데 시간이 소요될 수 있습니다.

해결 방법

Serverless Function이 오랜 시간이 걸린다면, 다음과 같은 접근 방법을 고려할 수 있습니다:

  • 성능 프로파일링: 함수가 어디서 시간이 소요되는지 파악하기 위해 성능 프로파일링 도구를 사용합니다.
  • 비동기 처리: 필요한 경우 비동기 방식으로 작업을 처리하여 다른 작업이 진행될 수 있도록 합니다.
  • 코드 최적화: 함수 내부의 코드를 최적화하여 불필요한 연산을 줄이고, 실행 시간을 단축시킵니다.
  • 리소스 증가: 클라우드 서비스 제공업체에서 제공하는 추가 리소스를 할당받아 성능을 개선합니다.
  • 콜드 스타트 최적화: 콜드 스타트 시간을 줄이기 위해 함수를 자주 실행하거나, Warm-up 기능을 사용하여 미리 함수를 초기화할 수 있습니다.