🤖
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; // 지구 반지름 (미터)
// ...
}부분 실패를 완전 실패로 취급하지 말자. 무언가는 남겨야 한다.