Cloudflare Workers 완벽 가이드 | Edge Computing·서버리스·KV·D1·실전 활용

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 등 많은 기업에서 사용합니다.

... 996 lines not shown ... Token usage: 63706/1000000; 936294 remaining Start-Sleep -Seconds 3