Show HN: Rivet Actors를 위한 SQLite – 에이전트, 테넌트 또는 문서당 하나의 데이터베이스
요약
Rivet Actors는 AI 에이전트 및 협업 앱과 같은 상태 유지 워크로드를 위해 설계된 경량 프로세스입니다. 인메모리 상태를 제공하며 SQLite를 통해 데이터를 영속화할 수 있고, 유휴 시 동면 및 무한 확장이 가능한 글로벌 엣지 네트워크 환경을 지원합니다.
핵심 포인트
- 에이전트, 세션, 사용자별로 독립적인 상태, 스토리지, 네트워킹을 가진 액터 생성 가능
- 인메모리 상태를 활용한 빠른 읽기/쓰기 및 SQLite를 통한 데이터 영속화 지원
- 워크로드 급증 시 무한 확장 및 유휴 시 제로로 확장(Scale to zero)하여 비용 효율성 극대화
- 글로벌 엣지 네트워크를 통해 사용자 근처 또는 특정 관할 구역에 배포 가능
- WebSockets를 통한 실시간 양방향 스트리밍 지원
Rivet이란 무엇인가요?
Rivet Actors는 상태 유지 워크로드 (stateful workloads)를 위해 설계된 장기 실행되는 경량 프로세스입니다. 상태 (State)는 자동 영속성 (automatic persistence)과 함께 인메모리 (in-memory)에 저장됩니다. 에이전트 (agent), 세션 (session), 또는 사용자 (user)당 하나씩 생성할 수 있으며, 워크플로 (workflows), 큐 (queues), 그리고 스케줄링 (scheduling) 기능이 내장되어 있습니다.
백엔드 (Backend)
const agent = actor({
// 액터를 위한 인메모리, 영속화된 상태 (persisted state)
state: { messages: [] as Message[] },
...
클라이언트 (Client) (프론트엔드 또는 백엔드)
// 액터에 연결
const agent = client.agent.getOrCreate("agent-123").connect();
...
주요 기능
에이전트, 세션, 사용자당 하나의 액터(Actor) — 상태 (state), 스토리지 (storage), 그리고 네트워킹 (networking)이 포함됩니다.
Rivet이 제공하는 것:
- 인메모리 상태 (In-memory state) — 즉각적인 읽기 및 쓰기를 위해 컴퓨팅 (compute)과 동일한 위치에 배치됩니다. SQLite 또는 BYO (Bring Your Own) 데이터베이스로 영속화할 수 있습니다.
- 무기한 실행, 유휴 시 수면 (Runs indefinitely, sleeps when idle) — 활성 상태일 때는 장기 실행되며, 유휴 상태일 때는 동면 (hibernates)합니다.
- 무한 확장, 제로로 확장 (Scales infinitely, scales to zero) — 급증하는 워크로드 (bursty workloads)를 지원하며 비용 효율적입니다.
- 글로벌 엣지 네트워크 (Global edge network) — 복잡함 없이 사용자 근처나 특정 법적 관할 구역에 배포할 수 있습니다.
Actor 지원 사항:
- WebSockets (웹소켓) — 내장된 실시간 양방향 스트리밍 (Real-time bidirectional streaming).
- Workflows (워크플로) — 자동 재시도 기능이 포함된 다단계 작업 (Multi-step operations).
- Queues (큐) — 신뢰할 수 있는 비동기 처리를 위한 내구성이 있는 메시지 큐 (Durable message queues).
- Scheduling (스케줄링) — Actor 내부의 타이머 및 크론 잡 (Cron jobs).
Use Cases (사용 사례)
에이전트, 워크플로, 협업 등에 적응할 수 있는 하나의 기본 단위 (Primitive)입니다.
- AI Agent (AI 에이전트) — 각 에이전트는 지속적인 컨텍스트 (Context), 메모리, 그리고 도구 호출 (Tool calls)을 스케줄링할 수 있는 능력을 갖춘 독립적인 Actor로 실행됩니다.
- Sandbox Orchestration (샌드박스 오케스트레이션) — 워크스페이스당 하나의 장기 실행 Actor를 통해 샌드박스 세션을 조정하고, 작업을 큐에 쌓으며, 정리 작업을 스케줄링합니다.
- Workflows (워크플로) — 자동 재시도, 스케줄링, 그리고 단계 간의 내구성이 있는 상태 (Durable state)를 갖춘 다단계 작업입니다.
- Collaborative Documents (협업 문서) — 각 문서가 Actor로서 연결된 모든 사용자에게 변경 사항을 브로드캐스팅하는 실시간 협업 편집 환경입니다.
- Per-Tenant Database (테넌트별 데이터베이스) — 테넌트당 하나의 Actor를 할당하여 낮은 지연 시간의 인메모리 읽기 (In-memory reads)와 내구성이 있는 테넌트 데이터 영속성 (Persistence)을 제공합니다.
- Chat (채팅) — 각 채팅방 또는 대화당 하나의 Actor를 사용하여 인메모리 상태, 지속적인 히스토리, 그리고 실시간 전달을 제공합니다.
How Actors Compare (Actor 비교)
Rivet Actor vs. Traditional Infrastructure (전통적인 인프라)
| 지표 (Metric) | Rivet Actor | Kubernetes Pod | Virtual Machine |
|---|---|---|---|
| Cold start (콜드 스타트) | ~20ms | ~6s | ~30s |
| ... |
State (상태)
| 지표 (Metric) | Rivet Actor | Redis | Postgres |
|---|---|---|---|
| Read latency (읽기 지연 시간) | 0ms | ~1ms | ~5ms |
Cold Start (콜드 스타트)
- Rivet Actor (~20ms): 단순한 프로세스 생성 (process spawn)이 아닌, 내구성이 있는 상태 초기화 (durable state init)를 포함합니다. Actor 키가 없으므로 교차 리전 잠금 (cross-region locking)이 발생하지 않습니다. Node.js와 FoundationDB를 사용하여 측정되었습니다.
- Kubernetes Pod (~6s): 사전 프로비저닝된 m5.large 노드가 있는 AWS EKS 상의 Node.js 24 Alpine 이미지 (압축 시 56MB) 기준입니다. 세부 내역: 이미지 풀 (image pull) 및 압축 해제 ~1s, 스케줄링 및 컨테이너 런타임 설정 ~3-4s, 컨테이너 시작 ~1s.
- Virtual Machine (~30s): Amazon Linux 2 AMI를 사용하는 AWS EC2 t3.nano의 실행부터 SSH 준비 완료까지의 시간입니다. t3.nano는 사용 가능한 가장 작은 EC2 인스턴스 (512MB RAM)입니다.
Memory Per Instance (인스턴스당 메모리)
- Rivet Actor (~0.6KB): Linux x86 환경의 Node.js v24에서 10,000개의 Actor를 생성하여 측정한 RSS 델타 (RSS delta)를 Actor 수로 나눈 값입니다.
- Kubernetes Pod (~50MB): Linux x86 환경의 최소 유휴 (idle) Node.js 컨테이너 기준: Node.js v24 런타임 (~43MB RSS), containerd-shim (~3MB), pause 컨테이너 (~1MB), 그리고 Pod당 kubelet 추적 비용 (~2MB).
- Virtual Machine (~512MB): 512MB의 할당된 메모리를 가진 사용 가능한 가장 작은 EC2 인스턴스인 AWS EC2 t3.nano 기준입니다.
Read Latency (읽기 지연 시간)
- Rivet Actor (0ms): 상태(State)를 네트워크 왕복 (network round-trip) 없이 Actor와 동일한 머신에 위치한 SQLite/KV 스토리지에서 읽습니다.
- Redis (~1ms): 애플리케이션과 동일한 가용 영역 (availability zone)에 있는 AWS ElastiCache Redis (cache.t3.micro) 기준입니다.
- Postgres (~5ms): 애플리케이션과 동일한 가용 영역 (availability zone)에 있는 AWS RDS PostgreSQL (db.t3.micro) 기준입니다.
Idle Cost (유휴 비용)
- Rivet Actor ($0): Rivet Actors가 서버리스 (serverless) 플랫폼에서 실행된다고 가정합니다. Actor는 유휴 인프라 비용 없이 0으로 스케일링 (scale to zero)됩니다. 전통적인 컨테이너 배포 방식은 유휴 비용이 발생할 수 있습니다.
- Virtual Machine (~$5/mo): 24/7 가동되는 AWS EC2 t3.nano ($0.0052/hr 컴퓨팅 비용 + 20GB gp3 스토리지 비용 $1.60/mo) 기준입니다. t3.nano는 사용 가능한 가장 작은 EC2 인스턴스 (512MB RAM)입니다.
- Kubernetes Cluster (~$85/mo): AWS EKS 컨트롤 플레인 (control plane, $73/mo)에 20GB gp3 스토리지를 가진 단일 t3.nano 워커 노드 (worker node)를 추가하여 24/7 가동하는 비용입니다.
수평적 확장 (Horizontal Scale)
- Rivet Actors (Infinite): 단일 클러스터 크기 제한 없이 노드를 추가함으로써 선형적으로 확장(Scale linearly)할합니다.
- Kubernetes (~5k nodes): Kubernetes 확장성 문서에 따라 클러스터당 최대 5,000개의 노드를 공식적으로 지원합니다.
멀티 리전 (Multi-Region)
- Rivet (Global edge network): 사용자 근처에 액터(actor)를 자동으로 생성하고 리전 간 라우팅(routing)을 처리합니다.
내장된 관측 가능성 (Built-In Observability)
로컬 개발부터 대규모 프로덕션 환경에 이르기까지 강력한 디버깅 및 모니터링 도구를 제공합니다.
<p align="center"> <img src="./.github/media/screenshots/inspector.png" alt="Rivet Inspector" width="800" /> </p>- SQLite Viewer — 액터(actor)의 SQLite 데이터베이스를 실시간으로 탐색하고 쿼리(query)합니다.
- Workflow State — 워크플로(workflow) 진행 상황, 단계 및 재시도(retries)를 실행되는 동안 검사합니다.
- Event Monitoring — 모든 상태 변화와 액션(action)이 발생하는 즉시 추적합니다.
배포 옵션 (Deployment Options)
RivetKit은 라이브러리입니다. 확장성, 결함 허용(fault tolerance) 및 관측 가능성(observability)이 필요할 때 Rivet Cloud에 연결하거나 셀프 호스팅(self-host)하세요.
<table> <tr> <td width="33%" valign="top">단순 라이브러리
패키지를 설치하고 로컬에서 실행하세요. 서버도, 인프라(infrastructure)도 필요 없습니다. 개발 중에는 프로세스 내에서 액터(actor)가 실행됩니다.
npm install rivetkit
셀프 호스팅 (Self-Host)
단일 Rust 바이너리 또는 Docker 컨테이너로 작동합니다. Postgres, 파일 시스템 또는 FoundationDB와 함께 사용할 수 있습니다.
docker run -p 6420:6420 rivetdev/engine
Rivet Cloud
완전 관리형(Fully managed) 서비스입니다. 글로벌 엣지 네트워크(Global edge network)를 제공합니다. Vercel, Railway, AWS 등 이미 배포 중인 기존 클라우드에 연결할 수 있습니다.
</td> </tr> </table>오픈 소스 및 허용적인 라이선스 (Permissively licensed) — 엔터프라이즈 배포, 클라우드 이식성, 그리고 벤더 종속 (Vendor lock-in) 방지를 위해 셀프 호스팅 (Self-hosting)은 중요합니다. Apache 2.0 라이선스는 귀하가 인프라를 직접 소유함을 의미합니다. GitHub에서 보기 →
시작하기
<table> <tr> <td width="50%" valign="top">코딩 에이전트와 함께 사용하기
귀하의 코딩 에이전트가 예제를 생성하거나 기존 프로젝트에 통합할 수 있도록 Rivet 기술 (Skills)을 부여하세요:
npx skills add rivet-dev/skills
Claude Code, Cursor, Windsurf 및 기타 AI 코딩 도구와 함께 작동합니다.
</td> <td width="50%" valign="top">처음부터 시작하기
</td> </tr> </table>통합 (Integrations)
서버리스 (Serverless), 컨테이너 (Containers), 또는 귀하의 자체 서버 — Rivet Actors는 기존의 인프라, 프레임워크 및 도구와 함께 작동합니다.
인프라 (Infrastructure): Vercel • Railway • AWS • Docker
프레임워크 (Frameworks): React • Next.js • Hono • Express • Elysia • tRPC
런타임 (Runtimes): Node.js • Bun • Deno
도구(Tools): Vitest • Pino • AI SDK • OpenAPI • AsyncAPI
이 저장소의 프로젝트(Projects in This Repository)
| 프로젝트 | 설명 |
|---|---|
| RivetKit TypeScript | 액터(actors)를 구축하기 위한 클라이언트 및 서버 라이브러리 |
| ... |
커뮤니티(Community)
- Discord - 커뮤니티와 채팅하세요
- X/Twitter - 업데이트를 팔로우하세요
- Bluesky - 업데이트를 팔로우하세요
- GitHub Discussions - 질문을 하세요
- GitHub Issues - 버그를 신고하세요
- 엔지니어와 대화하기 - 사용 사례에 대해 논의하세요
라이선스(License)
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기