Tan Kim

cloudflare

Cloudflare

글로벌 CDN, DNS, 보안, 엣지 컴퓨팅 플랫폼.

주요 서비스

서비스 설명
DNS 권한 DNS 서버, 무료, 빠름
CDN 전 세계 PoP에서 정적 자산 캐싱
DDoS Protection L3/L4/L7 공격 자동 차단
WAF 웹 애플리케이션 방화벽
Workers 엣지에서 실행되는 서버리스 JS/WASM
Pages 정적 사이트 + JAMstack 배포
R2 S3 호환 오브젝트 스토리지 (Egress 무료)
Tunnel 서버를 외부에 안전하게 노출 (포트 오픈 불필요)
Zero Trust VPN 없는 내부망 접근 제어

DNS 설정

레코드 타입 프록시 여부 특징
A/CNAME (주황 구름) Proxied Cloudflare IP 노출, CDN·WAF 적용
A/CNAME (회색 구름) DNS only 실제 서버 IP 노출, CDN 미적용

캐싱

Cache-Control: public, max-age=31536000, immutable  → 엣지에서 캐시
Cache-Control: no-cache, no-store                   → 캐시 안 함

캐시 퍼지:
  Dashboard → Caching → Cache Rules → Purge
  API: POST /zones/{zone_id}/purge_cache

캐시 규칙 (Cache Rules)

조건: URI Path starts with /static/
동작: Cache Everything, Edge TTL 30 days

조건: URI Path contains /api/
동작: Bypass Cache

Workers

엣지에서 실행되는 서버리스 함수. V8 기반.

// src/index.ts
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const url = new URL(request.url)
 
    if (url.pathname === '/api/hello') {
      return Response.json({ message: 'Hello from Edge!' })
    }
 
    // KV 읽기
    const value = await env.MY_KV.get('key')
 
    return new Response(value ?? 'Not found', { status: 200 })
  }
}
# wrangler.toml
name = "my-worker"
main = "src/index.ts"
compatibility_date = "2024-01-01"
 
[[kv_namespaces]]
binding = "MY_KV"
id = "xxxx"
npx wrangler dev       # 로컬 개발
npx wrangler deploy    # 배포

Cloudflare Tunnel

포트 오픈/공인 IP 없이 로컬 서버 외부 노출.

# 설치 및 인증
cloudflared tunnel login
 
# 터널 생성
cloudflared tunnel create my-tunnel
 
# 실행
cloudflared tunnel run --url http://localhost:3000 my-tunnel

보안 설정

SSL/TLS 모드:
  Off         → HTTP만
  Flexible    → 브라우저↔CF는 HTTPS, CF↔서버는 HTTP
  Full        → 양방향 HTTPS (자체 서명 인증서 허용)
  Full(Strict) → 양방향 HTTPS (유효한 인증서 필요) ← 권장

방화벽 규칙 (Firewall Rules):
  특정 국가 차단: ip.geoip.country in {"CN" "RU"}
  Rate Limiting: 1분에 100회 초과 시 차단

메모

이 글에 대해 물어보기