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

서비스 간 안전한 내부 통신 구성

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에서 멀티 서비스 아키텍처를 구성하며 서비스 간 통신을 안전하게 처리하려는 풀스택/백엔드 개발자에게 바로 적용 가능한 설정 레퍼런스.
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
  2. 인프라 / DevOps·discord-blogDiscord Blog·

    Discord API의 기능별 비용 귀속 시스템

    Discord가 1,700개 이상의 API 엔드포인트와 700개 백그라운드 태스크를 단일 Python 코드베이스로 수백 개 Kubernetes 배포에서 운영하면서 기능별 인프라 비용을 귀속시키는 시스템을 구축했다. 클라우드 제공사가 Kubernetes 배포 단위까지만 비용을 나눠주기 때문에 메시징·스트리밍 등 개별 기능의 실제 비용을 파악하기 어려웠고, CPU 시간 직접 샘플링으로 이 문제를 해결했다.

    #kubernetes#observability#profiling+2