🏗️ 아키텍처

Edge Computing

엣지 컴퓨팅

데이터 소스 가까이에서 컴퓨팅을 수행하는 분산 컴퓨팅 패러다임입니다. 중앙 데이터센터로 데이터를 전송하지 않고 네트워크 가장자리(Edge)에서 처리하여 지연 시간을 줄이고 대역폭을 절약합니다.

📖 상세 설명

Edge Computing의 핵심 원리는 "데이터가 생성되는 곳에서 처리한다"입니다. 전통적인 클라우드 모델에서는 모든 데이터가 중앙 데이터센터로 전송되어 처리되지만, 엣지 컴퓨팅에서는 사용자 가까운 곳(CDN 노드, IoT 게이트웨이, 기지국 등)에서 데이터를 처리합니다.

지연 시간(Latency) 감소가 가장 큰 장점입니다. 서울에서 미국 데이터센터까지 왕복하면 100-200ms가 걸리지만, 서울의 엣지 서버에서 처리하면 10-20ms로 줄어듭니다. 실시간 게임, 화상회의, 자율주행 같은 지연에 민감한 서비스에서 필수적입니다.

대역폭 비용 절감도 중요한 이점입니다. IoT 센서가 초당 수천 개의 데이터를 생성할 때, 모든 데이터를 클라우드로 전송하면 비용이 급증합니다. 엣지에서 필터링하고 집계한 후 요약 데이터만 전송하면 네트워크 비용을 90% 이상 줄일 수 있습니다.

오프라인 처리 능력을 제공합니다. 네트워크 연결이 불안정한 공장, 선박, 원격지에서도 엣지 디바이스는 독립적으로 동작할 수 있습니다. 연결이 복구되면 데이터를 동기화합니다.

활용 사례는 다양합니다. CDN(Cloudflare, Akamai)은 정적 콘텐츠를 엣지에 캐싱하고, 엣지 함수로 동적 처리도 수행합니다. 스마트 팩토리에서는 센서 데이터를 실시간 분석하여 불량을 즉시 감지합니다. 자율주행차는 센서 데이터를 차량 내에서 처리하여 밀리초 단위 의사결정을 합니다.

💻 코드 예제

// Cloudflare Workers - 엣지에서 실행되는 코드
// 전 세계 200+ 엣지 로케이션에서 실행

export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);

    // 1. 지역 기반 콘텐츠 제공
    const country = request.cf?.country || 'US';
    const city = request.cf?.city || 'Unknown';

    // 2. 엣지 캐싱 - KV Store 활용
    const cacheKey = `content:${country}:${url.pathname}`;
    let cachedContent = await env.EDGE_CACHE.get(cacheKey);

    if (cachedContent) {
      return new Response(cachedContent, {
        headers: {
          'Content-Type': 'text/html',
          'X-Edge-Cache': 'HIT',
          'X-Edge-Location': city,
        },
      });
    }

    // 3. 캐시 미스 시 오리진 서버 요청
    const originResponse = await fetch(`https://origin.example.com${url.pathname}`);
    const content = await originResponse.text();

    // 4. 엣지에 캐싱 (TTL: 1시간)
    ctx.waitUntil(
      env.EDGE_CACHE.put(cacheKey, content, { expirationTtl: 3600 })
    );

    return new Response(content, {
      headers: {
        'Content-Type': 'text/html',
        'X-Edge-Cache': 'MISS',
        'X-Edge-Location': city,
      },
    });
  },
};

// wrangler.toml 설정
/*
name = "edge-app"
main = "src/index.js"
compatibility_date = "2024-01-01"

[[kv_namespaces]]
binding = "EDGE_CACHE"
id = "abc123"
*/
// Vercel Edge Functions - Next.js 엣지 런타임
// middleware.ts

import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export const config = {
  matcher: ['/api/:path*', '/dashboard/:path*'],
};

export function middleware(request: NextRequest) {
  // 엣지에서 실행 - 오리진 서버 도달 전 처리

  // 1. 지역 기반 라우팅
  const country = request.geo?.country || 'US';
  const region = request.geo?.region || 'unknown';

  // 2. A/B 테스트 - 쿠키 기반
  const bucket = request.cookies.get('ab-bucket')?.value
    || (Math.random() < 0.5 ? 'control' : 'experiment');

  // 3. 인증 체크 (엣지에서 빠르게 거부)
  const authToken = request.headers.get('Authorization');
  if (request.nextUrl.pathname.startsWith('/api/protected')) {
    if (!authToken) {
      return new NextResponse(
        JSON.stringify({ error: 'Unauthorized' }),
        { status: 401, headers: { 'Content-Type': 'application/json' } }
      );
    }
  }

  // 4. 요청 헤더 수정
  const requestHeaders = new Headers(request.headers);
  requestHeaders.set('X-User-Country', country);
  requestHeaders.set('X-User-Region', region);
  requestHeaders.set('X-AB-Bucket', bucket);

  // 5. 응답에 헤더 추가
  const response = NextResponse.next({
    request: { headers: requestHeaders },
  });

  // A/B 테스트 쿠키 설정
  if (!request.cookies.has('ab-bucket')) {
    response.cookies.set('ab-bucket', bucket, {
      maxAge: 60 * 60 * 24 * 7, // 1주일
    });
  }

  return response;
}


// app/api/edge-data/route.ts - Edge API Route
import { NextRequest } from 'next/server';

