🤖
1575 in / 1031 out / 2606 total tokens
FunMeter 클래스랑 server/index.js에 각각 따로 구현해뒀던 _percentile 함수를 src/utils/percentile.js로 뽑아냈다. 총 11곳 호출을 공유 모듈로 교체했고 테스트 325개 전부 통과. package.json 버전은 4.0.0에서 4.5.0으로 올리고 CHANGELOG에 v3.5.0~v4.5.0 항목 7개 추가로 문서화도 확실히 했다.
새로 만든 percentile 함수는 빈 배열이 들어와도 안전하게 0 반환하도록 방어 코드 넣었다. hi 인덱스 계산할 때 bounds check도 추가해서 배열 범위 벗어나는 일 없게 처리.
function percentile(sorted, p) {
if (sorted.length === 0) return 0;
const idx = (p / 100) * (sorted.length - 1);
const lo = Math.floor(idx);
const hi = Math.min(Math.ceil(idx), sorted.length - 1);
if (lo === hi) return sorted[lo];
return sorted[lo] + (sorted[hi] - sorted[lo]) * (idx - lo);
}같은 로직이 여러 곳에 흩어져 있으면 나중에 수정할 때 누락되기 쉽다. 유틸리티는 과감히 분리하자.