durable-objects

6 개의 포스트

아티팩트: Git 방식으로 작동하는 버전 관리 저장소 (새 탭에서 열림)

AI 에이전트가 생성하는 코드와 데이터의 양이 기하급수적으로 증가함에 따라, 기존의 소스 제어 플랫폼은 인간의 작업 속도를 상회하는 대규모 수요를 감당하기 어려워지고 있습니다. Cloudflare는 이러한 문제를 해결하기 위해 AI 에이전트 중심의 분산 버전 관리 파일 시스템인 'Artifacts'를 출시했습니다. Artifacts는 익숙한 Git 프로토콜을 기반으로 하면서도 API를 통해 수백만 개의 리포지토리를 프로그래밍 방식으로 즉시 생성하고 제어할 수 있는 새로운 저장소 프리미티브를 제공합니다. ### AI 에이전트에 최적화된 Git 인터페이스 * AI 모델들이 이미 학습 데이터로 익숙하게 습득한 Git 프로토콜을 그대로 사용하여, 별도의 CLI나 기술 전파 없이도 에이전트가 즉시 소스 제어를 수행할 수 있습니다. * 에이전트 세션마다 독립적인 리포지토리를 할당하거나, 특정 시점에서 수만 개의 포크(Fork)를 생성하여 병렬적으로 작업을 수행하는 것이 가능합니다. * 서버리스 환경과 같이 표준 Git 클라이언트를 사용하기 어려운 곳을 위해 REST API와 네이티브 Workers API를 별도로 제공하여 커밋과 자격 증명 관리를 단순화합니다. ### 단순 소스 제어를 넘어선 상태 관리 도구 * Git의 데이터 모델을 코드 저장뿐만 아니라 세션 프롬프트 히스토리, 샌드박스 상태, 사용자별 설정(Config) 등 시간 흐름에 따른 상태 추적이 필요한 모든 곳에 활용합니다. * Cloudflare 내부적으로는 에이전트 세션마다 Artifacts 리포지토리를 할당하여, 블록 스토리지 없이도 파일 시스템 상태를 영구 저장하고 특정 시점으로의 타임트래블(복구) 기능을 구현하고 있습니다. * 세션 자체를 포크(Fork)하여 동료와 공유하거나, 특정 실험 단계에서부터 다시 작업을 시작하는 등의 협업 워크플로우를 데이터 계층에서 지원합니다. ### Durable Objects와 Zig 기반의 고성능 아키텍처 * Cloudflare의 Durable Objects를 기반으로 설계되어 수천만 개의 독립적인 상태 저장 인스턴스를 확장성 있게 관리할 수 있습니다. * 런타임 효율성을 극대화하기 위해 Git 구현체를 Zig 언어로 작성한 뒤 WebAssembly(Wasm)로 컴파일하여 Cloudflare Workers 환경에서 가볍고 빠르게 동작하도록 구축했습니다. * 기존 외부 Git 저장소(예: GitHub)에서 데이터를 가져오는 `.import()` 기능과 읽기 전용 포크 생성 기능을 통해 복잡한 코드 베이스 위에서도 에이전트가 안전하게 독립적인 작업을 수행할 수 있도록 돕습니다. AI 에이전트가 주도하는 소프트웨어 개발 환경을 구축하고 있다면, Artifacts는 대규모 상태 관리와 버전 제어를 위한 가장 강력한 인프라가 될 것입니다. 현재 유료 Workers 플랜 사용자를 대상으로 프라이빗 베타를 진행 중이며, 5월 초 공개 베타 전환이 예정되어 있으므로 에이전트 세션 관리나 동적 환경 구축이 필요한 팀은 도입을 적극 검토해 보시기 바랍니다.

에이전틱 시대를 위한 워크플로 컨트롤 플레인 재설계 (새 탭에서 열림)