export const runtime = 'edge'; // 엣지에서 실행

export async function GET(request: NextRequest) {
  const start = Date.now();

  // 엣지에서 가벼운 연산 수행
  const data = {
    timestamp: new Date().toISOString(),
    location: request.geo?.city || 'Unknown',
    country: request.geo?.country || 'Unknown',
    latency: `${Date.now() - start}ms`,
  };

  return Response.json(data, {
    headers: {
      'Cache-Control': 'public, s-maxage=60',
    },
  });
}
┌─────────────────────────────────────────────────────────────────┐
│                    Edge Computing 아키텍처                        │
└─────────────────────────────────────────────────────────────────┘

전통적 클라우드 모델:
┌──────────┐       인터넷        ┌──────────────────┐
│  사용자   │ ──────────────────▶ │   중앙 서버      │
│  (서울)   │     100-200ms      │   (미국)         │
└──────────┘ ◀────────────────── └──────────────────┘

Edge Computing 모델:
┌──────────┐    ┌───────────────┐    ┌──────────────────┐
│  사용자   │    │   엣지 서버    │    │   중앙 서버       │
│  (서울)   │───▶│   (서울)      │───▶│   (미국)          │
└──────────┘    └───────────────┘    └──────────────────┘
      │              │                      │
   10-20ms       캐싱/처리              필요시만 접근


Edge 위치별 역할:

┌─────────────────────────────────────────────────────────────────┐
│                                                                  │
│  Device Edge (1-5ms)         Network Edge (10-30ms)             │
│  ┌─────────────────┐         ┌─────────────────┐                │
│  │ - IoT 게이트웨이  │         │ - CDN 노드       │                │
│  │ - 스마트폰 앱     │         │ - 5G 기지국      │                │
│  │ - 차량 컴퓨터     │         │ - ISP 엣지       │                │
│  └─────────────────┘         └─────────────────┘                │
│                                                                  │
│  Cloud Edge (30-100ms)       Central Cloud (100-300ms)          │
│  ┌─────────────────┐         ┌─────────────────┐                │
│  │ - 리전별 POP     │         │ - 메인 데이터센터 │                │
│  │ - Edge Function  │         │ - 대용량 처리    │                │
│  │ - 캐시 레이어     │         │ - 데이터 저장    │                │
│  └─────────────────┘         └─────────────────┘                │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘


Edge Computing 사용 사례:

1. 실시간 게임
   사용자 ──▶ 엣지서버(10ms) ──▶ 게임 상태 동기화
              └─ 히트박스 계산, 충돌 감지

2. 스마트 팩토리
   센서 ──▶ 엣지 게이트웨이 ──▶ 클라우드
            └─ 불량 감지        └─ 분석/저장
            └─ 장비 제어

3. CDN + Edge Functions
   요청 ──▶ 엣지 노드 ──▶ 오리진
            ├─ 캐시 HIT → 즉시 응답
            ├─ A/B 테스트
            └─ 인증 체크

🗣️ 실무에서 이렇게 말해요

💬 글로벌 서비스 아키텍처 회의에서
"동남아 사용자 응답 속도가 너무 느려요. 싱가포르에 오리진 서버를 두더라도 베트남, 인도네시아까지는 100ms 이상 걸립니다. Cloudflare Workers로 엣지에서 API 응답을 캐싱하고, 사용자 인증도 엣지에서 처리하면 체감 속도가 훨씬 빨라질 거예요."
💬 IoT 프로젝트 기획에서
"공장 센서가 초당 1000개 데이터를 생성하는데 전부 AWS로 보내면 비용이 어마어마해요. 엣지 게이트웨이에서 이상 징후만 필터링하고, 정상 데이터는 1분 단위로 집계해서 보내면 대역폭 비용을 95% 절감할 수 있습니다."
💬 서버리스 마이그레이션 논의에서
"Lambda@Edge랑 Cloudflare Workers 둘 다 엣지 컴퓨팅인데 특성이 달라요. Lambda@Edge는 CloudFront와 통합이 잘 되고, Workers는 KV Store로 상태 관리가 편해요. 우리 서비스는 캐싱보다 실시간 처리가 중요하니까 Workers가 더 맞을 것 같습니다."

⚠️ 주의사항 & 베스트 프랙티스

엣지에서 무거운 연산 금지

엣지 환경은 리소스가 제한적입니다. 복잡한 ML 추론이나 대용량 데이터 처리는 중앙 서버에서 수행하고, 엣지에서는 캐싱, 라우팅, 간단한 변환만 처리하세요.

상태 관리 복잡성

엣지 노드는 수백 개가 분산되어 있어 상태 동기화가 어렵습니다. 가능하면 stateless하게 설계하고, 상태가 필요하면 KV Store나 Durable Objects 같은 엣지 전용 스토리지를 사용하세요.

캐시 일관성 문제

전 세계 엣지 노드의 캐시를 동시에 무효화하는 것은 불가능합니다. 캐시 TTL을 적절히 설정하고, 실시간 업데이트가 필요한 데이터는 캐싱하지 마세요.

베스트 프랙티스

정적 콘텐츠 캐싱, 인증/인가 검사, 지역 기반 라우팅, A/B 테스트는 엣지의 최적 사용 사례입니다. 콜드 스타트가 없는 Workers나 Deno Deploy를 활용하면 일관된 저지연을 달성할 수 있습니다.

🔗 관련 용어

📚 더 배우기