6개의 프레임워크. 4개의 스토리지 백엔드. 1개의 import. 0개의 dependencies.

발행: (2026년 2월 22일 오후 02:31 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

Six frameworks. Four storage backends. One import. Zero dependencies.

어디서든 동일한 API

// Express
import { hitlimit } from '@joint-ops/hitlimit';
app.use(hitlimit({ limit: 100, window: '1m' }));

// Fastify
import { hitlimit } from '@joint-ops/hitlimit/fastify';
await app.register(hitlimit, { limit: 100, window: '1m' });

// Hono
import { hitlimit } from '@joint-ops/hitlimit/hono';
app.use(hitlimit({ limit: 100, window: '1m' }));

// NestJS
import { HitLimitModule, HitLimitGuard } from '@joint-ops/hitlimit/nest';
@Module({
  imports: [HitLimitModule.register({ limit: 100, window: '1m' })],
  providers: [{ provide: APP_GUARD, useClass: HitLimitGuard }],
})
export class AppModule {}

// Bun.serve
import { hitlimit } from '@joint-ops/hitlimit-bun';
Bun.serve({ fetch: hitlimit({ limit: 100, window: '1m' }, handler) });

// Elysia
import { hitlimit } from '@joint-ops/hitlimit-bun/elysia';
new Elysia().use(hitlimit({ limit: 100, window: '1m' })).listen(3000);

프레임워크를 내일 바꾸어도 레이트‑리밋 코드는 그대로 유지됩니다.

기본 제공되는 4가지 스토리지 백엔드

// Memory (default) – fastest, no setup
app.use(hitlimit({ limit: 100, window: '1m' }));

// SQLite – survives restarts
app.use(hitlimit({ store: sqliteStore({ path: './limits.db' }), limit: 100, window: '1m' }));

// Redis – distributed across instances
app.use(hitlimit({ store: redisStore({ url: process.env.REDIS_URL }), limit: 100, window: '1m' }));

// Postgres – use your existing database
app.use(hitlimit({ store: postgresStore({ pool }), limit: 100, window: '1m' }));

첫날엔 메모리를 사용하고, 규모가 커지면 Postgres나 Redis로 옮기세요. 다른 부분은 전혀 바뀌지 않습니다.

v1.2.0 신규 기능: PostgreSQL 스토어

import { postgresStore } from '@joint-ops/hitlimit/stores/postgres';
import { Pool } from 'pg';

const pool = new Pool({ connectionString: process.env.DATABASE_URL });

app.use(
  hitlimit({
    limit: 100,
    window: '1m',
    store: postgresStore({ pool }),
  })
);

요청당 하나의 원자적 쿼리만 실행됩니다. 레이스 컨디션이 없습니다. 첫 실행 시 테이블이 자동으로 생성됩니다. 이름이 지정된 준비된 문장은 30‑40 % 낮은 레이턴시를 제공합니다. 관리할 새로운 인프라가 필요하지 않습니다.

빠름

Node.js (10K unique IPs)
Memory       3.16M ops/s   316ns
SQLite       352K ops/s   2.8µs
Redis        6.7K ops/s   149µs
Postgres     3.0K ops/s   336µs

Bun (10K unique IPs)
Memory       8.32M ops/s   120ns
bun:sqlite   325K ops/s   3.1µs
Redis        6.7K ops/s   148µs
Postgres     3.7K ops/s   273µs

피크: 12.38 M ops/s (Bun) / 4.83 M ops/s (Node.js).

모든 벤치마크는 오픈 소스입니다: .

단순 카운터 그 이상

  • 계층형 제한 – 무료, 프로, 엔터프라이즈 플랜용.
  • 자동 차단N 번 위반하면 반복 위반자를 차단.
  • 그룹 제한 – 팀 또는 조직 별 할당량.
  • 스킵 규칙 – 헬스 체크, 관리자, 내부 라우트 제외.
  • 사람이 읽기 쉬운 윈도우 – 밀리초 대신 '15m', '1h', '1d' 와 같이 지정.

모두 기본 제공이며, 의존성은 전혀 없습니다.

시작하기

npm install @joint-ops/hitlimit    # Node.js
bun add @joint-ops/hitlimit-bun    # Bun

Docs | npm | Release notes

시간을 절약한다면 별표를 눌러 주세요.

0 조회
Back to Blog

관련 글

더 보기 »