pile·
인프라 / DevOps·vercel-blogVercel Blog·

배포별 환경변수 런타임 분리로 Vercel 함수 배포 400~600ms 단축

Vercel이 배포 속도를 평균 400~600ms 줄인 함수 캐싱 개선을 자동 적용하기 시작했다. 핵심은 배포별 고유 환경변수(`VERCEL_DEPLOYMENT_ID` 등)가 함수 페이로드에 포함돼 코드가 같아도 매번 다른 해시가 만들어지던 문제를 해결한 것이다. 이 변수들을 런타임 주입으로 바꿔 코드가 동일하면 업로드 단계 자체를 건너뛴다.

핵심 포인트
  • 기존 문제: `VERCEL_DEPLOYMENT_ID` 같은 배포별 환경변수가 함수 페이로드에 포함돼 동일 코드도 배포마다 다른 해시를 갖게 됐다 — 캐시 미스가 항상 발생하는 구조.
  • 해결책: 이 변수들을 함수 빌드 시점이 아닌 런타임에 주입해 코드 자체의 내용으로만 해시를 계산한다.
  • 결과: 코드 변경이 없는 함수는 업로드 단계를 완전히 건너뜀 — 평균 400~600ms, 대규모 빌드에서 최대 5초 단축.
  • 적용 대상: Vercel Functions(프레임워크 미사용), Python/Go/Ruby/Rust 프로젝트. Next.js는 곧 적용 예정.
  • 별도 설정 불필요 — 자동 적용.
상세 정리
  • 근본 원인: CI/CD에서 배포별 고유 식별자를 환경변수로 넣는 건 일반적인 패턴이다. 그런데 Vercel은 이 변수를 함수 번들 빌드 시 포함시켜 페이로드 해시에 반영했다. 결과적으로 코드 변경 0이어도 새 배포마다 해시가 달라지고 항상 전체 업로드가 발생했다.
  • 변경 포인트: `VERCEL_DEPLOYMENT_ID` 등 배포별 변수를 함수 페이로드에서 분리 → 런타임 주입 방식으로 전환. 빌드 단계의 페이로드는 이제 실제 코드·의존성만 반영한다.
  • 캐싱 효과: 동일 코드의 재배포(예: 설정만 바꾸거나 다른 서비스만 변경된 모노레포 배포)에서 함수 업로드 단계 자체가 스킵된다.
  • 성능 수치: 일반 프로젝트 평균 400~600ms 단축, 함수가 많은 대규모 빌드에서 최대 5초 단축 측정.
  • 적용 범위: Vercel Functions(프레임워크 없는 직접 함수), Python/Go/Ruby/Rust 런타임. Next.js 지원은 별도 릴리즈 예정.
  • 엣지 케이스: 코드 자체가 변경됐으면 당연히 캐시 히트 없음 — 캐싱은 코드 동일성 기반으로만 작동.
왜 읽나Vercel에 Python/Go/Ruby/Rust 함수를 반복 배포하는 팀이 별도 설정 없이 얻을 수 있는 배포 속도 개선 사례.
vercel-blog
Vercel Blog 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 인프라 / DevOps·vercel-blogVercel Blog·

    Vercel CLI 드라이런 배포로 실제 배포 전 구성 미리 확인하기

    Vercel CLI v54.17.2부터 vercel deploy --dry 명령으로 실제 파일 업로드 없이 배포 구성을 미리 검사할 수 있다. 프레임워크 감지 결과, 포함/제외 파일 목록, 디렉터리 크기 분포, 콘텐츠 해시까지 사전에 확인하고 나서 배포를 결정할 수 있어 의도치 않은 배포 실패를 예방한다.

    #deployment#ci-cd#vercel-cli+1