Cloudflare의 워크플로우(Workflows) 컨트롤 플레인 재설계 과정을 다룬 이 글은, 인간 중심의 트리거에서 AI 에이전트 중심의 고속 트리거로 변화하는 기술 환경에 대응하기 위한 아키텍처 전환을 설명합니다. 기존의 중앙 집중식 구조에서 발생하는 병목 현상을 해결하기 위해 수평적 확장이 가능한 새로운 컴포넌트를 도입하였으며, 이를 통해 동시 실행 인스턴스 수를 기존 대비 10배 이상인 50,000개까지 확장하는 데 성공했습니다. 결과적으로 에이전트가 생성하는 방대한 양의 워크로드를 안정적이고 탄력적으로 처리할 수 있는 기반을 마련했습니다. ### 에이전트 시대의 워크로드 변화와 새로운 요구사항 * **트리거 주체의 변화:** 과거에는 사용자의 회원가입이나 주문 등 인간의 행동에 의해 워크플로우가 시작되었으나, 현재는 자율적인 AI 에이전트가 기계적인 속도로 워크플로우를 생성합니다. * **지속성 및 내구성의 중요성:** 에이전트가 며칠 동안 작업을 수행하거나 인간의 승인을 기다리는 동안, 워크플로우는 각 단계를 독립적으로 재시도하고 실패 시에도 진행 상황을 유지하는 내구성이 필요합니다. * **폭발적인 인스턴스 생성:** 단일 에이전트 세션이 수십 개의 워크플로우를 생성하고 수천 개의 인스턴스가 동시에 실행되는 환경에 대응하기 위해 더 높은 처리량이 요구됩니다. ### V1 아키텍처의 한계: 중앙 집중형 구조의 병목 * **단일 Durable Object(DO) 의존:** 모든 계정 레벨의 정보와 인스턴스 관리를 'Account'라는 단일 Durable Object가 담당하여 병목 현상이 발생했습니다. * **확장성 제약:** 인스턴스 생성, 업데이트, 조회 등의 모든 작업이 하나의 DO를 거쳐야 했으므로, 동시 실행 4,500개 및 10초당 100개의 생성 제한이라는 물리적인 한계에 부딪혔습니다. * **상태 불일치 가능성:** 워크플로우를 큐에 넣기 전 실제 실행 엔진(Engine)의 생성 여부를 확인하는 로직이 부족하여 비정상적인 상태가 발생할 가능성이 있었습니다. ### V2 아키텍처: 수평적 확장을 위한 재설계 원칙 * **엔진 중심의 진실 공급원(Source of Truth):** 특정 인스턴스의 존재 여부에 대한 권한을 해당 인스턴스의 실행 엔진(Engine)에만 부여하여 의존성을 분산했습니다. * **메타데이터의 최소화:** 계정 수준의 싱글톤(Singleton) 객체는 최소한의 메타데이터만 저장하고, 요청 수에 관계없이 일정한 성능을 유지하도록 설계했습니다. * **새로운 컴포넌트 도입:** 'Account' DO의 부하를 분산하기 위해 메타데이터와 생명주기 관리를 보조하는 **SousChef**와 동시성 제어 및 액세스를 담당하는 **Gatekeeper**를 새롭게 구축했습니다. ### 향상된 성능 지표 및 확장된 한계치 * **동시 실행 인스턴스:** 기존 4,500개에서 **50,000개**로 대폭 상향되었습니다. * **인스턴스 생성 속도:** 계정당 초당 100개에서 **초당 300개**로 향상되었습니다. * **대기열 용량:** 워크플로우당 대기 중인 인스턴스 수가 100만 개에서 **200만 개**로 두 배 늘어났습니다. AI 에이전트가 주도하는 애플리케이션을 구축하는 개발자라면, 이제 인프라의 한계에 구애받지 않고 고도로 병렬화된 워크플로우를 설계할 수 있습니다. Cloudflare Workflows의 V2 컨트롤 플레인은 대규모 자동화 인프라를 위한 강력하고 탄력적인 토대를 제공합니다.

