Chaos Proxy: JavaScript 장난

발행: (2025년 12월 28일 오전 05:34 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

Chaos Proxy 개요

JavaScript Proxy 객체는 기본 연산을 가로채고 재정의할 수 있습니다. 이 예제는 구성 가능한 오류 확률에 따라 원본 함수의 결과를 반환하거나 대체 결과를 무작위로 반환하는 간단한 프록시를 보여줍니다.

구현

const chaosProxy = (source, odds, alternative) => new Proxy(source, {
  apply(target, context, args) {
    // Return the alternative result with probability `odds`
    return Math.random() - odds >= 0
      ? alternative.apply(context, args)
      : target.apply(context, args);
  }
});
  • source – 프록시할 원본 함수.
  • odds – 대체 결과를 반환할 확률 (1을 기준으로 한 비율).
  • alternative – 오류가 발생했을 때 실행할 대체 함수.

사용 예시

const circleArea = radius => Math.PI * radius ** 2;
const circleAreaClose = radius => 3.14 * radius ** 2;

// 50 % 확률로 정확도가 낮은 근사값 사용
const roughArea = chaosProxy(circleArea, 0.5, circleAreaClose);

console.log(roughArea(2)); // → 12.566370614359172 (정확)
console.log(roughArea(2)); // → 12.56 (근사)

roughArea를 반복해서 실행하면 정확한 결과와 근사 결과가 섞여 나타나며, 프록시가 어떻게 비결정적 동작을 주입할 수 있는지 보여줍니다.

확장 및 아이디어

  • 다중 대체 – 여러 대체 함수에 서로 다른 가중치/확률을 할당합니다.
  • 비동기 처리Promise 값을 조작하거나 비동기 응답에 무작위 지연을 도입합니다.
  • 인자 변형 – 전달하기 전에 인자 객체를 수정하여 변형이 애플리케이션에 미치는 영향을 확인합니다.
  • 결정적 시퀀스 – 무작위 선택을 미리 정의된 응답 시퀀스로 교체하여 재현 가능한 테스트를 수행합니다.

이러한 변형을 실험해 보면 JavaScript 프록시 메커니즘에 대한 이해를 깊게 할 수 있고, 보다 탄력적인 코드를 작성하는 데 도움이 됩니다.

Back to Blog

관련 글

더 보기 »

Hono용 CLI 어댑터 구축

개요: hono-cli-adapter는 CLI에서 Hono 앱을 직접 호출할 수 있게 해줍니다. 비즈니스 로직은 Hono에 그대로 두어 Postman이나 Insomnia로 디버깅하고, …

V8 커버리지 제한 사항 및 우회 방법

V8 Native Coverage – Blind Spots & Work‑arounds for React JSX V8 네이티브 커버리지는 강력합니다: 어떤 번들러와도 작동하고, 오버헤드가 최소이며, 데이터를 수집할 수 있습니다.