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 프록시 메커니즘에 대한 이해를 깊게 할 수 있고, 보다 탄력적인 코드를 작성하는 데 도움이 됩니다.