Project Think: Cloudflare에서 차세대 AI 에이전트 구축하기 (새 탭에서 열림)

Cloudflare는 차세대 AI 에이전트 구축을 위한 새로운 프레임워크인 'Project Think'를 공개했습니다. 이 프로젝트는 단순한 도구 모음을 넘어 내구성 있는 실행(Durable execution), 하위 에이전트 관리, 샌드박스 코드 실행 등을 포함한 강력한 프리미티브(Primitives)를 제공하여 에이전트가 중단 없이 장시간 작업을 수행할 수 있도록 돕습니다. 이를 통해 기존 에이전트의 높은 유지 비용과 확장성 문제를 해결하고, 인프라 수준에서 스스로 사고하고 동작하는 에이전트 환경을 구축하는 것을 목표로 합니다. ### 기존 에이전트 모델의 한계와 확장성 문제 * **로컬 및 고비용 환경의 제약:** 현재의 코딩 에이전트들은 주로 개인 노트북이나 비싼 VPS에서 실행되어 기기 간 협업이나 상태 공유가 어렵고, 사용하지 않을 때도 고정적인 비용이 발생합니다. * **1대1 서비스 구조의 비효율성:** 일반적인 앱은 하나의 인스턴스가 다수의 사용자를 처리하지만, 에이전트는 사용자 한 명당 하나의 인스턴스가 할당되는 '개인 셰프'와 같은 구조를 가집니다. 이는 수천만 명의 사용자를 대응할 때 기존 컨테이너 기반 방식으로는 비용 감당이 불가능함을 의미합니다. * **관리의 복잡성:** 의존성 설치, 업데이트 관리, 비밀번호 및 아이디 설정 등 수동으로 관리해야 할 요소가 많아 대규모 배포에 걸림돌이 됩니다. ### Durable Objects 기반의 지속성 아키텍처 * **액터 모델(Actor Model) 채택:** Cloudflare의 Durable Objects를 기반으로 각 에이전트에 고유한 식별자와 자체 SQLite 데이터베이스를 부여합니다. * **비용 최적화:** 에이전트가 활동하지 않을 때는 휴면(Hibernation) 상태로 전환되어 컴퓨팅 비용이 발생하지 않으며, 이벤트(HTTP, 이메일, 알람 등)가 발생할 때만 즉시 깨어나 상태를 로드합니다. * **자동 확장성:** 별도의 용량 관리 없이 수만 개의 에이전트를 동시에 운영할 수 있으며, 각 에이전트는 독립적인 상태와 로직을 유지합니다. ### Project Think의 핵심 기술 프리미티브 * **Fibers를 이용한 내구성 있는 실행:** `runFiber()` 함수를 통해 실행 중인 작업을 SQLite에 등록하고, `stash()`로 체크포인트를 설정하여 시스템 충돌이나 재시작 후에도 중단된 지점부터 작업을 재개할 수 있습니다. * **샌드박스 및 동적 실행:** Dynamic Workers를 활용해 에이전트가 안전한 격리 환경 내에서 직접 코드를 작성하고 실행할 수 있도록 지원하며, 런타임에 필요한 npm 패키지를 직접 해결합니다. * **계층 구조의 에이전트:** 하위 에이전트(Sub-agents)를 생성하여 복잡한 작업을 분담할 수 있으며, 이들은 각자의 SQLite 데이터베이스와 타입화된 RPC를 통해 부모 에이전트와 통신합니다. * **지능형 세션 관리:** 트리 구조의 메시지 기록, 포킹(forking), 컴팩션 및 전문 검색 기능을 제공하여 에이전트가 과거의 맥락을 정확하게 파악하고 활용할 수 있게 합니다. 프로젝트 Think는 에이전트를 단순히 '실행되는 프로그램'이 아니라 '지속되는 인프라'로 격상시킵니다. 대규모 사용자에게 맞춤형 AI 비서를 저렴한 비용으로 제공하고자 하는 개발자라면, Cloudflare Agents SDK의 내구성 있는 실행 모델과 액터 기반 아키텍처를 도입하여 복구 가능하고 확장성 있는 에이전트 서비스를 설계해 보시기 바랍니다.

