Cloudflare Workers 완벽 가이드 | Edge Computing·서버리스·KV·D1·실전 활용
이 글의 핵심
Cloudflare Workers로 엣지 컴퓨팅을 구현하는 완벽 가이드입니다. 서버리스 함수, KV 스토리지, D1 데이터베이스, Wrangler까지 실전 예제로 정리했습니다.
실무 경험 공유: AWS Lambda에서 Cloudflare Workers로 전환하면서, 응답 속도가 200ms에서 20ms로 단축되고 비용이 70% 절감된 경험을 공유합니다.
들어가며: “서버리스가 느려요”
실무 문제 시나리오
시나리오 1: Cold Start가 길어요
Lambda는 느립니다. Workers는 0ms입니다.
시나리오 2: 글로벌 배포가 어려워요
리전 설정이 복잡합니다. Workers는 전 세계 자동 배포됩니다.
시나리오 3: 비용이 높아요
Lambda는 비쌉니다. Workers는 10만 요청 무료입니다.
1. Cloudflare Workers란?
핵심 특징
Cloudflare Workers는 엣지 서버리스 플랫폼입니다.
주요 장점:
- 0ms Cold Start: 즉시 실행
- 글로벌 배포: 300+ 도시
- 빠른 속도: 평균 20ms
- 저렴한 비용: 10만 요청 무료
- V8 Isolates: 가벼운 실행 환경
2. 프로젝트 설정
설치
npm create cloudflare@latest
wrangler.toml
name = "my-worker"
main = "src/index.ts"
compatibility_date = "2024-01-01"
[vars]
ENVIRONMENT = "production"
3. 기본 Worker
Hello World
// src/index.ts
export default {
async fetch(request: Request): Promise<Response> {
return new Response('Hello Cloudflare Workers!');
},
};
라우팅
export default {
async fetch(request: Request): Promise<Response> {
const url = new URL(request.url);
if (url.pathname === '/') {
return new Response('Home');
}
if (url.pathname === '/api/users') {
return Response.json([
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' },
]);
}
return new Response('Not Found', { status: 404 });
},
};
4. KV (Key-Value Storage)
설정
# wrangler.toml
[[kv_namespaces]]
binding = "MY_KV"
id = "your-kv-id"
사용
interface Env {
MY_KV: KVNamespace;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
// 읽기
if (url.pathname === '/api/cache') {
const value = await env.MY_KV.get('key');
return Response.json({ value });
}
// 쓰기
if (url.pathname === '/api/cache' && request.method === 'POST') {
const { key, value } = await request.json();
await env.MY_KV.put(key, value, { expirationTtl: 3600 });
return Response.json({ success: true });
}
return new Response('Not Found', { status: 404 });
},
};
5. D1 (SQL Database)
설정
wrangler d1 create my-database
# wrangler.toml
[[d1_databases]]
binding = "DB"
database_name = "my-database"
database_id = "your-db-id"
Migration
-- migrations/0001_create_users.sql
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
email TEXT UNIQUE NOT NULL,
name TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
wrangler d1 migrations apply my-database
사용
interface Env {
DB: D1Database;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
if (url.pathname === '/api/users') {
const { results } = await env.DB.prepare('SELECT * FROM users').all();
return Response.json(results);
}
if (url.pathname === '/api/users' && request.method === 'POST') {
const { email, name } = await request.json();
await env.DB.prepare('INSERT INTO users (email, name) VALUES (?, ?)')
.bind(email, name)
.run();
return Response.json({ success: true }, { status: 201 });
}
return new Response('Not Found', { status: 404 });
},
};
6. Caching
export default {
async fetch(request: Request): Promise<Response> {
const cache = caches.default;
let response = await cache.match(request);
if (!response) {
response = await fetch('https://api.example.com/data');
response = new Response(response.body, response);
response.headers.set('Cache-Control', 's-maxage=3600');
await cache.put(request, response.clone());
}
return response;
},
};
7. 배포
로컬 개발
wrangler dev
프로덕션 배포
wrangler deploy
정리 및 체크리스트
핵심 요약
- Cloudflare Workers: 엣지 서버리스
- 0ms Cold Start: 즉시 실행
- 글로벌 배포: 300+ 도시
- KV: Key-Value 스토리지
- D1: SQL 데이터베이스
- 저렴한 비용: 10만 요청 무료
구현 체크리스트
- Cloudflare 계정 생성
- Wrangler 설치
- Worker 작성
- KV 설정
- D1 설정
- 로컬 테스트
- 배포
같이 보면 좋은 글
- AWS Lambda 완벽 가이드
- Vercel 완벽 가이드
- Edge Computing 가이드
이 글에서 다루는 키워드
Cloudflare Workers, Edge Computing, Serverless, KV, D1, Backend, Performance
자주 묻는 질문 (FAQ)
Q. AWS Lambda와 비교하면 어떤가요?
A. Workers가 훨씬 빠르고 저렴합니다. Lambda는 더 많은 런타임과 통합을 제공합니다.
Q. Node.js API를 사용할 수 있나요?
A. 제한적입니다. Web API와 호환되는 라이브러리를 사용해야 합니다.
Q. 무료로 사용할 수 있나요?
A. 네, 10만 요청/일까지 무료입니다.
Q. 프로덕션에서 사용해도 되나요?
A. 네, Discord, Shopify 등 많은 기업에서 사용합니다.