Serverless 컴퓨팅은 서버를 관리하지 않고 코드를 실행할 수 있게 해줍니다. 함수를 작성하고 배포하면 플랫폼이 스케일링, 가용성, 인프라를 처리합니다. 2026년, 세 가지 플랫폼이 serverless 분야를 지배하고 있습니다: AWS Lambda, Vercel Serverless Functions, Cloudflare Workers. 각각 다른 강점과 트레이드오프가 있습니다.
이 글에서는 실제 예제, 성능 고려사항, 가격 분석을 통해 비교합니다.
Serverless 작동 방식
함수를 배포합니다. 요청이 도착하면 플랫폼은:
- 실행 환경을 시작합니다 (또는 이미 워밍된 환경을 재사용)
- 함수를 실행합니다
- 응답을 반환합니다
- 유휴 시 제로로 스케일합니다 (유휴 시간에 대해 비용을 지불하지 않음)
플랫폼 개요
AWS Lambda
최초의 serverless 플랫폼 (2014년 출시). 가장 성숙하고 기능이 풍부하며, AWS 생태계와의 깊은 통합을 제공합니다.
// AWS Lambda handler export const handler = async (event) => { const body = JSON.parse(event.body); const result = await processData(body); return { statusCode: 200, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(result), }; };
Vercel Serverless Functions
Next.js와 프론트엔드 배포 워크플로우에 긴밀하게 통합되어 있습니다. 함수는 프론트엔드와 함께 제로 구성으로 배포됩니다.
// app/api/hello/route.ts (Next.js App Router) import { NextResponse } from 'next/server'; export async function GET(request: Request) { const { searchParams } = new URL(request.url); const name = searchParams.get('name') || 'World'; return NextResponse.json({ message: `Hello, ${name}!` }); }
Cloudflare Workers
전 세계 300개 이상의 도시에 있는 Cloudflare 엣지 네트워크에서 실행됩니다. Node.js 대신 V8 엔진(Chrome과 동일)을 사용하여 매우 빠른 콜드 스타트를 제공합니다.
// Cloudflare Worker export default { async fetch(request, env) { const url = new URL(request.url); const name = url.searchParams.get('name') || 'World'; return new Response( JSON.stringify({ message: `Hello, ${name}!` }), { headers: { 'Content-Type': 'application/json' } } ); }, };
기능 비교
| 기능 | AWS Lambda | Vercel Functions | Cloudflare Workers |
|---|---|---|---|
| 런타임 | Node.js, Python, Go, Rust, Java, .NET | Node.js, Python, Go, Ruby | V8 Isolates (JS/TS, Rust via WASM) |
| 최대 실행 시간 | 15분 | 60초 (Hobby), 300초 (Pro) | 30초 (무료), 15분 (유료) |
| 메모리 | 128MB - 10GB | 1024MB - 3008MB | 128MB |
| 콜드 스타트 | 100-500ms | 100-300ms | < 5ms |
| 배포 위치 | 단일 리전 (또는 노력을 기울이면 멀티) | 다중 리전 | 300+ 엣지 위치 |
| 최대 페이로드 | 6MB (동기), 256KB (비동기) | 4.5MB | 100MB |
| 내장 스토리지 | 없음 (DynamoDB, S3 사용) | 없음 (외부 DB 사용) | KV, D1 (SQLite), R2 (S3 호환) |
| 가격 모델 | 요청당 + 실행 시간 | 플랜에 포함 | 요청당 + 실행 시간 |
| 무료 티어 | 월 1M 요청 | 월 100K (Hobby) | 일 100K 요청 |
콜드 스타트
콜드 스타트는 새 함수 인스턴스를 초기화하는 데 걸리는 시간입니다. 이것이 serverless에서 가장 큰 성능 관심사입니다.
| 플랫폼 | 일반적인 콜드 스타트 | 이유 |
|---|---|---|
| Cloudflare Workers | < 5ms | V8 격리, 전체 런타임 불필요 |
| Vercel Functions | 100-300ms | 엣지 또는 리전의 Node.js 런타임 |
| AWS Lambda | 100-500ms | 전체 컨테이너 초기화 |
| AWS Lambda (Java) | 1-5초 | JVM 시작 오버헤드 |
Cloudflare Workers는 컨테이너 대신 V8 격리를 사용하기 때문에 콜드 스타트에서 압도적으로 승리합니다.
가격 비교
무료 티어
| 플랫폼 | 무료 요청 | 무료 컴퓨트 |
|---|---|---|
| AWS Lambda | 월 1M | 400,000 GB-초 |
| Vercel | 월 100K | Hobby 플랜에 포함 |
| Cloudflare Workers | 일 100K (월 약 3M) | 호출당 10ms CPU |
대규모 (월 10M 요청, 평균 실행 시간 50ms)
| 플랫폼 | 예상 월 비용 |
|---|---|
| AWS Lambda | ~$2.50 (요청) + |
| Vercel | 월 $20 (Pro 플랜, 함수 포함) |
| Cloudflare Workers | 월 $5 (유료 플랜, 10M 요청 포함) |
대부분의 사용 사례에서 Cloudflare Workers가 가장 저렴합니다. Vercel의 가격은 단순하지만 전체 플랫폼(호스팅, CDN, 분석)을 포함합니다. AWS Lambda는 가장 세분화된 가격 체계를 가지고 있습니다.
실제 사용 사례
AWS Lambda: 최적 용도
- 복잡한 백엔드 워크플로우 - step functions, 이벤트 기반 아키텍처
- AWS 서비스와의 통합 - S3 트리거, DynamoDB 스트림, SQS 큐
- 장시간 실행 작업 - 최대 15분 실행 시간
- 다중 언어 팀 - 가장 넓은 범위의 런타임 지원
Vercel Functions: 최적 용도
- Next.js 애플리케이션 - 제로 구성 API 라우트
- 프론트엔드 우선 팀 - 프론트엔드와 백엔드를 함께 배포
- 빠른 프로토타이핑 - git push로 배포
- Jamstack 아키텍처 - 정적 프론트엔드 + serverless API
// app/api/subscribe/route.ts import { NextResponse } from 'next/server'; export async function POST(request: Request) { const { email } = await request.json(); // Validate if (!email || !email.includes('@')) { return NextResponse.json( { error: 'Invalid email' }, { status: 400 } ); } // Save to database await db.subscribers.create({ email }); return NextResponse.json({ success: true }); }
Cloudflare Workers: 최적 용도
- 저지연 API - 전 세계 300개 이상의 위치에서 코드 실행
- 엣지 컴퓨팅 - 응답 변환, A/B 테스트, 개인화
- 대용량 API - 관대한 무료 티어와 함께 대규모에서 가장 저렴
- 글로벌 애플리케이션 - KV와 D1로 사용자 가까이에 데이터 배치
// Edge-side A/B test export default { async fetch(request, env) { const url = new URL(request.url); // Assign user to variant const cookie = request.headers.get('Cookie') || ''; let variant = cookie.includes('ab=b') ? 'b' : 'a'; if (!cookie.includes('ab=')) { variant = Math.random() < 0.5 ? 'a' : 'b'; } // Fetch the appropriate version const response = await fetch(`${url.origin}/variants/${variant}`); const newResponse = new Response(response.body, response); // Set cookie for consistent experience newResponse.headers.set('Set-Cookie', `ab=${variant}; Path=/; Max-Age=86400`); return newResponse; }, };
언제 어떤 것을 선택할까
AWS Lambda를 선택하세요:
- 이미 AWS 생태계에 투자했다면
- 장시간 실행 함수가 필요하다면 (최대 15분)
- 복잡한 이벤트 기반 아키텍처가 필요하다면
- JavaScript 이외의 런타임이 필요하다면 (Python, Go, Rust, Java)
Vercel Functions를 선택하세요:
- Next.js 또는 프론트엔드 프레임워크로 개발 중이라면
- 가장 간단한 배포 경험을 원한다면 (git push)
- 팀이 프론트엔드에 집중한다면
- 호스팅 + 함수 + CDN을 하나의 플랫폼에서 원한다면
Cloudflare Workers를 선택하세요:
- 전 세계적으로 가능한 가장 낮은 지연을 필요로 한다면
- 대규모에서 가장 저렴한 옵션을 원한다면
- 엣지 컴퓨팅 기능이 필요하다면
- 콜드 스타트 시간이 사용 사례에 중요하다면
결합할 수 있을까?
물론입니다. 일반적인 아키텍처:
- Cloudflare Workers: 엣지 라우팅, 캐싱, 보안
- Vercel Functions: 프론트엔드 API 라우트, SSR
- AWS Lambda: 무거운 백엔드 처리, 예약 작업, 이벤트 파이프라인
결론
Serverless는 상당히 성숙해졌습니다. 2026년, AWS Lambda, Vercel Functions, Cloudflare Workers 사이의 선택은 여러분의 스택과 우선순위에 달려 있습니다:
- 가장 간단한 개발자 경험: Vercel
- 가장 강력하고 유연한: AWS Lambda
- 최고의 성능과 가격: Cloudflare Workers
세 가지 모두 프로덕션에 준비되어 있고 실전 검증되었습니다. 현재 스택에 맞는 것으로 시작하고, 필요가 커짐에 따라 확장하세요.