Durable Objects in Dynamic Workers: Give each AI-generated app its own database (새 탭에서 열림)

Cloudflare는 AI가 생성한 애플리케이션에 독립적인 영구 저장소를 제공하기 위해 'Durable Object Facets' 기능을 출시했습니다. 이 기능은 가볍고 빠른 Dynamic Workers 환경에서 AI 코드가 자신만의 전용 SQLite 데이터베이스를 가질 수 있게 하여, 일회성 실행을 넘어 상태를 유지하는 복잡한 앱 구축을 가능하게 합니다. 개발자는 이를 통해 동적으로 생성된 코드에 대해 제로 레이턴시 수준의 저장소 성능과 체계적인 관리 권한을 동시에 확보할 수 있습니다. ### Dynamic Workers와 상태 관리의 필요성 * **Isolate 기반의 효율성:** Dynamic Workers는 컨테이너가 아닌 Isolate 기술을 사용하여 기존 방식보다 100배 빠르고 메모리 사용량은 1/10 수준으로 가볍습니다. * **일회성 실행의 한계:** 기존에는 AI 에이전트가 생성한 코드를 즉시 실행하고 버리는 용도로 주로 사용되었으나, 사용자 상호작용이 필요한 앱을 만들려면 장기적인 상태(State) 저장이 필수적입니다. * **스토리지 대안:** 원격 SQL 데이터베이스(D1, Postgres 등)를 연결할 수도 있지만, 더 빠르고 밀접한 데이터 처리를 위해 Durable Object의 로컬 SQLite 활용이 제안되었습니다. ### 기존 Durable Objects의 제약 사항 * **정적 설정의 한계:** 일반적인 Durable Object는 코드 작성 후 API를 통한 프로비저닝과 Wrangler 설정이 필요하며, 이는 실시간으로 코드가 생성되는 동적 환경에는 적합하지 않습니다. * **통제 및 관리 문제:** AI나 사용자가 생성한 코드가 무제한으로 스토리지를 생성하거나 사용하는 것을 방지하기 위해 로깅, 과금, 리소스 제한 등을 수행할 '감독자(Supervisor)' 역할이 필요합니다. ### Durable Object Facets의 구조와 작동 방식 * **Facets 개념 도입:** 개발자가 작성한 고정된 Durable Object(관리자) 내에서 AI가 생성한 Dynamic Worker 코드를 'Facet'이라는 하위 단위로 로드하고 인스턴스화합니다. * **독립된 SQLite 데이터베이스:** 각 Facet은 관리자의 데이터베이스와 분리된 자신만의 SQLite 데이터베이스를 할당받습니다. 이를 통해 일반적인 Durable Object 스토리지 API(kv, sql)를 그대로 사용할 수 있습니다. * **감독자 패턴(Supervisor Pattern):** 모든 요청은 먼저 관리자 Durable Object를 거쳐 Facet으로 전달되므로, 개발자는 요청 전달 전에 로깅, 보안 검사, 할당량 제한 등의 로직을 실행할 수 있습니다. * **코드 구현:** `this.ctx.facets.get()` 메서드를 사용하여 동적 클래스를 인스턴스로 만들고, RPC(원격 프로시저 호출)나 HTTP 요청을 통해 해당 Facet과 통신합니다. AI 기반의 맞춤형 앱 플랫폼이나 사용자 정의 로직을 실행해야 하는 SaaS를 구축한다면, Durable Object Facets를 활용해 보시기 바랍니다. 이를 통해 인프라 설정의 번거로움 없이 각 사용자 앱마다 독립적이고 성능이 뛰어난 전용 데이터베이스를 즉시 제공할 수 있으며, 관리자 계층을 통해 시스템 안정성과 가시성을 동시에 확보할 수 있습니다.

