본문으로 건너뛰기

© 2026 Molayo

GeekNews헤드라인2026. 06. 15. 07:43

Show GN: Bundis – Bun.RedisClient를 위한 SQLite 기반 Redis 호환 서버

요약

Bun 환경에서 별도의 Redis 서버 설치 없이 Redis API와 Pub/Sub을 사용할 수 있게 해주는 SQLite 기반 호환 서버 Bundis를 소개합니다. 데이터는 SQLite 파일에 영속화되며, 인메모리 핫 캐시를 통해 읽기 성능을 가속화합니다.

핵심 포인트

  • Bun 내장 모듈만 사용하여 별도 의존성 없이 동작
  • SQLite를 활용한 데이터 영속성 및 빠른 콜드 스타트 제공
  • Bun.RedisClient와 코드 수정 없이 완벽 호환
  • 임베디드, 사이드카, 독립 데몬 등 다양한 실행 방식 지원

Bun 앱에서 Redis 스타일 API와 pub/sub(발행/구독)이 필요하지만, 별도의 Redis 서버를 운영하고 싶지 않을 때를 위한 프로젝트입니다.

순정 Bun.RedisClient의 접속 URL만 이 서버로 돌리면 코드 수정 없이 그대로 동작합니다. Redis 설치도, 네이티브 의존성(Native dependency)도 없습니다. 데이터는 SQLite 파일(WAL)에 영속화(Persistence)되어 재시작 후에도 살아남고, 읽기는 인메모리(In-memory) 핫 캐시(Hot cache)로 가속됩니다.

핵심

  • 의존성 0 — bun:sqlite, Bun.listen 모두 Bun 내장. 별도 설치 불필요
  • 영속성(Persistence) — 데이터가 SQLite 단일 파일에 저장, 재시작 후 생존
  • 콜드 스타트(Cold start) ~13ms — 데이터 크기와 무관 (Redis의 RDB/AOF 재생과 달리 기동 시 데이터 재생이 없음)
  • 핫 캐시(Hot cache) — write-through + 적응형 idle eviction + LRU 바이트 상한. 캐시는 순수 읽기 가속이고 SQLite가 항상 진실(Source of truth)
  • 3가지 실행 방식 — 프로세스 내 embed / 사이드카(Sidecar) spawn / 독립 데몬(Daemon, bunx)

사용 예

import { RedisClient } from "bun";

import { embedServer } from "bundis";

const server = embedServer({ dbPath: "./data.db" });

const client = new RedisClient(server.url);

await client.set("k", "v");

명확히 비목적인 것들

  • Bun 외 런타임(Node.js/Deno 등)과 Bun.RedisClient 외 클라이언트(ioredis, node-redis, redis-py 등)는 지원하지 않습니다. 와이어 계약("올바른 바이트가 들어오면 올바른 바이트로 답한다")이 보증 대상입니다
  • Redis Cluster/Sentinel, 다중 프로세스 .db 공유, HA/failover는 범위 밖 (단일 writer 가정)
  • Lua 스크립팅(EVAL), list/sorted-set 명령군은 미구현 (계획됨)

인터페이스 호환이 목표지 Redis 성능 클론이 아닙니다. 처리량(Throughput)은 Redis가 우위이며, Bundis가 제공하는 가치는 "Redis 설치 없이 Bun에서 디스크 영속 + Redis API"라는 운영 편의성입니다. 성능 수치는 실제 Bun.RedisClient로 loopback TCP를 거쳐 측정한 호환 경로 벤치마크이며, 방법론과 before/after 수치는 저장소의 PERFORMANCE.md에 공개되어 있습니다.

GitHub: https://github.com/Munsunty/bundis

설치: bun add bundis

AI 자동 생성 콘텐츠

본 콘텐츠는 RSS: GeekNews (한국어)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0