클래스: RateLimiter<TFn>
정의 위치: rate-limiter.ts:156
요청률 제한 함수를 생성하는 클래스입니다.
요청률 제한은 시간 윈도우 안에서 한도까지 함수를 실행할 수 있게 한 뒤, 윈도우가 지날 때까지 이후의 모든 호출을 차단하는 간단한 방식입니다. 이로 인해 모든 실행이 즉시 일어난 뒤 완전히 차단되는 "버스트성" 동작이 발생할 수 있습니다. 이 동기 버전은 더 가볍고 대개 필요한 기능을 모두 제공하지만, 프로미스, 재시도 지원, 중단 기능 또는 고급 오류 처리가 필요하다면 AsyncRateLimiter로 전환합니다.
요청률 제한기는 다음 두 가지 윈도우 유형을 지원합니다.
- 'fixed': 윈도우 기간이 지나면 재설정되는 엄격한 윈도우입니다. 윈도우 안의 모든 실행이 한도에 포함되며, 기간이 지나면 윈도우가 완전히 재설정됩니다.
- 'sliding': 이전 실행이 만료됨에 따라 새 실행을 허용하는 이동식 윈도우입니다. 시간의 흐름에 따라 더 일정한 실행률을 제공합니다.
더 매끄러운 실행 패턴이 필요하다면 다음 기능의 사용을 고려합니다.
- 스로틀: 실행 사이에 일정한 간격을 보장합니다(예: 200ms당 최대 한 번)
- 디바운스: 호출이 잠시 멈출 때까지 기다린 후 실행합니다(예: 500ms 동안 호출이 없을 때)
요청률 제한은 엄격한 API 한도나 리소스 제약에 사용하는 것이 가장 적합합니다. UI 업데이트나 빈번한 이벤트를 완화하는 용도라면 일반적으로 스로틀이나 디바운스가 더 나은 사용자 경험을 제공합니다.
상태 관리:
- 반응형 상태 관리에 TanStack Store를 사용합니다
- 요청률 제한기를 생성할 때
initialState를 사용하여 초기 상태 값을 제공합니다 onExecute콜백을 사용하여 함수 실행에 반응하고 사용자 정의 로직을 구현합니다- 요청률 한도를 초과하여 실행이 거부될 때
onReject콜백을 사용하여 반응합니다 - 상태에는 실행 횟수, 실행 시각, 거부 횟수가 포함됩니다
- 클래스를 직접 사용할 때는
rateLimiter.store.state를 통해 상태에 접근할 수 있습니다 - 프레임워크 어댑터(React/Solid)를 사용할 때는
rateLimiter.state에서 상태에 접근합니다
예시
const rateLimiter = new RateLimiter(
(id: string) => api.getData(id),
{
limit: 5,
window: 1000,
windowType: 'sliding',
}
);
// Will execute immediately until limit reached, then block
rateLimiter.maybeExecute('123');
타입 매개변수
TFn
TFn extends AnyFunction
생성자
생성자
new RateLimiter<TFn>(fn, initialOptions): RateLimiter<TFn>;
정의 위치: rate-limiter.ts:163
매개변수
fn
TFn
initialOptions
RateLimiterOptions<TFn>
반환값
RateLimiter<TFn>
속성
fn
fn: TFn;
정의 위치: rate-limiter.ts:164
key
key: string | undefined;
정의 위치: rate-limiter.ts:159
options
options: RateLimiterOptions<TFn>;
정의 위치: rate-limiter.ts:160
store
readonly store: Store<Readonly<RateLimiterState>>;
정의 위치: rate-limiter.ts:157
메서드
getMsUntilNextWindow()
getMsUntilNextWindow(): number;
정의 위치: rate-limiter.ts:358
다음 실행이 가능해질 때까지 남은 밀리초 수를 반환합니다
반환값
number
getRemainingInWindow()
getRemainingInWindow(): number;
정의 위치: rate-limiter.ts:350
현재 윈도우에서 허용되는 남은 실행 횟수를 반환합니다
반환값
number
maybeExecute()
maybeExecute(...args): boolean;
정의 위치: rate-limiter.ts:252
구성된 한도 안에 있으면 요청률이 제한된 함수의 실행을 시도합니다. 현재 윈도우의 호출 횟수가 한도를 초과하면 실행을 거부합니다.
매개변수
args
...Parameters<TFn>
반환값
boolean
예시
const rateLimiter = new RateLimiter(fn, { limit: 5, window: 1000 });
// First 5 calls will return true
rateLimiter.maybeExecute('arg1', 'arg2'); // true
// Additional calls within the window will return false
rateLimiter.maybeExecute('arg1', 'arg2'); // false
reset()
reset(): void;
정의 위치: rate-limiter.ts:369
요청률 제한기의 상태를 재설정합니다
반환값
void
setOptions()
setOptions(newOptions): void;
정의 위치: rate-limiter.ts:191
요청률 제한기 옵션을 업데이트합니다
매개변수
newOptions
Partial<RateLimiterOptions<TFn>>
반환값
void