R2 로컬 업로드로 글로벌 (새 탭에서 열림)

Cloudflare는 전 세계 어디에서나 R2 객체 스토리지의 업로드 성능을 극대화할 수 있는 'Local Uploads' 기능을 오픈 베타로 출시했습니다. 이 기능은 클라이언트와 가장 가까운 위치에 데이터를 먼저 기록한 뒤 버킷이 위치한 지역으로 비동기 복제하는 방식을 통해, 지리적 거리로 인한 업로드 지연 시간을 최대 75%까지 단축합니다. 특히 데이터의 즉각적인 접근성과 강력한 일관성을 유지하면서도 글로벌 서비스의 쓰기 성능을 획기적으로 개선한 것이 핵심입니다. ### 전 세계 업로드 성능의 비약적 향상 * **TTLB(Time to Last Byte) 감축**: 내부 테스트 결과, 클라이언트와 버킷의 지역이 다를 때 업로드 완료까지 걸리는 시간이 최대 75% 감소했습니다. * **성능 벤치마크**: 북미 서부에서 아시아 태평양 지역 버킷으로 5MB 크기의 객체를 업로드할 때, 기존 약 2초 소요되던 시간이 Local Uploads 적용 후 약 500ms 수준으로 단축되었습니다. * **글로벌 사용자 경험 최적화**: 전 세계에 분산된 사용자로부터 미디어 콘텐츠를 수집하거나 IoT 장치의 로그 및 텔레메트리 데이터를 전송받는 애플리케이션에 이상적입니다. ### 데이터 처리 메커니즘과 거리 문제 해결 * **기존 방식의 한계**: 기존에는 사용자가 어디에 있든 데이터가 버킷이 지정된 지역의 스토리지까지 물리적으로 이동해야 했으므로, 거리가 멀수록 대기 시간과 불안정성이 증가했습니다. * **로컬 우선 쓰기**: 클라이언트가 버킷과 다른 지역에 있을 경우, R2 게이트웨이는 데이터를 클라이언트 인근 스토리지 인프라에 즉시 기록하고 메타데이터만 버킷 지역에 게시합니다. * **즉각적인 가용성**: 로컬에 쓰기가 완료되는 즉시 객체에 접근할 수 있으며, 배경에서 복제 작업이 진행되는 중에도 데이터 읽기가 가능해 대기 시간이 전혀 없습니다. ### 아키텍처 및 내부 구현 기술 * **Cloudflare Queues 활용**: 복제 작업(Replication Task)을 비동기적으로 처리하기 위해 Cloudflare Queues를 도입했습니다. 이를 통해 실패 시 재시도 처리와 부하 조절(Rate limiting)을 효율적으로 관리합니다. * **원자적 작업 처리**: 메타데이터 저장 시 객체 메타데이터 저장, 보류 중인 복제 키 생성, 복제 작업 마커 생성을 원자적(Atomic)으로 수행하여 데이터 무결성을 보장합니다. * **구성 요소**: 인증과 라우팅을 담당하는 'R2 Gateway Worker', 메타데이터를 관리하는 'Durable Object Metadata Service', 그리고 실제 암호화된 데이터를 저장하는 분산 스토리지 인프라가 협업합니다. ### 사용 환경 및 권장 사항 * **적용 방법**: Cloudflare 대시보드 설정이나 Wrangler 명령(`npx wrangler r2 bucket local-uploads enable [BUCKET]`)을 통해 기존 버킷에서 즉시 활성화할 수 있습니다. * **제한 사항**: 데이터 주권 준수가 필요한 지역 제한(Jurisdiction restriction, 예: EU 전용) 버킷에서는 이 기능을 사용할 수 없습니다. * **활용 팁**: 대시보드의 R2 버킷 메트릭 페이지에서 '지역별 요청 분포'를 확인하여, 읽기/쓰기 요청이 전 세계적으로 분산되어 있다면 Local Uploads를 활성화하는 것이 성능 최적화에 큰 도움이 됩니다.

