Vercel의 Service Bindings는 멀티 서비스 배포에서 서비스 간 안전한 내부 통신을 자동화한다. 한 서비스가 다른 서비스에 바인딩을 선언하면 Vercel이 환경 변수 주입, 내부 라우팅, TLS 암호화를 투명하게 처리해 공개 인터넷을 거치지 않고 HTTPS 통신이 가능하다.
핵심 포인트- 바인딩 선언 한 줄로 Vercel이 환경 변수를 자동 주입하고 내부 라우팅과 TLS를 설정한다.
- Next.js + FastAPI처럼 이질적인 프레임워크 간 멀티 서비스 구성을 vercel.json의 bindings 필드로 선언적으로 정의한다.
- 요청이 Vercel 내부 네트워크의 라우팅 레이어를 통해 전달되어 수동 인증서 설정 없이 HTTPS가 성립된다.
- 명시적으로 공개 rewrite를 설정하지 않는 한 바인딩 서비스는 외부에서 기본 격리된다.
- 서비스 간 요청은 observability 대시보드에서 서비스명과 요청 시간으로 추적 가능하다.
상세 정리- 배경: 멀티 서비스 배포에서 서비스 간 통신에 공개 URL을 사용하면 인증, TLS 관리, 보안 설정이 복잡해진다.
- 바인딩 선언: vercel.json의 services 하위 bindings 배열에 type(service), service(대상 서비스명), format(url), env(환경 변수명) 필드를 선언한다.
- 환경 변수 자동 주입: Vercel이 바인딩을 분석해 프론트엔드에 BACKEND_INTERNAL_URL 같은 환경 변수를 자동으로 주입한다.
- 내부 라우팅: 해당 URL로 요청하면 Vercel 내부 네트워크의 라우팅 레이어가 대상 서비스로 전달, 공개 인터넷을 우회한다.
- TLS 자동 처리: 내부 통신임에도 TLS 신뢰가 자동 확립되어 fetch()에서 별도 인증서 설정 없이 HTTPS 사용 가능하다.
- 프론트엔드 코드: TypeScript에서 fetch(new URL("/users", process.env.BACKEND_INTERNAL_URL)) 형태로 일반 fetch API를 그대로 사용한다.
- 백엔드 코드: FastAPI 등 백엔드는 일반 엔드포인트 정의 그대로 — Service Bindings를 위한 코드 변경이 전혀 필요 없다.
- 외부 격리: 서비스는 public rewrite 또는 private bindings를 명시적으로 설정해야만 외부 접근이 허용된다.
- 과금 모델: 서비스 간 요청은 Service Requests + Fast Origin Transfer로 청구, CDN 및 Fast Data Transfer 비용은 제외된다.
왜 읽나Vercel에서 멀티 서비스 아키텍처를 구성하며 서비스 간 통신을 안전하게 처리하려는 풀스택/백엔드 개발자에게 바로 적용 가능한 설정 레퍼런스.