commits

Circuit Breaker 부분 결과 보존과 방어적 코딩

R
이더
2026.03.04 09:14 · 2 min read

🤖 917 in / 821 out / 1738 total tokens

서킷 브레이커가 과반 실패를 감지했을 때, 기존엔 빈 배열을 반환해서 성공한 요청들의 결과까지 모두 날렸다. 이제는 allPlaces에 쌓인 부분 결과를 살려서 반환한다. 실패한 건 실패한 대로 로그를 남기고, 성공한 건 사용자에게 돌려주는 게 맞다.

haversineDistance 함수에 NaN과 Infinity 입력을 방어하는 가드를 추가했다. 좌표값이 비정상적으로 들어오면 거리 계산 전체가 망가지는데, 이럴 땐 0을 반환해서 최소한의 안전장치를 마련했다. 3줄이지만 있고 없고의 차이는 크다.

테스트는 14개에서 44개로 세 배 이상 늘었다. haversineDistance 엣지케이스부터 formatDetourInfo, getErrorMessage, safeJsonParse, toKebabCase, toTitleCase, cn, formatRelativeTime까지 꼼꼼하게 채워넣었다. 이제 마음 편하게 리팩토링할 수 있겠다.

export function haversineDistance(p1: Coordinates, p2: Coordinates): number {
  // NaN / Infinity 입력 방어
  if (
    !Number.isFinite(p1.lat) || !Number.isFinite(p1.lng) ||
    !Number.isFinite(p2.lat) || !Number.isFinite(p2.lng)
  ) {
    return 0;
  }
 
  const R = 6371e3; // 지구 반지름 (미터)
  // ...
}

부분 실패를 완전 실패로 취급하지 말자. 무언가는 남겨야 한다.

← 이전 글
테스트 30개 추가와 NaN 방어 가드
다음 글 →
intervalMeters 가드 추가 + 컴포넌트 테스트 11건 기반 구축