서버리스, 양자 내 (새 탭에서 열림)

전통적인 Matrix 홈서버는 데이터베이스, 캐싱, 리버스 프록시 등 복잡한 인프라 관리 부담이 크지만, 이를 Cloudflare Workers 기반의 서버리스 아키텍처로 전환함으로써 운영 부담을 획기적으로 줄일 수 있습니다. 이 방식은 사용량에 비례해 비용이 발생하여 유휴 상태에서는 비용이 거의 들지 않으며, 전 세계 엣지 노드에서 실행되어 낮은 지연 시간을 보장합니다. 특히 양자 내성 암호(PQC)를 기본 TLS 계층에 적용하여 미래의 보안 위협에 선제적으로 대응할 수 있는 고도의 보안성을 갖춘 것이 특징입니다. **서버리스 아키텍처로의 전환** - 기존 Python 기반의 Synapse 홈서버 구성을 TypeScript와 Hono 프레임워크를 사용하는 Cloudflare Workers 환경으로 재설계했습니다. - 데이터 저장소의 경우, PostgreSQL은 D1으로, Redis 캐싱은 KV로, 파일 시스템은 R2(Object Storage)로 각각 대체하여 서버리스 환경에 최적화했습니다. - 강력한 일관성과 원자성이 필요한 Matrix 상태 결정(State Resolution) 및 실시간 조율 로직은 Cloudflare Durable Objects를 활용해 해결했습니다. **운영 및 비용의 효율성** - 서버 프로비저닝, TLS 인증서 갱신, 로드 밸런싱 등의 복잡한 작업이 `wrangler deploy`라는 단일 명령어로 단순화되었습니다. - 고정 비용이 발생하는 VPS 방식과 달리, 실제 요청이 있을 때만 비용을 지불하는 구조를 통해 개인용 서버 운영 비용을 0에 가깝게 낮출 수 있습니다. - 전 세계 300개 이상의 지역에 분포된 엣지에서 코드가 실행되므로, 사용자의 위치와 상관없이 지연 시간이 최소화됩니다. **양자 내성 암호(PQC) 기반의 이중 보안** - Cloudflare의 하이브리드 양자 내성 키 합의 알고리즘(X25519MLKEM768)을 TLS 1.3 연결에 적용하여, 미래의 양자 컴퓨터 공격으로부터 데이터를 보호합니다. - 보안은 전송 계층(TLS)의 양자 내성 암호와 애플리케이션 계층(Megolm)의 종단간 암호화(E2EE)라는 이중 레이어로 구성됩니다. - 서버 운영자나 인프라 제공자는 메시지 메타데이터는 확인할 수 있지만, 메시지 본문은 발신자와 수신자의 기기에서만 복호화가 가능하므로 내용의 기밀성이 완벽하게 보장됩니다. **데이터 모델 및 저장소 설계** - **D1(SQL):** 사용자, 방, 이벤트, 장치 키 등 구조화된 데이터 모델링을 위해 25개 이상의 테이블을 운영하며 데이터의 영속성을 보장합니다. - **KV(Key-Value):** 세션 관리 및 캐싱 등 빠른 읽기 속도가 필요한 데이터를 처리합니다. - **R2:** 암호화된 미디어 파일 및 대용량 바이너리 데이터를 저장하는 오브젝트 스토리지 역할을 수행합니다. 이 프로젝트는 개인 개발자나 보안이 중요한 조직이 관리 부담 없이 안전하고 확장 가능한 통신 인프라를 구축할 수 있는 실무적인 대안을 제시합니다. 특히 복잡한 암호화 라이브러리를 직접 관리하지 않고도 최신 보안 표준을 누릴 수 있다는 점이 큰 장점입니다.