spinny:~/writing $ vim serverless-aws-lambda-vercel-cloudflare.md
1~2Serverless 컴퓨팅은 서버를 관리하지 않고 코드를 실행할 수 있게 해줍니다. 함수를 작성하고 배포하면 플랫폼이 스케일링, 가용성, 인프라를 처리합니다. 2026년, 세 가지 플랫폼이 serverless 분야를 지배하고 있습니다: **AWS Lambda**, **Vercel Serverless Functions**, **Cloudflare Workers**. 각각 다른 강점과 트레이드오프가 있습니다.3~4이 글에서는 실제 예제, 성능 고려사항, 가격 분석을 통해 비교합니다.5~6## Serverless 작동 방식7~8```mermaid9graph LR10 User -- "HTTP Request" --> Gateway[API Gateway / Edge]11 Gateway -- "Invoke" --> Function[Serverless Function]12 Function -- "Response" --> User13 Function -- "Read/Write" --> DB[(Database)]14```15~16함수를 배포합니다. 요청이 도착하면 플랫폼은:171. 실행 환경을 시작합니다 (또는 이미 워밍된 환경을 재사용)182. 함수를 실행합니다193. 응답을 반환합니다204. 유휴 시 제로로 스케일합니다 (유휴 시간에 대해 비용을 지불하지 않음)21~22## 플랫폼 개요23~24### AWS Lambda25~26최초의 serverless 플랫폼 (2014년 출시). 가장 성숙하고 기능이 풍부하며, AWS 생태계와의 깊은 통합을 제공합니다.27~28```javascript29// AWS Lambda handler30export const handler = async (event) => {31 const body = JSON.parse(event.body);32~33 const result = await processData(body);34~35 return {36 statusCode: 200,37 headers: { 'Content-Type': 'application/json' },38 body: JSON.stringify(result),39 };40};41```42~43### Vercel Serverless Functions44~45Next.js와 프론트엔드 배포 워크플로우에 긴밀하게 통합되어 있습니다. 함수는 프론트엔드와 함께 제로 구성으로 배포됩니다.46~47```typescript48// app/api/hello/route.ts (Next.js App Router)49import { NextResponse } from 'next/server';50~51export async function GET(request: Request) {52 const { searchParams } = new URL(request.url);53 const name = searchParams.get('name') || 'World';54~55 return NextResponse.json({ message: `Hello, ${name}!` });56}57```58~59### Cloudflare Workers60~61전 세계 300개 이상의 도시에 있는 Cloudflare 엣지 네트워크에서 실행됩니다. Node.js 대신 V8 엔진(Chrome과 동일)을 사용하여 매우 빠른 콜드 스타트를 제공합니다.62~63```javascript64// Cloudflare Worker65export default {66 async fetch(request, env) {67 const url = new URL(request.url);68 const name = url.searchParams.get('name') || 'World';69~70 return new Response(71 JSON.stringify({ message: `Hello, ${name}!` }),72 { headers: { 'Content-Type': 'application/json' } }73 );74 },75};76```77~78## 기능 비교79~80| 기능 | AWS Lambda | Vercel Functions | Cloudflare Workers |81|---------|-----------|-----------------|-------------------|82| **런타임** | Node.js, Python, Go, Rust, Java, .NET | Node.js, Python, Go, Ruby | V8 Isolates (JS/TS, Rust via WASM) |83| **최대 실행 시간** | 15분 | 60초 (Hobby), 300초 (Pro) | 30초 (무료), 15분 (유료) |84| **메모리** | 128MB - 10GB | 1024MB - 3008MB | 128MB |85| **콜드 스타트** | 100-500ms | 100-300ms | < 5ms |86| **배포 위치** | 단일 리전 (또는 노력을 기울이면 멀티) | 다중 리전 | 300+ 엣지 위치 |87| **최대 페이로드** | 6MB (동기), 256KB (비동기) | 4.5MB | 100MB |88| **내장 스토리지** | 없음 (DynamoDB, S3 사용) | 없음 (외부 DB 사용) | KV, D1 (SQLite), R2 (S3 호환) |89| **가격 모델** | 요청당 + 실행 시간 | 플랜에 포함 | 요청당 + 실행 시간 |90| **무료 티어** | 월 1M 요청 | 월 100K (Hobby) | 일 100K 요청 |91~92## 콜드 스타트93~94콜드 스타트는 새 함수 인스턴스를 초기화하는 데 걸리는 시간입니다. 이것이 serverless에서 가장 큰 성능 관심사입니다.95~96```mermaid97graph LR98 subgraph "Cold Start"99 A[Request] --> B[Provision Environment]100 B --> C[Load Code]101 C --> D[Initialize Runtime]102 D --> E[Execute Function]103 end104~105 subgraph "Warm Invocation"106 F[Request] --> G[Execute Function]107 end108```109~110| 플랫폼 | 일반적인 콜드 스타트 | 이유 |111|----------|-------------------|-----|112| **Cloudflare Workers** | < 5ms | V8 격리, 전체 런타임 불필요 |113| **Vercel Functions** | 100-300ms | 엣지 또는 리전의 Node.js 런타임 |114| **AWS Lambda** | 100-500ms | 전체 컨테이너 초기화 |115| **AWS Lambda (Java)** | 1-5초 | JVM 시작 오버헤드 |116~117Cloudflare Workers는 컨테이너 대신 V8 격리를 사용하기 때문에 콜드 스타트에서 압도적으로 승리합니다.118~119## 가격 비교120~121### 무료 티어122~123| 플랫폼 | 무료 요청 | 무료 컴퓨트 |124|----------|--------------|--------------|125| **AWS Lambda** | 월 1M | 400,000 GB-초 |126| **Vercel** | 월 100K | Hobby 플랜에 포함 |127| **Cloudflare Workers** | 일 100K (월 약 3M) | 호출당 10ms CPU |128~129### 대규모 (월 10M 요청, 평균 실행 시간 50ms)130~131| 플랫폼 | 예상 월 비용 |132|----------|----------------------|133| **AWS Lambda** | ~$2.50 (요청) + ~$4.15 (컴퓨트) = **~$6.65** |134| **Vercel** | **월 $20** (Pro 플랜, 함수 포함) |135| **Cloudflare Workers** | **월 $5** (유료 플랜, 10M 요청 포함) |136~137대부분의 사용 사례에서 Cloudflare Workers가 가장 저렴합니다. Vercel의 가격은 단순하지만 전체 플랫폼(호스팅, CDN, 분석)을 포함합니다. AWS Lambda는 가장 세분화된 가격 체계를 가지고 있습니다.138~139## 실제 사용 사례140~141### AWS Lambda: 최적 용도142~143- **복잡한 백엔드 워크플로우** - step functions, 이벤트 기반 아키텍처144- **AWS 서비스와의 통합** - S3 트리거, DynamoDB 스트림, SQS 큐145- **장시간 실행 작업** - 최대 15분 실행 시간146- **다중 언어 팀** - 가장 넓은 범위의 런타임 지원147~148```mermaid149graph TD150 S3[S3 Upload] --> Lambda1[Process Image]151 Lambda1 --> SQS[SQS Queue]152 SQS --> Lambda2[Generate Thumbnails]153 Lambda2 --> DDB[DynamoDB]154 DDB --> Lambda3[Send Notification]155 Lambda3 --> SNS[SNS / Email]156```157~158### Vercel Functions: 최적 용도159~160- **Next.js 애플리케이션** - 제로 구성 API 라우트161- **프론트엔드 우선 팀** - 프론트엔드와 백엔드를 함께 배포162- **빠른 프로토타이핑** - git push로 배포163- **Jamstack 아키텍처** - 정적 프론트엔드 + serverless API164~165```typescript166// app/api/subscribe/route.ts167import { NextResponse } from 'next/server';168~169export async function POST(request: Request) {170 const { email } = await request.json();171~172 // Validate173 if (!email || !email.includes('@')) {174 return NextResponse.json(175 { error: 'Invalid email' },176 { status: 400 }177 );178 }179~180 // Save to database181 await db.subscribers.create({ email });182~183 return NextResponse.json({ success: true });184}185```186~187### Cloudflare Workers: 최적 용도188~189- **저지연 API** - 전 세계 300개 이상의 위치에서 코드 실행190- **엣지 컴퓨팅** - 응답 변환, A/B 테스트, 개인화191- **대용량 API** - 관대한 무료 티어와 함께 대규모에서 가장 저렴192- **글로벌 애플리케이션** - KV와 D1로 사용자 가까이에 데이터 배치193~194```javascript195// Edge-side A/B test196export default {197 async fetch(request, env) {198 const url = new URL(request.url);199~200 // Assign user to variant201 const cookie = request.headers.get('Cookie') || '';202 let variant = cookie.includes('ab=b') ? 'b' : 'a';203~204 if (!cookie.includes('ab=')) {205 variant = Math.random() < 0.5 ? 'a' : 'b';206 }207~208 // Fetch the appropriate version209 const response = await fetch(`${url.origin}/variants/${variant}`);210 const newResponse = new Response(response.body, response);211~212 // Set cookie for consistent experience213 newResponse.headers.set('Set-Cookie', `ab=${variant}; Path=/; Max-Age=86400`);214~215 return newResponse;216 },217};218```219~220## 언제 어떤 것을 선택할까221~222### AWS Lambda를 선택하세요:223- 이미 AWS 생태계에 투자했다면224- 장시간 실행 함수가 필요하다면 (최대 15분)225- 복잡한 이벤트 기반 아키텍처가 필요하다면226- JavaScript 이외의 런타임이 필요하다면 (Python, Go, Rust, Java)227~228### Vercel Functions를 선택하세요:229- Next.js 또는 프론트엔드 프레임워크로 개발 중이라면230- 가장 간단한 배포 경험을 원한다면 (git push)231- 팀이 프론트엔드에 집중한다면232- 호스팅 + 함수 + CDN을 하나의 플랫폼에서 원한다면233~234### Cloudflare Workers를 선택하세요:235- 전 세계적으로 가능한 가장 낮은 지연을 필요로 한다면236- 대규모에서 가장 저렴한 옵션을 원한다면237- 엣지 컴퓨팅 기능이 필요하다면238- 콜드 스타트 시간이 사용 사례에 중요하다면239~240## 결합할 수 있을까?241~242물론입니다. 일반적인 아키텍처:243~244```mermaid245graph TD246 User --> CF[Cloudflare Workers\nEdge caching, routing, A/B tests]247 CF --> Vercel[Vercel\nNext.js frontend + API routes]248 Vercel --> Lambda[AWS Lambda\nHeavy processing, background jobs]249 Lambda --> S3[S3 Storage]250 Lambda --> DB[(Database)]251```252~253- **Cloudflare Workers**: 엣지 라우팅, 캐싱, 보안254- **Vercel Functions**: 프론트엔드 API 라우트, SSR255- **AWS Lambda**: 무거운 백엔드 처리, 예약 작업, 이벤트 파이프라인256~257## 결론258~259Serverless는 상당히 성숙해졌습니다. 2026년, AWS Lambda, Vercel Functions, Cloudflare Workers 사이의 선택은 여러분의 스택과 우선순위에 달려 있습니다:260~261- **가장 간단한 개발자 경험**: Vercel262- **가장 강력하고 유연한**: AWS Lambda263- **최고의 성능과 가격**: Cloudflare Workers264~265세 가지 모두 프로덕션에 준비되어 있고 실전 검증되었습니다. 현재 스택에 맞는 것으로 시작하고, 필요가 커짐에 따라 확장하세요.266~
NORMAL · serverless-aws-lambda-vercel-cloudflare.md [readonly]266 lines · :q to close