Vercel을 실제로 서비스 운영에 사용하다 보면 자연스럽게 그 인프라가 어떻게 돌아가는지 궁금해집니다. 처음엔 단순해 보였지만, 깊이 들여다볼수록 내부 동작이 복잡한 면이 있죠. 오늘은 이 복잡한 Vercel 인프라 구조를 최대한 쉽고 편안하게 설명해보려 합니다.

먼저 이런 의문이 듭니다. 사용자가 브라우저에서 주소를 입력하고 엔터를 눌렀을 때, 그 요청은 정확히 어떤 경로를 거쳐 우리에게 오는 걸까요? 하나씩 차근차근 살펴보겠습니다.

우리가 운영하는 사이트가 shop.wisely.store라고 할 때, 브라우저가 가장 먼저 하는 일은 이 주소의 IP를 찾는 것입니다. 이는 마치 택배를 보내기 위해 택배회사에 전화해서 수령인의 주소를 문의하는 것과 비슷합니다. 이 역할을 하는 것이 DNS이며, 우리 서비스는 AWS의 Route53이라는 DNS를 사용합니다. Route53에 문의하면 현재 shop.wisely.store는 CloudFront라는 서비스로 연결되어 있다고 알려줍니다.

CloudFront는 전 세계 곳곳에 위치한 CDN 서비스로, 우리 집 근처의 지역 물류창고와 같습니다. CloudFront는 주로 캐시를 제공하지만, 우리는 보안 등의 이유로 캐시를 비활성화했습니다. 따라서 모든 요청은 CloudFront를 거쳐 그대로 Vercel로 전달됩니다.

Vercel은 독특한 방식으로 요청을 처리합니다. 전 세계에 분산된 Edge 서버들(엣지 POP)을 운영하는데, 이들은 모두 76.76.21.21이라는 동일한 IP 주소를 사용합니다. 이렇게 모든 Edge 서버가 같은 IP를 공유하는 방식을 Anycast라고 합니다. 한국에서 접속하면 서울의 Edge 서버로, 미국에서 접속하면 미국의 Edge 서버로 연결됩니다. 이는 마치 편의점 체인점들이 하나의 대표 전화번호를 공유하고, 가장 가까운 지점에서 전화를 받는 것과 같습니다.

Vercel의 Edge POP는 세 가지 주요 기능을 수행합니다. 첫째는 정적 파일 캐시, 둘째는 Edge Function 실행, 셋째는 서버리스 함수(Serverless Function)를 실행하기 위한 Compute Region으로의 요청 전달입니다.

사용자의 요청이 들어오면 Edge POP는 먼저 ‘L1 Edge Cache’라는 진열대를 확인합니다. 원하는 상품(정적 파일, HTML 등)이 진열대에 있다면 즉시 제공하는데, 이를 Edge Cache Hit라고 합니다. 이 경우 대부분 1~5ms 내에 처리가 완료됩니다.

진열대에 원하는 것이 없다면 과정이 좀 더 복잡해집니다. Edge 서버는 ‘Edge Function’이라는 경량 스크립트를 실행할 수 있습니다. Edge Function은 쿠키 확인을 통한 국가별 페이지 리다이렉트나 헤더 수정 같은 간단한 작업을 수행합니다. 가볍고 빠르지만, Node의 모든 기능을 지원하지는 않습니다.

Edge Function으로 해결할 수 없는 경우, Edge 서버는 더 복잡한 처리가 가능한 서버리스 함수(Serverless Function)로 요청을 전달합니다. 서버리스 함수는 Node.js를 완벽히 지원하는 환경으로, DB 통신이나 복잡한 비즈니스 로직 처리에 사용됩니다. 이 함수들은 Edge 서버 뒤에 있는 대규모 데이터센터(Compute Region)에서 실행되며, 한국 서비스의 경우 주로 서울 리전에서 동작합니다.

서버리스 함수는 내부적으로 Firecracker라는 마이크로 VM을 사용합니다. 이는 매우 빠르게 부팅되는 경량 가상 머신입니다. 요청이 증가하면 마치 식당에서 접이식 의자를 펴듯이 신속하게 마이크로 VM을 확장해 처리 능력을 높입니다. Vercel은 이를 ‘Fluid Compute’라고 부릅니다. 트래픽이 늘면 즉시 처리 용량을 늘리고, 줄면 바로 축소해 비용을 절감하는 방식입니다. 이로 인해 급격한 트래픽 증가에도 잘 대응하고, 평시에는 비용 효율성을 유지할 수 있습니다.

마이크로 VM은 기존 서버리스 환경과 달리 하나의 인스턴스가 여러 요청을 동시에 처리할 수 있습니다. 기존의 서버리스는 요청당 하나의 VM을 생성했지만, Fluid Compute는 VM을 오래 유지하고 재사용하면서 효율적으로 처리합니다. 이는 마치 이미 조리된 요리를 버리지 않고 따뜻하게 유지하며 새 주문이 오면 즉시 제공하는 것과 같습니다. 덕분에 VM 부팅(콜드 스타트)을 줄이고 처리 효율을 높입니다.