Durable Objects 이해하기
상태를 유지하는 서버리스 애플리케이션에 Durable Objects를 활용하여 전 세계적으로 일관된 상태를 유지하는 방법을 이해합니다.
Durable Objects 이해하기은(는) CoddyKit의 무료 Edge Computing with Cloudflare Workers & Deno 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Edge Computing with Cloudflare Workers & Deno 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Edge Computing with Cloudflare Workers & Deno 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
The State Problem at the Edge
Serverless functions, like Cloudflare Workers, are typically stateless. This means each request is processed independently, without remembering past interactions.
While great for scalability and cost-efficiency, what if you need to maintain a consistent piece of information across multiple requests or users globally? Think about a live chat room, a game lobby, or a shared counter.
Introducing Durable Objects
Cloudflare Durable Objects solve this fundamental challenge. They are a powerful primitive for building stateful serverless applications directly at the edge.
- They provide a single-instance, globally consistent object.
- Each Durable Object instance has a unique ID and its own private storage.
- They act like tiny, persistent servers that live at the edge.
Unique IDs & Global Consistency
The core concept behind Durable Objects is their unique identity. When you create or retrieve a Durable Object using a specific ID, Cloudflare ensures that only one instance of that object exists and runs globally.
No matter where a request originates from (e.g., Tokyo, New York, London), if it targets the same Durable Object ID, it will be routed to that single, consistent instance. This eliminates the need for complex distributed synchronization.
Anatomy of a Durable Object
A Durable Object is defined as a standard JavaScript class. It must have:
- A
constructor(state, env)method, wherestateprovides access to its storage andenvholds environment variables. - An
async fetch(request)method, which processes incoming HTTP requests, similar to a regular Worker.
It's essentially a self-contained, stateful mini-Worker.
Persistent Storage with state.storage
Each Durable Object instance has its own private, durable key-value storage, accessible via this.state.storage. This allows the object to persist data across invocations and even across restarts.
await this.state.storage.put('key', value): Stores data.await this.state.storage.get('key'): Retrieves data.await this.state.storage.delete('key'): Removes data.
Values can be any JSON-serializable type, making it versatile for various data needs.
Code: Counter Worker & DO
This example shows a Cloudflare Worker interacting with a simple Counter Durable Object. The DO maintains a count that persists across requests and is globally consistent.
To run this, you'd define the Counter Durable Object binding in your wrangler.toml file.
export class Counter {
constructor(state, env) {
this.state = state;
this.env = env;
}
async fetch(request) {
let url = new URL(request.url);
// Retrieve current count from storage, default to 0
let currentCount = (await this.state.storage.get("value")) || 0;
if (url.pathname === "/increment") {
currentCount++;
await this.state.storage.put("value", currentCount);
return new Response(`Count: ${currentCount}`);
} else if (url.pathname === "/decrement") {
currentCount--;
await this.state.storage.put("value", currentCount);
return new Response(`Count: ${currentCount}`);
} else if (url.pathname === "/get") {
return new Response(`Count: ${currentCount}`);
}
return new Response("Not found", { status: 404 });
}
}
export default {
async fetch(request, env) {
// Get a unique Durable Object ID based on a name
// 'COUNTER' is the binding name configured in wrangler.toml
let id = env.COUNTER.idFromName("global-counter");
// Get a 'stub' (a proxy) to interact with the Durable Object
let stub = env.COUNTER.get(id);
// Forward the incoming request to the Durable Object's fetch method
return stub.fetch(request);
}
};How the Counter Code Works
1. The Counter class defines the Durable Object's behavior, handling /increment, /decrement, and /get routes and persisting its value.
2. The main Worker's fetch handler:
- It uses
env.COUNTER.idFromName("global-counter")to obtain a deterministic ID for our counter. env.COUNTER.get(id)returns a stub, which is a network proxy to the Durable Object.stub.fetch(request)forwards the original request to the Durable Object instance, allowing it to process the request and update its state.
Global Consistency in Action
Imagine users from different locations (e.g., Europe, Asia, Americas) all interacting with the /increment endpoint of your Worker. Because they all target the "global-counter" ID, Cloudflare guarantees they will all interact with the exact same instance of the Counter Durable Object.
This ensures that the count is always consistent, regardless of the user's location, simplifying complex distributed state management that would otherwise be very challenging.
Common Use Cases for DOs
Durable Objects are ideal for scenarios requiring strong consistency and shared, mutable state at the edge:
- Real-time Collaboration: Shared whiteboards, document editing.
- Gaming: Game lobbies, player state, matchmaking.
- Live Chat: Chat rooms, message queues for real-time communication.
- Stateful APIs: Managing user sessions, shopping carts, or unique resource locks.
They bring traditional stateful patterns to the serverless edge, making complex applications simpler to build.
Quick Check: Durable Objects
Which of the following best describes the primary benefit of Cloudflare Durable Objects?
Recap: Durable Objects Explained
In this lesson, we explored Cloudflare Durable Objects, a powerful tool for stateful serverless applications.
- They provide globally consistent, single-instance state at the edge.
- Each DO has a unique ID and private, durable storage (
state.storage). - Workers interact with DOs by obtaining stubs and forwarding requests.
- They are ideal for real-time, collaborative, and stateful applications that demand strong consistency.
Durable Objects bridge the gap between stateless serverless and traditional stateful services, simplifying complex distributed systems.
자주 묻는 질문
“Durable Objects 이해하기” 강의는 무료인가요?
네 — “Durable Objects 이해하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Edge Computing with Cloudflare Workers & Deno 강의 전체를 잠금 해제할 수 있습니다. Edge Computing with Cloudflare Workers & Deno 강의에는 총 4개의 강의가 포함되어 있습니다.
“Durable Objects 이해하기”에서 뭘 배우나요?
상태를 유지하는 서버리스 애플리케이션에 Durable Objects를 활용하여 전 세계적으로 일관된 상태를 유지하는 방법을 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Edge Computing with Cloudflare Workers & Deno을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Edge Computing with Cloudflare Workers & Deno을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Edge Computing with Cloudflare Workers & Deno은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“Durable Objects 이해하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Edge Computing with Cloudflare Workers & Deno 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Edge Computing with Cloudflare Workers & Deno 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Cloudflare KV 저장소
- Durable Objects 이해하기
- Deno와 엣지 저장소 통합
- 엣지에서 D1 SQL로 질의하기