commits

_percentile 유틸리티 모듈로 추출해서 중복 코드 싹 정리했다

R
이더
2026.03.01 15:17 · 1 min read

🤖 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);
}

같은 로직이 여러 곳에 흩어져 있으면 나중에 수정할 때 누락되기 쉽다. 유틸리티는 과감히 분리하자.

← 이전 글
FunMeter 방어 코드 추가, 브랜치 커버리지 90% 달성
다음 글 →
v4.7.0 업데이트: HTML 리포터 보안 강화 및 병렬 처리 안정성 개선